핵심 인사이트 (3줄 요약)
- 본질: Docker는 클라이언트-서버 구조에서 Docker CLI, Docker Engine(dockerd), containerd, runc가 협업해 컨테이너를 만들고 실행하는 플랫폼이다.
- 가치: 이미지(Image) 레이어, 레지스트리(Registry), 컨테이너 런타임(Runtime)을 분리해 개발·배포·재현성을 크게 높인다.
- 판단: Docker를 이해하려면 "명령어"보다 "이미지-런타임-커널-격리"의 연결 구조를 먼저 봐야 한다.
Ⅰ. 개요 및 필요성
Docker는 "내 PC에서는 되는데 서버에서는 안 된다"는 문제를 줄이기 위해 등장했다. 애플리케이션과 실행 환경을 묶어 동일한 방식으로 어디서나 돌리는 것이 핵심이다.
또한 Docker는 컨테이너를 직접 다루는 도구가 아니라, 이미지 빌드와 실행 과정을 표준화하는 플랫폼이다. 그래서 단순 실행기보다 훨씬 넓은 생태계를 가진다.
- 📢 섹션 요약 비유: 요리법과 도시락 통이 함께 있어야, 같은 음식을 어디서든 다시 꺼내 먹을 수 있다.
Ⅱ. 아키텍처 및 핵심 원리
Docker CLI
↓
dockerd
↓
containerd
↓
runc
↓
Namespaces + cgroups
↓
Container
| 구성 요소 | 역할 |
|---|---|
| Docker CLI | 사용자가 입력하는 명령 인터페이스 |
| dockerd | Docker Engine의 핵심 데몬 |
| containerd | 컨테이너 생명주기 관리 |
| runc | OCI(Open Container Initiative) 호환 실행기 |
| Image | 실행 가능한 읽기 전용 템플릿 |
| Registry | 이미지를 저장/배포하는 저장소 |
Docker는 이미지 레이어를 쌓아 올려 재사용을 극대화하고, 실행 시에는 커널 기능으로 프로세스를 분리한다. 즉, Docker 자체가 격리를 만드는 것이 아니라 Linux 커널 기능을 조합해 격리를 구현한다.
- 📢 섹션 요약 비유: 레시피책, 조리대, 그리고 손질된 재료가 분업되어야 부엌이 빨라진다.
Ⅲ. 비교 및 연결
| 구분 | Image | Container | Registry |
|---|---|---|---|
| 상태 | 정적인 템플릿 | 실행 중 인스턴스 | 저장소 |
| 변경 가능성 | 낮음 | 높음 | 낮음 |
| 역할 | 만들기 위한 재료 | 실제 실행 | 배포 공유 |
| 도구 | 역할 | 특징 |
|---|---|---|
| Docker | 전체 사용자 경험 | 빌드/실행/배포 통합 |
| containerd | 런타임 관리 | 경량화된 핵심 관리 |
| runc | 실제 실행 | OCI 표준 실행기 |
Docker는 컨테이너 생태계의 "완성된 사용자 경험"에 가깝다. 반면 containerd와 runc는 보다 아래 계층의 표준 구성요소다.
- 📢 섹션 요약 비유: 배달 앱은 주문 화면이고, 주방 시스템은 실제 음식이 움직이는 엔진이다.
Ⅳ. 실무 적용 및 기술사 판단
체크리스트
- 이미지 빌드가 재현 가능한가?
- 태그와 버전이 명확한가?
- 레지스트리 접근 제어가 있는가?
- 컨테이너가 무상태 설계에 맞는가?
- 로그, 헬스체크, 리소스 제한이 들어가 있는가?
안티패턴
- latest 태그만 믿고 배포하는 설계
- 이미지에 불필요한 도구를 잔뜩 넣는 설계
- 컨테이너를 VM처럼 오래 붙잡고 쓰는 설계
- 레지스트리와 빌드 파이프라인을 분리하지 않는 설계
기술사 관점에서는 Docker를 단순 실행 도구가 아니라 "패키징과 실행을 표준화하는 배포 단위"로 봐야 한다. 이미지의 품질이 결국 운영 품질을 결정한다.
- 📢 섹션 요약 비유: 포장 상자가 튼튼해야 배송 중에 내용물이 망가지지 않는다.
Ⅴ. 기대효과 및 결론
Docker는 개발 환경과 운영 환경의 차이를 줄이고, 배포를 반복 가능하게 만든다. 그래서 현대 CI/CD와 클라우드 네이티브의 기본 단위로 자리 잡았다.
결국 중요한 것은 "컨테이너를 띄운다"가 아니라 "어떤 이미지를 어떤 기준으로 재사용할 것인가"다.
- 📢 섹션 요약 비유: 같은 상자에 같은 규격으로 담아야 어디서든 빠르게 옮길 수 있다.
관련 개념 맵
Docker CLI
↓
dockerd
↓
containerd / runc
↓
Linux Kernel
↓
Container
관련 키워드 및 발전 흐름도
수동 배포
↓
스크립트 배포
↓
Docker
↓
Container Platform
어린이를 위한 3줄 비유 설명
도커는 요리법을 상자에 담아 어디서나 똑같이 꺼내 먹게 해 줘요.
상자는 레지스트리에 보관하고, 꺼낼 때는 실행 엔진이 도와줘요.
그래서 컴퓨터가 달라도 같은 방식으로 프로그램을 돌릴 수 있어요.