Devops

도커와 쿠버네티스의 차이

웹개발자지망생 2025. 4. 22. 14:11

🐳 Docker (도커)

컨테이너 기반 가상화 기술

  • 애플리케이션과 실행 환경을 패키징해서 어디서든 동일하게 실행 가능
  • 가벼운 리눅스 프로세스처럼 동작 (VM보다 가볍고 빠름)
  • 예: Java 앱 + JDK + 설정 → 하나의 이미지로 빌드 → 실행

"한 번 만들면 어디서나 실행"
✅ 개발 환경 = 운영 환경


☸️ Kubernetes (쿠버네티스)

컨테이너 오케스트레이션 도구

  • Docker 컨테이너들을 자동으로 배포, 확장, 복구, 로드밸런싱 해주는 플랫폼
  • 수십, 수백 개의 컨테이너를 클러스터 단위로 관리 가능

주요 개념:

  • Pod: 컨테이너의 실행 단위 (1개 또는 다수의 컨테이너 포함)
  • Node: 물리 서버나 가상 서버, Kubernetes가 설치된 서버
  • Cluster: 여러 Node로 구성된 컨테이너 실행 환경
  • Master(Control Plane): 클러스터를 제어, 스케줄링, 모니터링

🖥️ 물리 서버 (Bare-metal Server)

  • 진짜 실체가 있는 서버 (CPU, RAM, HDD가 장착된 실제 하드웨어)
  • OS를 직접 설치하고, 그 위에 Docker나 Kubernetes를 설치해 사용

장점

  • 성능이 뛰어남
  • 오버헤드 없음 (가상화 계층이 없기 때문)

단점

  • 관리 복잡, 자원 할당 유연성 떨어짐
  • 서버마다 직접 설치/배포해야 함

🧱 가상화 서버 (Virtual Machine)

  • Hypervisor(VMware, KVM 등)가 물리 자원을 가상으로 나눠 여러 OS 실행
  • 각 VM은 독립된 OS, 커널을 가짐
  • VM 안에서도 Docker를 설치해 컨테이너 실행 가능

장점

  • 서버 자원을 효율적으로 나눠씀
  • 유연한 자원 할당 가능 (필요할 때만 사용)

단점

  • 컨테이너보다는 무겁고 느림 (커널과 OS가 따로 있음)
  • VM 내에서 또 컨테이너를 실행하면 구조가 복잡해짐

📌 비교 요약

 
항목 Docker Kubernetes 물리 서버 서버가상 서버
목적 앱 실행 환경 컨테이너화 컨테이너 관리 자동화 하드웨어 기반 실행 소프트웨어로 만든 가상 실행 환경
특징 빠르고 가벼움 스케일링, 복구 자동화 성능 최상 자원 효율적 사용
설치 위치 물리서버 or 가상서버 위 Docker 위에서 동작 직접 OS 설치 Hypervisor 위에서 동작
예시 docker run nginx Pod로 nginx 배포 서버실에 있는 진짜 서버 AWS EC2, VMware, VirtualBox 등

💡 구성 예시

 
[물리 서버]
 └─ [가상화 (VM 1~N)]
     └─ OS (Ubuntu 등)
         └─ Docker
             └─ 컨테이너 (Nginx, MySQL 등)
         └─ Kubernetes Node
[물리 서버]
 └─ OS
     └─ Docker
         └─ Kubernetes (Kubelet 등)
             └─ Pod (컨테이너 묶음)​

🔧 실제 운영 환경에서는?

  • 기업에서는 주로 클라우드 (AWS, GCP, Azure) 또는 VM 기반 서버 위에 Kubernetes 클러스터 구성
  • Docker는 각 컨테이너 빌드/테스트/개발에 사용
  • Kubernetes는 운영 환경에서 대규모 서비스를 관리하는 데 사용