IT & 웹개발

Docker와 Kubernetes – 컨테이너 기반 개발 환경 구축하기

kkwako 2025. 3. 19. 20:43

Docker와 Kubernetes – 컨테이너 기반 개발 환경 구축하기

 

1. 개요

최근 IT 업계에서는 애플리케이션 배포의 효율성과 확장성을 극대화하기 위해 컨테이너 기술을 적극 활용하고 있다. 대표적인 컨테이너 기술인 Docker와 이를 효과적으로 오케스트레이션하는 Kubernetes클라우드 네이티브 환경에서 필수적인 요소로 자리 잡고 있다.

이번 글에서는 Docker와 Kubernetes의 개념과 역할, 그리고 이를 활용한 개발 환경 구축 방법을 소개하겠다.


2. Docker – 컨테이너 기술의 핵심

✅ 1) Docker란?

Docker는 애플리케이션을 컨테이너(Container) 라는 단위로 실행할 수 있도록 지원하는 플랫폼이다. 컨테이너는 운영체제(OS) 환경과 독립적으로 동작하며, 빠른 배포 및 실행이 가능하다.

Docker의 주요 특징

  • 경량성 → 가상 머신(VM)보다 가볍고 빠름
  • 이식성 → 운영체제(OS)에 상관없이 동일한 환경에서 실행 가능
  • 확장성 → 여러 개의 컨테이너를 쉽게 관리 가능
  • 빠른 배포 → 애플리케이션을 신속하게 테스트 및 배포 가능

✅ 2) Docker 기본 사용법

① Docker 설치

② Docker 이미지 실행

아래 명령어를 실행하면 nginx 웹 서버가 컨테이너로 실행된다.

bash
복사편집
docker run -d -p 8080:80 nginx
  • -d: 백그라운드에서 실행
  • -p 8080:80: 호스트의 8080 포트를 컨테이너의 80번 포트에 연결
  • nginx: 사용할 Docker 이미지 이름

③ 실행 중인 컨테이너 확인

bash
복사편집
docker ps

④ 컨테이너 중지 및 삭제

bash
복사편집
docker stop <컨테이너 ID> docker rm <컨테이너 ID>

⑤ Dockerfile을 활용한 이미지 생성

애플리케이션을 컨테이너화하려면 Dockerfile을 작성해야 한다.

dockerfile
복사편집
# Node.js 기반 애플리케이션 컨테이너 생성 예제 FROM node:18 WORKDIR /app COPY . . RUN npm install CMD ["node", "server.js"] EXPOSE 3000

이후 아래 명령어로 이미지를 빌드하고 실행할 수 있다.

bash
복사편집
docker build -t my-app . docker run -d -p 3000:3000 my-app

3. Kubernetes – 컨테이너 오케스트레이션의 핵심

✅ 1) Kubernetes란?

Kubernetes(K8s)는 여러 개의 컨테이너를 자동으로 배포, 확장, 관리하는 오픈소스 플랫폼이다.

Kubernetes의 주요 기능

  • 컨테이너 자동 배포 및 확장
  • 부하 분산(Load Balancing)
  • 자동 복구(Self-healing)
  • 컨테이너 오케스트레이션(Orchestration)

✅ 2) Kubernetes 기본 개념

개념설명
Pod 하나 이상의 컨테이너를 포함하는 최소 실행 단위
Node 컨테이너를 실행하는 물리적/가상 머신
Cluster 여러 개의 노드(Node)로 구성된 환경
Deployment 애플리케이션의 배포 및 업데이트를 관리
Service 네트워크를 통해 Pod에 접근 가능하게 하는 요소

✅ 3) Kubernetes 기본 사용법

① Minikube 설치 (로컬에서 Kubernetes 실행하기)

Minikube는 로컬 환경에서 Kubernetes 클러스터를 실행할 수 있도록 도와준다.

bash
복사편집
# Minikube 설치 (MacOS) brew install minikube # Minikube 시작 minikube start

② Deployment 생성

아래 명령어를 사용하면 nginx 웹 서버를 Kubernetes 클러스터에 배포할 수 있다.

bash
복사편집
kubectl create deployment my-nginx --image=nginx

③ 실행 중인 Deployment 확인

bash
복사편집
kubectl get deployments

④ Pod 목록 확인

bash
복사편집
kubectl get pods

⑤ Kubernetes 서비스 생성

외부에서 접근할 수 있도록 Service를 생성해야 한다.

bash
복사편집
kubectl expose deployment my-nginx --type=LoadBalancer --port=80

⑥ 실행된 서비스 확인

bash
복사편집
kubectl get services

4. Docker와 Kubernetes의 차이점

비교 항목DockerKubernetes
역할 컨테이너 생성 및 실행 컨테이너 배포 및 관리
실행 방식 개별 컨테이너 관리 다수의 컨테이너를 자동 조정
확장성 제한적 자동 확장 가능
부하 분산 직접 설정 필요 기본 제공
장애 복구 직접 처리 필요 자동 복구 기능 제공

Docker는 컨테이너 단위의 애플리케이션 실행을 담당하며,
Kubernetes는 다수의 컨테이너를 효율적으로 관리하는 역할을 수행한다.


5. Docker + Kubernetes를 활용한 개발 환경 구축

✅ 1) 개발 워크플로우

  1. Docker를 사용해 애플리케이션 컨테이너화
  2. Kubernetes를 활용해 여러 컨테이너를 배포 및 관리
  3. CI/CD 파이프라인과 연동하여 자동 배포 설정

✅ 2) 실제 사용 사례

  • 마이크로서비스 아키텍처(MSA) 환경 구축
  • DevOps 기반 CI/CD 자동화
  • 클라우드 네이티브 애플리케이션 배포(AWS, GCP, Azure 등)

6. 결론

Docker와 Kubernetes는 컨테이너 기반 개발 환경 구축의 핵심 요소다.

Docker를 활용하면 애플리케이션을 효율적으로 컨테이너화할 수 있으며,
Kubernetes를 도입하면 다수의 컨테이너를 자동으로 배포 및 확장할 수 있다.

현대적인 애플리케이션 개발에서는 클라우드 네이티브 환경에서 Docker와 Kubernetes를 함께 사용하는 것이 필수적이다. 이를 효과적으로 활용하면 유지보수가 쉬운 확장 가능한 애플리케이션을 구축할 수 있을 것이다.