본문 바로가기
Cloud/Kubernetes

[K8S] docker-compose → Kubernetes 변환

by Tenma2 2026. 2. 7.
사용 중인
docker-compose.yaml
을 Kubernetes용 매니페스트(YAML 파일)로 변환하여,
로컬 환경(Docker Desktop)에서 실행하는 과정에 대해 알아보겠습니다!

 

 

 

 


전체 진행 순서

  1. Docker Desktop에서 Kubernetes 활성화
  2. 로컬 Docker 이미지 빌드
  3. Kubernetes YAML 파일 작성
  4. kubectl로 배포
  5. 실행 확인

1. Docker Desktop에서 Kubernetes 활성화

먼저 로컬에서 Kubernetes를 켜야 합니다.

설정 방법

  1. Docker Desktop 실행
  2. ⚙️ Settings → Kubernetes 메뉴
  3. Enable Kubernetes 체크
  4. Apply & Restart

Kubeadm 옵션은 실제 리눅스 서버 설치 방식과 가장 유사한 단일 노드 클러스터를 구성합니다.


설치 확인

kubectl cluster-info

 

정상적으로 정보가 나오면 성공입니다.

 

 


 

2. 로컬 Docker 이미지 빌드

ECR에 올리지 않고
로컬 Kubernetes가 내 PC 이미지를 직접 사용하도록 설정합니다.

프로젝트 루트(test/)에서 실행:

# Backend
docker build -t product-service:local ./services/product-service

# Frontend
docker build -t web-frontend:local ./apps/web-frontend

👉 :local 태그를 붙여 구분해줍니다.

 

백엔드 이미지 빌드
프론트렌드 이미지 빌드

 

 


3. Kubernetes YAML 파일 작성

📂 폴더 구조

test/
├── docker-compose.yml
├── k8s/
│   ├── backend.yaml
│   └── frontend.yaml
├── apps/
└── services/

핵심 옵션: imagePullPolicy: Never
→ 외부 레지스트리에서 이미지를 찾지 않고 로컬 이미지를 사용합니다.


📄 k8s/backend.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: backend
  template:
    metadata:
      labels:
        app: backend
    spec:
      containers:
        - name: backend
          image: product-service:local
          imagePullPolicy: Never
          ports:
            - containerPort: 4000
---
apiVersion: v1
kind: Service
metadata:
  name: backend-service
spec:
  type: LoadBalancer
  selector:
    app: backend
  ports:
    - protocol: TCP
      port: 4000
      targetPort: 4000

📄 k8s/frontend.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: frontend-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: frontend
  template:
    metadata:
      labels:
        app: frontend
    spec:
      containers:
        - name: frontend
          image: web-frontend:local
          imagePullPolicy: Never
          ports:
            - containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  name: frontend-service
spec:
  type: LoadBalancer
  selector:
    app: frontend
  ports:
    - protocol: TCP
      port: 3000
      targetPort: 3000

4️⃣ Kubernetes 배포

kubectl apply -f k8s/

상태 확인

kubectl get pods
kubectl get services
  • STATUS → Running
  • EXTERNAL-IP → localhost

서비스 상태 확인

 

파드(pod) 상태 확인

정상이라면 준비 완료 ✅


5. 실행 확인

브라우저 접속:

  • Frontend
  • http://localhost:3000
  • Backend
  • http://localhost:4000/products/1

React 코드에서 API 주소가 localhost:4000이라면
코드 수정 없이 그대로 동작합니다.

 

 


[Troubleshooting]

❗ ErrImagePull / ImagePullBackOff

원인:

  • docker build 안 했을 때
  • 이미지 이름 오타
  • imagePullPolicy 설정 누락

❗ 접속이 안 될 때

kubectl get svc

포트가 3000 / 4000으로 열려있는지 확인하세요.

 


[Deployment의 역할 정리]

Kubernetes Deployment는 다음을 담당합니다:

  • Pod 생성
  • Pod 자동 복구
  • Pod 개수 유지 (replicas)
  • Rolling Update (무중단 배포)
  • 롤백 기능 제공

즉, 단순 실행이 아니라 운영을 위한 컨트롤러입니다.

 

 


[마무리]

docker-compose 기반 로컬 개발 환경을
Kubernetes 환경으로 옮기는 가장 기본적인 방법입니다.

이 과정을 이해하면:

  • EKS 배포
  • Helm 도입
  • GitOps 적용
  • HPA 확장

까지 확장할 수 있습니다.

 

'Cloud > Kubernetes' 카테고리의 다른 글

[CKA] CKA 시험 후기 + 꿀팁  (0) 2026.03.25