1단계: Spring Boot 애플리케이션 Docker 이미지 build, push
jar 파일을 실행할 수 있는 Docker 이미지를 만들고, Kubernetes 클러스터가 접근할 수 있도록 Docker Hub와 같은 컨테이너 레지스트리에 push해야함.
Dockerfile 작성
프로젝트 루트에 다음과 같이 Dockerfile을 작성.
# 베이스 이미지로 OpenJDK 17 버전.
FROM openjdk:17
# 빌드 시 인자로 jar 파일의 경로.
ARG JAR_FILE=*.jar
# jar 파일을 app.jar 라는 이름으로 컨테이너에 복사.
COPY ${JAR_FILE} app.jar
# 컨테이너가 시작될 때 실행될 명령어.
ENTRYPOINT ["java","-jar","/app.jar"]
Docker 이미지 build, push, 실행
Docker 이미지를 빌드, Docker 레지스트리(여기선 docker Hub)에 푸시, 로컬에서 컨테이너를 실행.
# Dockerfile을 사용하여 'dydrbs159/springboottest' 라는 이름의 이미지를 빌드.
# 여기서 'dydrbs159'는 Docker Hub 사용자 이름.
docker build -t dydrbs159/springboottest:latest -f Dockerfile .
# Docker Hub에 로그인.
docker login
# 빌드된 이미지를 Docker Hub에 푸시.
docker push dydrbs159/springboottest:latest
# 로컬에서 테스트
# 빌드된 이미지를 백그라운드에서 실행하고, 호스트의 8080 포트와 컨테이너의 8080 포트를 연결.
docker run -d --name spring_server -p 8080:8080 dydrbs159/springboottest:latest
http://localhost:8080으로 접속하여 애플리케이션이 정상적으로 실행되는지 확인가능. 이미지를 Docker Hub에 push했기 때문에, Kubernetes 클러스터가 이 이미지를 가져와 사용가능.
2단계: Kubernetes에 배포하기
Deployment.yaml 작성
apiVersion: apps/v1
kind: Deployment
metadata:
name: devops-spring-deployment
spec:
selector:
matchLabels:
app: devops-spring-app
replicas: 1 # 1개의 파드를 실행합니다.
template:
metadata:
labels:
app: devops-spring-app
spec:
containers:
- name: core
image: dydrbs159/springboottest:latest # Docker Hub에 푸시한 이미지를 사용.
imagePullPolicy: Always
ports:
- containerPort: 8080 # 컨테이너가 노출할 포트.
protocol: TCP
resources:
requests:
cpu: 500m
memory: 1000Mi
Service.yaml 작성
배포된 애플리케이션을 외부에서 접근할 수 있도록 네트워크 서비스를 생성하는 service.yaml 파일을 작성.
apiVersion: v1
kind: Service
metadata:
name: devops-spring-service
spec:
type: NodePort # 외부에서 접근 가능한 NodePort 타입으로 서비스를 노출.
ports:
- port: 8080
protocol: TCP
targetPort: 8080
selector:
app: devops-spring-app # 'devops-spring-app' 레이블을 가진 파드에 트래픽을 전달.
Kubernetes 리소스 생성 및 확인
작성한 yaml 파일들을 kubectl 명령어를 사용하여 Kubernetes 클러스터에 적용.
# Deployment를 생성.
kubectl apply -f deployment.yaml
# Service를 생성.
kubectl apply -f service.yaml
# 생성된 Service를 통해 로컬에서 애플리케이션에 접근할 수 있도록 포트 포워딩을 설정.
# 테스트 목적의 포트포워딩이고 운영 환경에서는 Ingress나 LoadBalancer 사용
kubectl port-forward service/devops-spring-service 8080:8080
http://localhost:8080으로 접속하면 Kubernetes 클러스터 위에서 실행 중인 Spring Boot 애플리케이션에 접근 확인 가능.
'Linux > K8s' 카테고리의 다른 글
| ArgoCD API를 활용한 Application 파라미터 업데이트 (0) | 2026.01.05 |
|---|---|
| Custom metric 기반 HPA 구성하기(httpd) (0) | 2025.11.16 |
| Kubernetes 환경 구축 하기 (0) | 2025.08.05 |
| ArgoCD 설치(minikube) (0) | 2025.04.28 |
| k8s host volume mount test (0) | 2024.04.18 |