[Docker] 도커 엔진 아키텍처 & 컨테이너 생성 프로세스

Hoon·2022년 8월 31일
0

Docker

목록 보기
13/13

A Detailed Guide to Docker Engine 를 기반으로 작성함.

Docker Engine Architecture

도커 엔진은 클라이언트-서버 애플리케이션과 같이 행동한다.

도커데몬(dockerd)

  • 데몬의 주요기능
    • 이미지 관리
    • 이미지 빌드
    • REST API
    • 인증
    • 보안
    • 핵심 네트워킹, 오케스트레이션

containerd

  • 컨테이너 라이프 사이클 매니저. 이미지 pull과 볼륨, 네트워크도 관리한다.
  • containerd가 실제로 컨테이너를 생성하는 것은 아니다. runc를 사용해서 생성한다. 필요한 도커 이미지를 OCI bundle로 변환하고 runc에게 알려 새로운 컨테이너를 생성한다.

runc

  • 컨테이너를 만드는 것을 목적으로 하는 독립 실행형 컨테이너 런타임 도구
  • runc 가 동작하는 계층을 OCI LAYER라고 한다.
  • runc 인터페이스는 OS 커널과 함께 컨테이너(namespace, cgroups 등)를 만드는데 필요한 모든 구성 요소를 가져온다. 컨테이너 프로세스는 runc 의 자식 프로세스로 시작되며 시작하자마자 runc는 종료된다.

shim

  • shim을 사용하면 데몬 업그레이드와 같은 작업을 위해 실행 중인 컨테이너를 데몬에서 분리할 수 있다.
  • containerd는 runc의 새 인스턴스를 생성한다. 하지만 컨테이너가 생성되면 즉시 runc는 종료된다. 즉, 수백 개의 runc 인스턴스를 실행하지 않고도 수백 개의 컨테이너를 실행할 수 있다.
  • 컨테이너의 부모 runc가 종료되면 연관된 containerd-shim 프로세스가 컨테이너의 부모가 된다. shim은 컨테이너의 부모로써 다음과 같은 역할이 있다.
    • STDIN과 STDOUT stream을 열어두기 때문에 데몬이 재시작을해도 컨테이너의 파이프가 닫혀 종료되는 일은 발생하지 않는다.
    • 컨테이너의 종료 상태를 데몬에 보고한다.

도커 컨테이너 생성 프로세스

도커에서 컨테이너 생성 과정을 이해하기 위해서는 네 가지 부분이 있다.

Part.1

도커 컨테이너 실행 명령을 입력하면 도커 클라이언트는 해당 명령을 적절한 API 페이로드로 변환하여 Docker 데몬에 의해 노출된 API Endpoint POSTs한다. API는 데몬에서 구현되며 local socket이나 network를 통해 노출된다.

Part.2

데몬은 새 컨테이너를 만드는 명령을 받으면 containerd를 호출한다.

Part.3

containerd는 실제로 컨테이너를 만들 수 없다. runc를 사용하여 만든다. containerd는 필요한 Docker 이미지를 OCI 번들로 변환하고 이를 사용하여 새 컨테이너를 생성하도록 runc에 알립니다.

Part.4

runc는 OS Kernel과 인터페이스하여 컨테이너(네임스페이스, cgroups 등)를 만드는 데 필요한 모든 구성 요소를 통합한다. 컨테이너 프로세스는 runc의 자식 프로세스로 시작되며, 시작하자마자 runc는 종료된다.

이제 컨테이너가 시작되었습니다.

Reference

0개의 댓글