docker 컨테이너와 이미지
| topics | 400-인프라 & 아키텍처 401 Docker & Kubernetes |
| types | 이론 |
| tags | #docker #container #image |
Docker 컨테이너와 이미지
왜 Docker인가
가상머신(VM)은 무겁다. OS 전체를 올려야 하니까. Docker는 호스트 OS의 커널을 공유하면서 프로세스만 격리하기 때문에 가볍고 빠르다.
핵심: 어플리케이션과 실행 환경을 하나로 묶어서, "내 컴퓨터에서는 되는데..."라는 문제를 해결한다.
컨테이너와 이미지
이미지 (Image)
- 어플리케이션과 의존성(라이브러리, 설정 파일 등)을 하나로 묶은 패키지
- immutable하다 (한번 만들면 변경 불가)
- 레이어(Layer) 구조로 되어 있어서 용량 효율적
- 이미지는 실행되지 않는다. 실행하면 컨테이너가 된다.
Dockerfile
- 이미지를 만드는 레시피
- 어떤 베이스 이미지를 쓰고, 어떤 파일을 복사하고, 어떤 명령어를 실행할지 정의
FROM nginx
COPY index.html /usr/share/nginx/html/index.html
컨테이너 (Container)
- 이미지를 실행한 인스턴스
- 격리된 환경에서 실행됨
- 컨테이너끼리는 서로 영향을 주지 않음
- 컨테이너를 삭제해도 이미지는 남아있음
비유하자면: 이미지는 클래스, 컨테이너는 인스턴스다.
Docker 아키텍처
도커는 클라이언트/서버 구조다.
- Docker CLI: 사용자가 명령어를 입력하는 클라이언트
- Docker Daemon: 실제로 컨테이너를 관리하는 서버 (백그라운드에서 돌아감)
- Docker Registry: 이미지를 저장하고 공유하는 저장소 (Docker Hub 등)
사용자 → Docker CLI → Docker Daemon → 컨테이너 생성/관리
↓
Docker Registry (이미지 pull/push)