클라우드

[클라우드] Docker? Kubernetes? 개념 정리

Newbie Developer 2025. 2. 4. 18:13

안녕하세요. 새내기 개발자입니다. 공부하면서 정리하는 글로 틀린 부분은 언제나 댓글로 환영입니다!

 

현대 소프트웨어 개발에서는 빠른 배포, 확장성, 일관된 실행 환경이 필수적입니다. 이를 가능하게 하는 핵심 기술이 바로 도커(Docker)와 쿠버네티스(Kubernetes) 입니다.

**도커(Docker)**는 컨테이너를 사용하여 애플리케이션을 패키징하고 실행하는 기술이며, **쿠버네티스(Kubernetes)**는 이러한 컨테이너를 대규모로 관리하고 자동화하는 오케스트레이션 도구입니다.

이 글에서는 도커와 쿠버네티스의 개념, 차이점, 그리고 실제 프로젝트에서 어떻게 활용할 수 있는지에 대해 살펴보겠습니다. 🚀


1️⃣ 도커(Docker)란?

🔹 개념

**도커(Docker)**는 컨테이너(Container) 기반의 가상화 기술을 제공하는 플랫폼입니다. 애플리케이션을 컨테이너로 패키징하여 어디서든 실행할 수 있도록 해주며, 개발과 배포 환경을 일관되게 유지할 수 있습니다.

🔹 도커의 특징

경량 컨테이너 실행 → 기존 VM보다 가벼움
이식성(Portability) → OS와 하드웨어에 관계없이 어디서나 실행 가능
빠른 배포 및 확장(Scaling) → 컨테이너 실행 속도가 빠름
이미지 기반 배포 → 동일한 환경을 유지 가능

🔹 도커와 기존 VM(가상머신) 비교

항목 가상머신(VM 도커(Docker)
실행 방식 하이퍼바이저(VMware, VirtualBox) 위에서 실행 OS 위에서 컨테이너 실행
OS 포함 여부 VM마다 Guest OS 포함 컨테이너는 Host OS 공유
성능 무겁고 부팅 속도 느림 가볍고 실행 속도 빠름
자원 활용 VM마다 별도 리소스 할당 컨테이너는 최소한의 리소스 사용
배포 방식 이미지(ISO) 또는 설정 파일 필요 컨테이너 이미지 기반으로 배포

🔹 도커 기본 명령어

# 도커 이미지 다운로드
docker pull nginx

# 컨테이너 실행
docker run -d -p 8080:80 --name my-nginx nginx

# 실행 중인 컨테이너 목록 조회
docker ps

# 컨테이너 중지 및 삭제
docker stop my-nginx
docker rm my-nginx

# 도커 이미지 목록 조회
docker images

2️⃣ 쿠버네티스(Kubernetes)란?

🔹 개념

**쿠버네티스(Kubernetes, k8s)**는 컨테이너 오케스트레이션(Container Orchestration) 도구로, 도커 같은 컨테이너를 자동으로 배포, 확장, 관리하는 플랫폼입니다.

🔹 쿠버네티스의 주요 기능

컨테이너 자동 배포 및 관리
컨테이너 확장(Scaling) 지원
로드 밸런싱 및 서비스 디스커버리
자동 복구(Self-healing) → 장애 발생 시 자동 복구
다양한 스토리지 지원 (NFS, Ceph, AWS EBS 등)

🔹 쿠버네티스 주요 개념

개념 설명
Pod 컨테이너가 실행되는 최소 단위
Node 쿠버네티스 클러스터에서 컨테이너가 배포되는 서버
Cluster 여러 노드로 구성된 쿠버네티스 환경
Deployment 컨테이너 배포 및 업데이트 관리
Service 네트워크에서 Pod를 노출하는 방법
Ingress 외부에서 접근 가능한 도메인 및 URL 설정
ConfigMap & Secret 환경 변수 및 보안 데이터 저장

3️⃣ 도커 vs 쿠버네티스: 차이점 및 관계

🔹 도커와 쿠버네티스의 차이점

항목도커(Docker)쿠버네티스(Kubernetes)

항목 도커(Docker) 쿠버네티스(Kubernetes)
역할 컨테이너 생성 및 관리 컨테이너 오케스트레이션 (배포, 확장, 복구)
실행 방식 개별 컨테이너 단위 실행 여러 개의 컨테이너를 클러스터로 관리
확장성 수동으로 컨테이너 확장 필요 자동 확장 및 부하 분산 지원
장애 복구 컨테이너 장애 시 직접 재시작 필요 자동 복구(Self-healing) 기능 지원

관계: 쿠버네티스는 도커를 컨테이너 실행 도구(Container Runtime)로 사용하여, 컨테이너를 자동으로 관리하는 역할을 합니다.


4️⃣ 쿠버네티스 기본 명령어

# 쿠버네티스 클러스터 정보 조회
kubectl cluster-info

# 모든 네임스페이스의 Pod 목록 조회
kubectl get pods --all-namespaces

# 특정 Deployment 배포
kubectl create deployment my-app --image=nginx

# Service 생성 (외부 접근 가능하도록 설정)
kubectl expose deployment my-app --type=LoadBalancer --port=80

# Pod 삭제
kubectl delete pod my-app

5️⃣ 도커와 쿠버네티스를 함께 사용하기

쿠버네티스를 활용하면 여러 개의 도커 컨테이너를 클러스터링하고 자동으로 운영할 수 있습니다.
도커와 쿠버네티스를 연동하여 배포하는 과정은 다음과 같습니다.

도커 이미지를 빌드하고 쿠버네티스에서 배포하기

1️⃣ 도커 이미지 빌드

docker build -t my-app .
docker tag my-app myrepo/my-app:1.0
docker push myrepo/my-app:1.0

2️⃣ 쿠버네티스에 배포

kubectl create deployment my-app --image=myrepo/my-app:1.0
kubectl expose deployment my-app --type=LoadBalancer --port=8080

6️⃣ 실제 프로젝트에서의 활용

도커만 사용할 경우

  • 로컬 개발 환경에서 컨테이너 실행
  • 간단한 애플리케이션 테스트
  • CI/CD 파이프라인에서 빌드 및 배포

쿠버네티스를 사용할 경우

  • 대규모 마이크로서비스 아키텍처 운영
  • 자동 스케일링(Scaling) 필요할 때
  • 고가용성(HA, High Availability) 환경 구축
  • 여러 서버에 걸쳐 부하 분산(Load Balancing) 이 필요한 경우

🔥 결론: 도커와 쿠버네티스, 언제 사용할까?

단순한 컨테이너 실행 → 도커만 사용
컨테이너를 대규모로 운영하고 관리 → 쿠버네티스 사용
빠른 배포 & 확장 가능하도록 구성 → 도커 + 쿠버네티스 조합 사용

🚀 쿠버네티스는 도커를 활용한 컨테이너 오케스트레이션 도구이며, 현대적인 DevOps 환경에서 필수적인 기술입니다!