Docker architecture

강병우·2023년 9월 26일
0


Server는 도커 오브젝트를 처리하고 생성하고 제거한다.
REST API는 우리가 평소에 알고 있는 그 API..
CLI는 도커 데몬과 함께 CLI 시스템으로 관리한다.

Docker Image


도커 이미지는 읽기 전용 파일로, 컨테이너를 실행하거나 컨테이너를 생성할 때 명령체계를 제공하는데 사용된다.


도커 이미지는 단일 이미지로써 여러 개의 레이어로 결합된 유니온 파일 시스템이다. 각 브랜치마다 파일과 분리된 파일시스템 디렉토리를 허용한다.

새 이미지로 업데이트했을 때, 새로운 레이어를 추가하고 기존 레이어를 교체한다.

CGROUPS와 Namespace에서 isoltaion이 발생한다. Namespace는 각 네임스페이스별로 분리하고, Image는 tar파일로 구성되어있으며 레지스트리에 저장할 수 있다.

Docker Container

컨테이너는 이미지의 실행가능한 인스턴스형태이다. Docker API나 CLI를 통해 실행시키거나 정지시키거나, 삭제 등을 할 수 있다. 컨테이너가 돌아가기 위해 필요한 모든 것들을 갖고 있는 상태인 파일시스템 소프트웨어로 감싸져 있다.

도커 컨테이너 구조

  • 도커파일에 configuration metadata를 컨테이너를 실행할 때 넣을 수 있다. 각 컨테이너들은 분리되어있고 어플리케이션을 보호하지만 정적 db나 저장소, 다양한 호스트나 컨테이너에 접근할 수 있다.

Docker Registry/Hub

도커 허브는 이미지의 라이브러리이다.
레지스트리는 public 혹은 private으로 관리할 수 있다. 또한 같은 도커 데몬의 서버나 클라이언트, 아니면 분리된 서버에서 사용할 수 있다.

만약 컨테이너를 실행시켰을 때, 무슨 일이 일어나는가?

  1. 우분투 이미지를 가져온다
  2. 새로운 컨테이너를 생성한다
  3. 파일시스템을 할당하고 새로운 읽기/쓰기 레이어를 마운트한다.
  4. 네트워크/브릿지 인터페이스를 할당한다(포트, 네트워크 모드 등)
  5. 아이피 주소를 설정한다.
  6. 본인이 설정한 프로세스를 실행시킨다.
  7. 어플리케이션 결과물을 캡처하고 제공한다.

실행과정

이미지 업데이트 과정

Union FileSystem

Container top layer와 image layer가 서로 마운트되어있는 상태고, top layer만 보여준다. 기존의 파일을 수정하고 싶다면, top layer로 복사하고 수정한다.

Namespace

분리된 컨테이너의 프로세스를 구분하기 위해, 트리 안에 PID를 하나 더 덧붙인다. 이를 multiple nested process tree라고 한다. -> Isolation 역할

Cgroup : 리소스 관리를 하는데, 네임스페이스를 통해 분리하고 있다(추후 더 알아봐야함)

0개의 댓글