42서울/Inception

Docker, Docker Engine ( Client, Daemon) [42 inception 과제 개념 3]

뜨거운 개발자 2023. 6. 24. 17:57

[10분 테코톡] ☂️ 검프의 Docker #이론편
*검프의 도커 영상은 이론편과 실습편으로 진행됩니다 🙋‍♀️ 우아한테크코스의 크루들이 진행하는 10분 테크토크입니다. 🙋‍♂️ '10분 테코톡'이란 우아한테크코스 과정을 진행하며 크루(수강생)들이 동료들과 학습한 내용을 공유하고 이야기하는 시간입니다. 서로가 성장하기 위해 지식을 나누고 대화하며 생각해보는 시간으로 자기 주도적인 성장을 지향하는 우아한테크코스의 문화 중 하나입니다. 🌕우아한테크코스란 🌕 우아한테크코스는 일반 사용자용 서비스를 개발하는 회사가 필요로 하는 역량을 가진 프로그래머를 양성하기 위한 교육입니다. 우리의 목표는 자기 주도적으로 학습하고 성장하고 싶은 개발자를 위한 교육을 만드는 것입니다. *우아한테크코스 3기는 “온라인”으로 강의 및 발표를 진행하고 있습니다. 온라인 발표 화면인 점 참고 부탁드립니다 : )
https://www.youtube.com/watch?v=IiNI6XAYtrs
💡
도커는 리눅스 기술인 컨테이너 기술에 여러 기능을 추가한 오픈소스 프로젝트입니다.

도커의 기술적 특징은 컨테이너의 기술적 특징에 몇가지 기능을 추가한 것입니다.

도커엔진

👨🏻‍💻
Docker Engine은 사용자가 컨테이너를 쉽게 사용하고 관리할 수 있게 해줍니다.

도커 엔진은 여러가지 기능을 제공하는데 대표적으로 컨테이너의 라이프 사이클 관리, 이미지 관리, 볼륨 관리, 네트워크 관리 등 컨테이너를 관리하는 기능을 제공합니다.

위의 그림에서 dockerd 부분에 있는 사각형 박스에 있는 Docker CLI/AP, LogsMgmt.. 등을 도커 프로젝트라고 부릅니다.

도커 프로젝트는 컨테이너를 어떻게 사용할 것인가에 따른 목적에 따라 분리되어 있습니다.

Docker를 이용하기 위해 일반적으로 docker라는 명령어를 이용합니다.

프로세스로 동작하는 Docker를 확인해보면, 이는 dockerd 로 동작합니다.

도커엔진은 도커 클라이언트와 도커 서버로 나뉩니다.

Docker 클라이언트, 서버

Docker클라이언트 Docker서버 Docker로 구분 됩니다.

👨🏻‍💻
Docker 클라이언트 :사용자가 명령어를 입력하는 CLI 프로그램.
👨🏻‍💻
Docker 서버 : API를 외부로부터 받아 Container를 생성하고 실행하는 등 전반적인 Docker Engine의 기능을 수행하는 데몬 프로세스 Docker 데몬

실제로 사용자가 도커 명령을 실행할 때 다음과 같은 과정을 겪습니다.

  1. 사용자가 도커 명령을 실행합니다.
  1. 도커 클라이언트가 /var/run/docker.sock 에 있는 유닉스 소켓을 통해 도커 데몬의 API를 호출합니다.
  1. 도커 데몬은 명령어에 해당하는 작업을 수행합니다.
  1. 그 결과를 다시 도커 클라이언트에게 반환합니다.
  1. 도커클라이언트는 그 결과를 사용자에게 출력합니다.
🚧
만약 도커 데몬에게 직접 명령을 하고 싶은 경우 url 명령(192.168.9.1:2222/version)을 이용해서 직접 전달 할 수도 있습니다. (주로 다른 호스트(Remote Host)에서 명령이 들어오는 경우 TCP 통신을 이용해서 직접적으로 도커 데몬에 명령을 해야 하는 경우에 사용됩니다.)

Docker Daemon (dockerd)

dockerdDocker Daemon으로, 수행해야 할 요청을 받고 동시에 Docker Engine의 기능을 수행한 후 응답하는 프로세스입니다. 또한,dockerd 는 컨테이너를 생성하고 실행하는 컨테이너의 관리 주체이기도 합니다.

도커가 실행이 되고 도커가 입력을 받을 준비가 된 상태를 도커 데몬이라고 부릅니다.

Daemon Process

데몬 프로세스의 사전적 정의는 지속적으로 실행되어 서비스 요청에 응답하는 백그라운드 프로세스입니다.

데몬 프로세스는 백그라운드 프로세스들 중에서도, 부모 프로세스를 갖지 않는다는 특징을 가지고 있습니다.

따라서 PPID (Parent Process ID)가 1이거나 다른 데몬 프로세스를 부모로 갖는 프로세스를 지칭합니다.

👨🏻‍💻
쉘이 종료되었을 때 쉘에서 실행된 자식 프로세스들이 모두 종료되는 현상으로 인해 데몬 프로세스도 종료되는 현상을 방지하기 위해서 위와 같이 설정 되어있습니다.

데몬 프로세스는 일반적으로 이름의 끝에 d를 달고 있으며, 시스템이 시작될 때 함께 시작됩니다.

Docker Daemon 실행

Linux 환경에서 Docker 데몬을 실행할 수 있는 방법은 Docker 데몬을 직접적으로 실행시키는 방법과 그렇지 않은 방법이 있습니다.

수동으로 데몬 시작

직접적으로 실행하는 방법은 dockerd 라는 명령을 이용합니다.

시스템 유틸리티를 사용하여 Docker 데몬을 관리하고 싶지 않거나 테스트만 하려는 경우 명령을 사용하여 수동으로 실행할 수 있습니다 dockerd.  운영 체제 구성에 따라 sudo를 사용해야 할 수도 있습니다 .

이런 방식으로 Docker를 시작하면 Docker가 포그라운드에서 실행되고 해당 로그를 터미널로 직접 보냅니다.

systemd

그렇지 않는 방법은 service, systemctl과 같은 명령어를 통해 실행하는 것 입니다.

sudo systemctl start docker

service, systemctl같은 명령어로 Docker 데몬을 실행하면 이는 Linux 서비스로써 관리됩니다.

dockerd명령어로 직접 Docker 데몬을 실행하면, 데몬 프로세스가 포그라운드로 동작하기 때문에 Docker 디버깅, 트러블슈팅 에는 유리하지만, 운영환경에서 운영 및 관리에 적합한 방법은 아닙니다.

👨🏻‍💻
따라서 운영 환경에서는 dockerd 명령어를 직접 실행하는 것보다는 Linux 서비스로 관리하는 것이 더 좋습니다.

추가적으로 Docker Daemon 설정은 다음 글을 참고하면 더 공부를 할 수 있습니다.

dockerd
The daemon command description and usage
https://docs.docker.com/engine/reference/commandline/dockerd/
Docker daemon configuration overview
Configuring and troubleshooting the Docker daemon
https://docs.docker.com/config/daemon/

Uploaded by N2T

728x90