Summary
- Docker Engine은 Daemon, CLI, API로 구성된 Docker의 실제 본체다.
- Docker Desktop은 Engine을 GUI와 부가 기능으로 감싼 배포판이다.
- Windows와 Mac에서는 WSL2 또는 경량 VM을 통해 리눅스 컨테이너를 실행한다.
들어가며
“Docker Desktop을 설치했으니 이게 Docker 본체겠지”라고 생각하기 쉽다. Docker Desktop은 Docker를 쉽게 쓰게 해주는 앱이고, 실제 본체는 따로 있다. 1편(docker)의 아키텍처 그림에서 Daemon이라 부른 부분이 본체다.
Docker Engine
Docker Engine은 컨테이너를 실제로 실행하는 리눅스 네이티브 소프트웨어로 Daemon, CLI, REST API 세 요소가 함께 동작한다.
| 구성 요소 | 역할 |
|---|---|
| dockerd (Daemon) | 이미지 빌드와 컨테이너 실행 등 실제 작업을 수행하는 백그라운드 프로세스 |
| CLI | docker run, docker build 같은 명령어를 Daemon에 전달하는 클라이언트 |
| REST API | Daemon과 통신하기 위한 인터페이스 |

Docker Engine의 명령 처리 흐름
즉, Docker를 사용한다는 것은 Docker Engine을 통해 컨테이너(Container)를 실행한다는 뜻이다. Engine 자체에는 GUI가 없고 Linux 위에서 동작한다.
Linux 위에서 동작하는 Engine을 간편하게 이용할 수 있게 해주는 것이 Docker Desktop이다.
Docker Desktop
앞서 말했듯이 Docker Desktop은 Engine을 하나의 앱으로 배포하며 GUI와 부가 기능을 함께 제공한다.
Docker Desktop의 구성과 역할은 다음과 같다.
- Docker Engine: 본체 역할
- Linux VM: Windows와 Mac에서 Engine을 동작시키기 위한 백엔드
- GUI: 컨테이너(Container)와 이미지(Image) 목록을 관리하는 화면
- Docker Compose, Kubernetes 등: 부가 기능으로 함께 제공되는 도구
| 구분 | Docker Engine | Docker Desktop |
|---|---|---|
| 역할 | 컨테이너를 실제로 실행 | Engine을 로컬 PC에서 편하게 사용하도록 제공 |
| 구성 | Daemon, CLI, REST API | Engine, 리눅스 VM, GUI, 부가 기능 |
| 주 사용 환경 | 리눅스 서버 | Windows와 Mac 로컬 개발 환경 |

Docker Engine과 Docker Desktop의 구성 관계
Engine과 Desktop의 차이
Engine은 Docker가 컨테이너를 돌리는 능력 그 자체이고, Desktop은 그 능력을 로컬 PC에서 편하게 쓰도록 포장한 상품이다. Engine 없는 Desktop은 없지만, Desktop 없는 Engine은 리눅스 서버처럼 흔하다.
리눅스 서버에서는 GUI 없이 Engine만 직접 설치하는 경우가 많다. Windows와 Mac에서는 로컬 개발을 위해 Desktop을 설치해 편의 기능까지 함께 쓴다.
Windows와 Mac의 리눅스 계층
컨테이너는 호스트 OS의 커널을 공유하지만, Docker 컨테이너 대부분은 Linux 커널을 전제로 한다. Windows와 Mac에는 Linux 커널이 없으므로 Docker Desktop은 중간에 Linux 계층을 둔다.
- Windows: WSL2(Windows Subsystem for Linux 2)라는 경량 리눅스 커널을 백그라운드에서 실행하고, 그 위에서 컨테이너를 실행한다. Docker Desktop for Windows는 기본적으로 WSL2를 백엔드로 사용한다.
- Mac: 애플 실리콘과 인텔 모두 리눅스 커널이 없으므로, Docker Desktop이 내부적으로 경량 가상머신을 띄운 뒤 그 안에서 Engine을 실행한다.
결국 Windows와 Mac의 컨테이너는 WSL2 또는 경량 VM이라는 리눅스 계층 위에서 실행된다. 리눅스 서버에 Engine을 직접 설치했을 때 1편에서 설명한 커널 공유가 순수하게 성립한다.
Airflow에서의 적용
현재 Airflow가 어떤 환경 위에서 실행되는지는 다음 명령으로 확인할 수 있다.
Docker 환경 확인
Client: OS/Arch는 명령어를 입력하는 환경인 Windows다.Server: OS/Arch는 실제 컨테이너가 실행되는 환경인 Linux다.
docker version
# Client:
# OS/Arch: windows/amd64
# Server: Docker Desktop
# OS/Arch: linux/amd64즉, 둘이 다르다는 사실은 Windows 위에 리눅스 계층을 두고 Airflow 컨테이너를 실행한다는 증거다.
마치며
Docker Desktop과 Engine의 관계, Windows와 Mac에서 리눅스 컨테이너가 실행되는 원리를 정리했다. 다음 편에서는 이미지를 받아오고 컨테이너를 실행하는 실제 명령어를 다룬다.
Reference