Docker 실전 가이드: 도커의 개념과 아키텍처
- 최초 작성일: 2025년 2월 5일 (수)
목차
도커란 무엇인가?
도커 개요
도커(Docker)는 2013년에 최초로 공개된 오픈소스 소프트웨어로, 컨테이너 가상화 기술을 보다 쉽게 활용할 수 있도록 만들어진 도구이다. 도커를 사용하면 운영체제 커널의 컨테이너 가상화 기술을 간편하게 사용할 수 있다.
컨테이너 플랫폼
도커와 같은 컨테이너 가상화 도구를 컨테이너 플랫폼이라고 부른다. 컨테이너 플랫폼은 컨테이너를 생성하고 관리하는 기능을 제공하며, 내부적으로 컨테이너 엔진과 컨테이너 런타임으로 구성되어 있다.
컨테이너 플랫폼과 컨테이너 런타임
컨테이너 엔진과 컨테이너 런타임
컨테이너 플랫폼은 크게 두 가지 주요 구성 요소로 나뉜다:
- 컨테이너 엔진: 사용자의 요청을 받아 컨테이너를 생성, 실행, 삭제하는 역할을 한다.
- 컨테이너 런타임: 운영체제 커널과 직접 통신하며, 실제로 컨테이너의 격리된 환경을 만든다.
도커는 기본적으로 runc라는 컨테이너 런타임을 사용하며, 이는 OCI(Open Container Initiative)에서 규정한 표준 CRI(Container Runtime Interface)를 구현한 런타임이다. 하지만 Podman, Containerd와 같은 다른 컨테이너 런타임도 선택할 수 있다.
도커는 컨테이너 플랫폼 중에서 가장 널리 사용되며, 방대한 레퍼런스 문서와 커뮤니티 지원을 통해 현업에서 가장 많이 활용되고 있다.
도커의 아키텍처
클라이언트-서버 모델
도커는 클라이언트-서버 모델로 실행된다. 이는 클라이언트와 서버(도커 데몬)가 서로 통신하여 컨테이너를 관리하는 구조를 의미한다.
도커의 주요 구성 요소:
- 도커 클라이언트: 사용자의 명령을 입력하는 인터페이스 (Docker CLI)
- 도커 데몬(Docker Daemon): 클라이언트의 요청을 처리하고 컨테이너를 관리하는 서버
- 컨테이너 런타임: 컨테이너를 실행하는 실제 프로그램 (기본적으로 runc 사용)
아래 그림은 도커의 기본 아키텍처를 보여준다:
도커 데몬 (Docker Daemon)
도커 데몬은 서버 역할을 하며, 지속적으로 실행되면서 컨테이너를 관리하는 핵심 소프트웨어이다. 클라이언트의 요청을 받아 컨테이너 생성, 실행, 중지, 삭제 등의 작업을 수행한다.
이 도커 데몬은 호스트 OS의 커널 기능을 활용하여 컨테이너를 격리하고 실행하며, 클라이언트가 이 기능을 사용할 수 있도록 API를 제공한다.
Docker API와 CLI
Docker API
도커 데몬은 RESTful API를 제공하여 클라이언트가 컨테이너를 관리할 수 있도록 한다. 예를 들어, 실행 중인 컨테이너 목록을 조회하려면 다음 API 요청을 보낸다:
GET /containers/json
이 API 요청을 실행하면 현재 실행 중인 컨테이너 목록이 JSON 포맷으로 반환된다.
API 요청의 예시:
- GET /containers/json → 실행 중인 컨테이너 목록 조회
- POST /containers/create → 새로운 컨테이너 생성
- DELETE /containers/{id} → 특정 컨테이너 삭제
Docker CLI
API를 직접 호출하는 것은 번거로울 수 있기 때문에, 도커는 Docker CLI라는 커맨드라인 도구를 제공한다. Docker CLI는 사용자가 입력한 명령을 API 요청으로 변환하여 도커 데몬에 전달한다.
예를 들어, 실행 중인 컨테이너 목록을 조회하는 API 호출을 Docker CLI로 실행하면 다음과 같이 간단한 명령어로 수행할 수 있다:
docker ps
이는 내부적으로 GET /containers/json API 요청을 보내는 것과 동일한 결과를 반환한다.
클라이언트-서버 통신 흐름
- 사용자가 CLI 명령어를 입력 → (
docker ps
입력) - CLI가 API 요청을 생성 → (
GET /containers/json
요청) - 도커 데몬이 요청을 처리하고 응답 반환 → (컨테이너 목록 반환)
- CLI가 결과를 사용자에게 출력
아래 그림은 도커의 클라이언트-서버 모델에서 API와 CLI가 상호작용하는 방식을 보여준다:
정리
- 도커는 컨테이너 가상화 기술을 쉽게 사용할 수 있도록 도와주는 도구이다.
- 컨테이너 플랫폼은 컨테이너 엔진과 컨테이너 런타임으로 구성되며, 도커는 기본적으로 runc를 사용하지만 다른 런타임도 선택 가능하다.
- 도커는 클라이언트-서버 모델을 기반으로 하며, CLI를 통해 API 요청을 보내 도커 데몬과 통신한다.
- Docker API를 사용하면 컨테이너를 직접 조작할 수 있으며, CLI를 활용하면 보다 쉽게 명령어를 실행할 수 있다.
도커는 현재 가장 널리 사용되는 컨테이너 플랫폼이며, 컨테이너 기반 애플리케이션을 배포하고 관리하는 데 필수적인 도구이다. 이를 통해 개발자는 더욱 빠르고 효율적인 환경에서 애플리케이션을 실행할 수 있다.