Conceptly

docker 시각적으로 이해하기

각 개념의 아키텍처를 애니메이션 다이어그램으로 살펴보세요. 카드를 클릭하면 더 깊은 내용을 확인할 수 있습니다.

💻App Code📦Container🖥️Host OS
📦

Container

호스트 커널을 공유하는 격리된 실행 단위

Container는 애플리케이션과 그 실행 의존성을 하나의 격리된 실행 단위로 묶는 방식입니다. 겉으로는 작은 가상 머신처럼 보이지만, 실제로는 호스트 커널을 공유하면서 프로세스, 파일시스템, 네트워크를 분리해 실행합니다.

⚙️Process🔒Namespace👁️Isolated View
🔒

Namespace & cgroup

컨테이너 격리를 만드는 리눅스 커널 메커니즘

Linux Namespace와 cgroup은 컨테이너의 격리를 실제로 만드는 커널 기능입니다. Namespace는 '무엇을 보게 할지'를 나누고, cgroup은 '얼마나 쓰게 할지'를 제한합니다.

📄Dockerfile🖼️Image📦Container
🖼️

Image

컨테이너 실행에 필요한 파일과 설정의 불변 묶음

Docker Image는 컨테이너를 실행하는 데 필요한 파일시스템과 기본 설정을 담은 불변 패키지입니다. 컨테이너는 이 이미지를 출발점으로 삼아 그 위에 얇은 쓰기 레이어를 추가한 실행 인스턴스입니다.

📝Instruction📚Layer🖼️Image
📚

Layer & Cache

이미지 변경을 누적하고 빌드 캐시를 재사용하는 단위

Image Layer는 Docker 이미지가 여러 단계의 파일시스템 변경으로 누적되는 방식을 설명하는 단위입니다. Cache는 그 단계 결과를 재사용해 같은 빌드를 반복하지 않도록 돕습니다.

🔧Build Stage📋COPY --from🚀Runtime
🏗️

Multi-stage Build

빌드 단계와 실행 단계를 분리하는 Dockerfile 패턴

Multi-stage Build는 하나의 Dockerfile 안에서 빌드용 환경과 실행용 환경을 분리하는 패턴입니다. 앞단 스테이지에서 컴파일과 테스트를 수행하고, 마지막 스테이지에는 실행에 꼭 필요한 산출물만 남깁니다.

📄Dockerfile🔨Build📦Image
📄

Dockerfile

컨테이너 이미지 빌드 명세 파일

Dockerfile은 컨테이너 이미지를 만들기 위한 텍스트 기반 빌드 명세입니다. 베이스 이미지 선택, 파일 복사, 의존성 설치, 실행 명령까지 이미지에 들어갈 모든 것을 순서대로 선언합니다. docker build 명령이 이 파일을 읽고 각 명령어를 레이어 단위로 실행해 최종 이미지를 만들어 냅니다.

🔨Build🏪Registry🚀Deploy
🏪

Registry

컨테이너 이미지 저장·배포 플랫폼

Container Registry는 컨테이너 이미지를 저장하고 배포하는 중앙 저장소입니다. 소스코드에 GitHub이 있듯, 컨테이너 이미지에는 레지스트리가 있습니다. docker push로 빌드된 이미지를 올리고, docker pull로 필요한 환경에서 가져와 실행합니다. Docker Hub이 가장 널리 알려진 퍼블릭 레지스트리이고, 클라우드 제공자마다 자체 관리형 레지스트리도 제공합니다.

📦Container💾Volume🖥️Host FS
💾

Volume

컨테이너 데이터를 영속적으로 보존하는 스토리지 메커니즘

Docker Volume은 컨테이너의 라이프사이클과 독립적으로 데이터를 보존하는 저장 메커니즘입니다. 컨테이너는 기본적으로 쓰기 가능한 레이어에 데이터를 저장하지만, 컨테이너가 삭제되면 그 데이터도 함께 사라집니다. 볼륨은 이 문제를 해결해 데이터가 컨테이너 밖에 살도록 만듭니다.

📦Container🔗Network📦Container
🔗

Network

컨테이너 간 통신과 네트워크 격리를 관리하는 가상 네트워크

Docker Network는 컨테이너들이 서로 통신하거나 외부와 연결되는 방식을 관리하는 가상 네트워크입니다. 각 컨테이너는 기본적으로 격리된 네트워크 네임스페이스를 갖고, Docker Network를 통해 필요한 컨테이너끼리만 선택적으로 연결합니다.

📄YAML🎼Compose📦Services
🎼

Compose

여러 컨테이너 서비스를 한 파일로 선언하는 오케스트레이션 도구

Docker Compose는 여러 컨테이너 서비스를 하나의 `compose.yml` 파일로 정의하고 함께 실행하는 도구입니다. 단일 컨테이너를 넘어서 애플리케이션 전체를 서비스 집합으로 다루게 해 주는 얇은 오케스트레이션 계층입니다.

💻Docker CLI⚙️Runtime📦Container
⚙️

Runtime

이미지를 실제 격리된 프로세스로 바꾸는 실행 계층

Container Runtime은 이미지를 실제 프로세스로 바꾸는 실행 계층입니다. Docker CLI 뒤에서는 Docker daemon이 요청을 받고, containerd가 컨테이너 수명을 관리하고, runc가 최종 프로세스를 띄웁니다. 사용자는 `docker run` 한 줄만 보지만, 내부에서는 이런 구성 요소가 역할을 나눠 움직입니다.

🐳Docker💓Health Check🚦Status
💓

Health Check

컨테이너 내부 애플리케이션의 실제 작동 상태를 검증하는 메커니즘

Health Check는 컨테이너 안에서 실행 중인 애플리케이션이 실제로 정상 동작하는지를 주기적으로 검사하는 메커니즘입니다. Docker는 프로세스가 살아 있는지만 봅니다. 하지만 프로세스가 살아 있어도 데드락에 걸렸거나, DB 연결이 끊겼거나, 메모리가 부족해 요청을 처리하지 못하는 경우는 흔합니다. Health Check는 이런 상황을 감지합니다.