cloud/docker

MSA 공부 <2편> | Docker architecture 파해 쳐 보자

yjlee06 2024. 9. 20. 12:39
반응형
들어가기 전_

이번 포스트는 도커를 다루기 전 필수적인 개념이해는 아닙니다. 개발하다가 '왜 그렇지..?', ' 헷갈리네 '라는 생각이 들 때 참조하는 게 좋습니다. 
 

1. 전반적인 Docker 구조

도커는 크게 3가지로 나눌 수 있습니다.

Docker client (client) 사용자의 명령어를 입력받음
Docker host.(host) 입력받은 명령어를 처리 및 컨테이너를 관리
Registry  Image나 플러그인확장 프로그램을 저장 (주로 image를 관리함)

이해를 위해 하나의 예시를 들어보겠습니다.
 
사용자가 도커 컨테이너를 처음 만들기 위해 명령어를 사용하면 아래의 순서로 진행됩니다.

  1. client에서 api를 통해 host에 명령어를 전송
  2. host는 client에서 요청한 명령어를 받음
  3. host는 명령을 수행하기 위해 registry에서 image를 가져온 후 container 생성

대략적으로 이해가 되셨나요?
이제 각각의 서비스들을 자세히 설명하겠습니다.
 

2. Docker client (client)

 

Docker client란?

Docker client의 프로세스 명(이름)은 docker이며 위에서 말한 것과 같이 사용자의 명령어를 입력받는 서비스입니다.
 

 특징

Docker host에는 client에서 받은 명령어를 수행하는 Docker Daemon이라는 서비스가 있습니다. client는 보통 하나의 docker daemon과 통신하여 1대 1 통신처럼 생각되지만 여러 도커를 클러스터링 할 때처럼 여러 Docker Daemon이 존재하더라도 Docker client는 각각의 docker daemon과 통신할 수 있습니다.
 

3. Docker host(host)
같이 알면 좋은 용어를 소개합니다.
[ Docker objects ] Docker image, container, network, volumes같이 도커를 사용하면서 생성된 모든 것을 의미
Dokcer host란?

프로세스명은 dockerd이며 Docker host는 docker의 api 요청, docker objects를 관리 및 처리합니다. 

Docker host의 심장부 " Docker daemon "

docker host에서 docker client의 api 요청과 docker objects관리 및 처리는 정확히 docker daemon에 의해 진행됩니다. 한번 불러온 이미지를 캐싱하는 것이나, docker만의 네트워크 시스템, 컨테이너를 관리하는 것 모두 docker daemon에 의해 진행됩니다.

 특징

docker client와 특징은 비슷합니다.  다른 daemon과 통신을 하여 Docker의 서비스를 관리할 수 있습니다.
 

Docker registries
docker registries

그대로 도커의 저장소이며 해당 저장소는 대표적으로 image, extenstion. Plugin 저장하며 주로 image 저장하는데 많이 사용됩니다.

image는 어디서 가져오는 걸까? 

이미지 공유 사이트인 docker hub에서 이미지를 가져와 registry 저장합니다. 추후에 나올 명령어인 docker run / pull / search에서 docker registry에 없는 경우가 있는데 이때 위와 같은 과정을 거치게 됩니다.

마지막 말

다음 포스트부터는 직접적으로 docker를 사용하는 것 위주로 올릴 것입니다. 여기서 개념을 더 깊게 들어간다면 단순히 읽는 것 만으로는 이해하기 힘들기 때문입니다.
 
이 포스트를 기점으로 도커의 대략적인 형태는 파악이 되었을 것입니다. 다음부터는 Image, container 생성과 같은 기초적인 다루기부터  웹서버, 메모리 db (redis), 메시지 중개인 (kafka)를 다루며 점점 확장해갈 예정입니다.
 

읽어주셔서 감사합니다. 질문이나 고쳐야 할 점이 있다면 댓글에 남겨주세요.