[클라우드] Docker? Kubernetes? 개념 정리
안녕하세요. 새내기 개발자입니다. 공부하면서 정리하는 글로 틀린 부분은 언제나 댓글로 환영입니다!
현대 소프트웨어 개발에서는 빠른 배포, 확장성, 일관된 실행 환경이 필수적입니다. 이를 가능하게 하는 핵심 기술이 바로 도커(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 환경에서 필수적인 기술입니다!