Docker를 처음 사용하면 docker run, docker pull, docker build와 같은 명령어를 입력하게 됩니다. 하지만 이 명령어가 내부적으로 어떻게 동작하는지 이해하는 사람은 많지 않습니다.
예를 들어 docker run nginx를 실행했을 때 단순히 컨테이너가 생성되는 것이 아니라 Docker Client, Docker Daemon, Docker Engine, Registry가 서로 통신하며 여러 단계를 거쳐 컨테이너가 실행됩니다.
이번 글에서는 Docker Architecture의 전체 구조와 각 구성 요소의 역할, 컨테이너가 실행되는 과정까지 실무 중심으로 자세히 알아보겠습니다.
Docker Architecture란?
Docker Architecture는 Docker를 구성하는 여러 요소들이 서로 협력하여 컨테이너를 생성하고 관리하는 구조를 의미합니다.
전체 구조는 다음과 같습니다.
User
↓
Docker CLI
↓
Docker Client
↓
Docker Daemon
↓
Docker Engine
↓
Image / Container / Network / Volume
↓
Linux Kernel
사용자가 입력한 명령은 여러 구성 요소를 거쳐 최종적으로 컨테이너를 실행하게 됩니다.
Docker의 주요 구성 요소
Docker Architecture는 다음 요소로 구성됩니다.
- Docker Client
- Docker Daemon
- Docker Engine
- Docker Registry
- Docker Image
- Docker Container
이 여섯 가지를 이해하면 Docker의 내부 동작을 쉽게 이해할 수 있습니다.
Docker Client란?
Docker Client는 사용자가 Docker를 제어하기 위해 사용하는 명령어 인터페이스입니다.
대표적인 명령어는 다음과 같습니다.
docker run
docker build
docker pull
docker push
docker ps
사용자는 Client를 통해 Docker에 작업을 요청합니다.
Docker CLI
Docker CLI(Command Line Interface)는 Docker Client의 대표적인 형태입니다.
예를 들어
docker run nginx
를 입력하면 Docker Client가 이 명령을 Docker Daemon으로 전달합니다.
Docker Daemon이란?
Docker Daemon(dockerd)은 Docker의 핵심 서비스입니다.
다음 작업을 수행합니다.
- 이미지 다운로드
- 컨테이너 생성
- 컨테이너 삭제
- 네트워크 생성
- 볼륨 관리
- 이미지 관리
실제 작업은 대부분 Docker Daemon이 수행합니다.
Docker Daemon 실행 확인
Linux에서는 다음 명령으로 상태를 확인할 수 있습니다.
systemctl status docker
실행 중이라면 Docker Daemon이 정상적으로 동작하는 것입니다.
Docker Engine이란?
Docker Engine은 Docker 플랫폼 전체를 의미하는 실행 환경입니다.
Docker Engine은 크게 다음 요소로 구성됩니다.
- Docker Daemon
- REST API
- Docker CLI
즉, Docker Engine은 Docker를 실행하기 위한 핵심 플랫폼입니다.
REST API
Docker Client와 Docker Daemon은 REST API를 통해 통신합니다.
구조는 다음과 같습니다.
Docker Client
↓
REST API
↓
Docker Daemon
CLI뿐 아니라 다양한 프로그램도 Docker REST API를 이용해 Docker를 제어할 수 있습니다.
Docker Registry란?
Docker Registry는 Docker Image를 저장하고 배포하는 저장소입니다.
대표적인 Registry는 다음과 같습니다.
- Docker Hub
- GitHub Container Registry
- Amazon ECR
- Google Artifact Registry
- Azure Container Registry
필요한 이미지는 Registry에서 다운로드됩니다.
Docker Hub
가장 많이 사용하는 Registry입니다.
예를 들어
docker pull nginx
를 실행하면
Docker Hub
↓
nginx Image
↓
Local Server
의 과정으로 이미지가 다운로드됩니다.
Docker Image
Image는 컨테이너를 생성하기 위한 읽기 전용 템플릿입니다.
예를 들어
Ubuntu Image
↓
Container A
Container B
Container C
하나의 Image로 여러 개의 컨테이너를 생성할 수 있습니다.
Docker Container
Container는 Image를 실행한 실제 프로세스입니다.
생성 과정은 다음과 같습니다.
Image
↓
docker run
↓
Container
Container는 실행 중에도 파일을 변경하거나 데이터를 생성할 수 있습니다.
docker run의 동작 과정
다음 명령을 실행했다고 가정해 보겠습니다.
docker run nginx
내부적으로는 다음 순서로 진행됩니다.
User
↓
Docker Client
↓
Docker Daemon
↓
Image 존재 여부 확인
↓
없으면 Registry에서 다운로드
↓
Container 생성
↓
Container 실행
이 과정을 자동으로 수행합니다.
docker pull의 동작 과정
docker pull ubuntu
실행 시
Docker Client
↓
Docker Daemon
↓
Docker Registry
↓
Image Download
↓
Local Storage
이미지를 로컬에 저장합니다.
docker build의 동작 과정
Dockerfile을 이용한 빌드는 다음과 같습니다.
docker build -t myapp .
전체 흐름
Dockerfile
↓
Docker Daemon
↓
Build
↓
Image 생성
생성된 이미지는 이후 여러 컨테이너에서 사용할 수 있습니다.
Docker Engine과 Linux Kernel
Docker는 Linux Kernel의 기능을 적극적으로 활용합니다.
대표적으로 사용하는 기술은 다음과 같습니다.
- Namespace
- cgroups
- OverlayFS
- iptables
- Bridge Network
Docker가 빠른 이유는 운영체제를 새로 실행하지 않고 Linux Kernel을 공유하기 때문입니다.
Docker Architecture의 장점
Docker Architecture는 다음과 같은 장점을 제공합니다.
- 빠른 컨테이너 생성
- 효율적인 자원 사용
- 손쉬운 이미지 배포
- 일관된 실행 환경
- 쉬운 확장
- 자동화에 적합
이러한 구조 덕분에 DevOps와 CI/CD 환경에서 널리 활용됩니다.
실무에서 자주 사용하는 명령어
Docker 서비스 상태 확인
systemctl status docker
Docker 정보 확인
docker info
Docker 버전 확인
docker version
이미지 다운로드
docker pull nginx
컨테이너 실행
docker run nginx
현재 실행 중인 컨테이너 확인
docker ps
다운로드한 이미지 확인
docker images
실무 사례
예를 들어 운영 서버에서 새로운 Nginx 웹 서버를 배포한다고 가정해 보겠습니다.
운영자는 docker run nginx 명령을 실행합니다.
Docker는 다음과 같은 절차를 자동으로 수행합니다.
- Docker Client가 명령을 수신
- Docker Daemon이 실행 요청을 처리
- 로컬에 Nginx 이미지가 있는지 확인
- 이미지가 없으면 Docker Hub에서 다운로드
- 다운로드한 이미지로 컨테이너 생성
- 네트워크와 파일 시스템을 설정
- Nginx 프로세스를 실행하고 서비스 시작
사용자는 한 줄의 명령만 입력하지만, Docker Architecture 내부에서는 여러 구성 요소가 협력하여 컨테이너를 실행합니다.
자주 묻는 질문
Docker Client와 Docker Daemon의 차이는 무엇인가요?
Docker Client는 사용자가 명령을 입력하는 인터페이스이며, Docker Daemon은 실제로 이미지를 관리하고 컨테이너를 생성하는 백그라운드 서비스입니다.
Docker Engine과 Docker Daemon은 같은 것인가요?
아닙니다. Docker Daemon은 Docker Engine의 핵심 구성 요소 중 하나입니다. Docker Engine은 Daemon, REST API, CLI를 포함하는 전체 실행 환경을 의미합니다.
Docker Registry는 반드시 Docker Hub를 사용해야 하나요?
아닙니다. Docker Hub 외에도 Amazon ECR, GitHub Container Registry, Google Artifact Registry, Azure Container Registry 등 다양한 Registry를 사용할 수 있으며, 사내 전용 Private Registry를 구축하는 것도 가능합니다.
마무리
Docker Architecture는 Docker Client, Docker Daemon, Docker Engine, Registry가 서로 협력하여 컨테이너를 생성하고 관리하는 구조입니다. 이 내부 동작을 이해하면 docker run, docker pull, docker build와 같은 명령이 어떤 과정을 거쳐 실행되는지 명확하게 이해할 수 있으며, 이후 Docker Image, Container, Network, Volume 등의 개념도 더욱 쉽게 학습할 수 있습니다.