Published on

4단계: Docker 이미지 → Kubernetes 배포

Docker 이미지 빌드하기

# 예시: Node.js 간단 서버 Dockerfile
FROM node:18
WORKDIR /app
COPY . .
RUN npm install
CMD ["node", "index.js"]
EXPOSE 3000
# 빌드
docker build -t my-node-app .

로컬 이미지 Kubernetes에서 사용하기 (minikube 환경 기준)

방법 1: minikube 내부에서 빌드

# minikube 환경에서 docker 빌드
eval $(minikube docker-env)
docker build -t my-node-app .

방법 2: 이미지 푸시 후 사용 (원격 레지스트리)

# Docker Hub 예시
docker tag my-node-app your_dockerhub_id/my-node-app
docker push your_dockerhub_id/my-node-app
# Deployment YAML 예시
containers:
  - name: my-node-app
    image: your_dockerhub_id/my-node-app

Deployment 및 Service 배포

kubectl create deployment myapp --image=my-node-app
kubectl expose deployment myapp --type=NodePort --port=3000
minikube service myapp

요약

  • Docker로 만든 이미지를 Kubernetes에서 사용하려면, 이미지가 클러스터 내부에서 접근 가능해야 한다.
  • minikube에서는 자체 Docker 데몬을 통해 로컬 빌드 이미지를 직접 사용할 수 있다.
  • 실제 배포 환경에서는 레지스트리에 푸시한 이미지 사용이 일반적이다.

심화학습

Q1: Docker 이미지가 Kubernetes에서 바로 사용되지 않는 이유는?

A: Kubernetes는 기본적으로 이미지 레지스트리에서 이미지를 가져오도록 설계되어 있기 때문에, 로컬에서 만든 이미지는 클러스터가 인식하지 못한다.

Q2: minikube 환경에서 로컬 Docker 이미지 사용 시 주의할 점은?

A: 반드시 eval $(minikube docker-env) 명령으로 minikube 내부 Docker 환경으로 전환한 뒤 빌드해야 한다. 그렇지 않으면 이미지가 클러스터 안에서 보이지 않는다.

Q3: kubectl expose 명령의 역할은 정확히 무엇인가?

A: Pod 또는 Deployment를 Kubernetes Service로 노출하여 클러스터 외부나 내부에서 접근할 수 있게 만든다. type에 따라 접근 방식(NodePort, ClusterIP 등)이 달라진다.