🐳 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는 운영 환경에서 대규모 서비스를 관리하는 데 사용