반응형
말랑Cow
IT
말랑Cow
전체 방문자
오늘
어제
  • 분류 전체보기 (165)
    • Linux (33)
    • Windows (6)
    • Network (7)
    • Hardware (10)
    • Zabbix (13)
    • python (9)
    • script (0)
    • docker (16)
    • NAS (1)
    • DB (3)
    • php (33)
    • jQuery (1)
    • 정보보안기사 (0)
    • Ajax (1)
    • Javascript (21)
    • DELL (0)
    • HPE (0)
    • Secui (0)
    • AWS (2)
    • Elastic (0)
    • 보안 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 자빅스
  • 리눅스
  • CentOS
  • Shell
  • 파이썬
  • php 객체
  • jQuery
  • php 클래스
  • Python
  • bash
  • 서버
  • php
  • ZABBIX
  • docker
  • 자바스크립트
  • Linux
  • 모니터링
  • 네트워크
  • JavaScript
  • 도커
hELLO · Designed By 정상우.
말랑Cow

IT

docker

도커 컨테이너 다루기(10) - 도커데몬[1]

2021. 6. 5. 00:00
반응형

1. 도커의 구조


[root@localhost ~]# which docker
/usr/bin/docker

[root@localhost ~]# ps auxfw |grep docker
root       1567  0.0  2.9 684176 114544 ?       Ssl   5월24   8:48 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

컨테이너나 이미지를 다루는 명령어는 /usr/bin/docker로 실행되지만,

도커 엔진의 프로세스는 /usr/bin/dockerd 파일로 실행됩니다.

이는 docker 명령어가 실제 도커 엔진이 아닌 클라이언트로서의 도커이기 때문입니다.

 

도커는 클라이언트로서의 도커, 서버로서의 도커로 구분됩니다.

 

서버로서의 도커란 실제로 컨테이너 생성과 이미지를 관리하는 주체가 되며 이는 dockerd 프로세스로서 동작합니다.

도커 클라이언트란 도커 엔진의 기능을 수행하기 위해 CLI를 제공하는 것이라고 할 수 있습니다. 다시말해, 도커데몬은 API입력을 받아 도커 엔진의 기능을 수행하는데 이 API를 사용할 수 있도록 CLI를 제공하는 것이 도커클라이언트입니다.

 

사용자가 docker 명령어를 입력하면 도커 클라이언트를 사용하는 것이 되며, 입력된 명령어를 로컬에 존재하는 도커 데몬에게 API로서 전달합니다. 이 때 도커 클라이언트는 /var/run/docker.sock에 위치한 소켓을 통해 도커 데몬의 API를 호출합니다.

 

간단히 정리하자면 도커데몬을 제어하는 순서는 다음과 같습니다.

 

1) 사용자가 docker 명령어 입력

2) /usr/bin/docker는 /var/run/docker.sock 소켓을 사용해 도커데몬에게 명령어 전달

3) 도커데몬은 이 명령어를 파싱하고 해당하는 작업 수행

4) 수행 결과를 도커 클라이언트에 반환하고 사용자에게 결과 출력

 

2. 도커 데몬 실행


service docekr start/stop
systemctl start/stop docker

일반적으로 위와 같이 docker 데몬을 시작/정지할 수 있습니다.

 

systemctl enable docker

우분투에서는 도커가 설치되면 자동으로 서비스로 등록되어 재부팅이후에도 자동실행이 됩니다.

레드햇 계열의 OS는 자동으로 실행되도록 설정되지 않아 위와 같이 서비스를 활성화 해주어야 합니다.

 

[root@localhost ~]# dockerd
INFO[2021-06-03T10:52:02.926599689+09:00] Starting up                                  
INFO[2021-06-03T10:52:02.947499401+09:00] parsed scheme: "unix"                         module=grpc
INFO[2021-06-03T10:52:02.947553230+09:00] scheme "unix" not registered, fallback to default scheme  module=grpc
INFO[2021-06-03T10:52:02.947618572+09:00] ccResolverWrapper: sending update to cc: {[{unix:///run/containerd/containerd.sock  <nil> 0 <nil>}] <nil> <nil>}  module=grpc
INFO[2021-06-03T10:52:02.947651185+09:00] ClientConn switching balancer to "pick_first"  module=grpc
INFO[2021-06-03T10:52:02.952639993+09:00] parsed scheme: "unix"                         module=grpc
INFO[2021-06-03T10:52:02.952686883+09:00] scheme "unix" not registered, fallback to default scheme  module=grpc
INFO[2021-06-03T10:52:02.952722595+09:00] ccResolverWrapper: sending update to cc: {[{unix:///run/containerd/containerd.sock  <nil> 0 <nil>}] <nil> <nil>}  module=grpc
INFO[2021-06-03T10:52:02.952744250+09:00] ClientConn switching balancer to "pick_first"  module=grpc
INFO[2021-06-03T10:52:02.964842987+09:00] [graphdriver] using prior storage driver: overlay2 
INFO[2021-06-03T10:52:03.384328806+09:00] Loading containers: start.                   
INFO[2021-06-03T10:52:03.450682859+09:00] Firewalld: docker zone already exists, returning 
INFO[2021-06-03T10:52:03.780399962+09:00] Firewalld: interface br-cf451fe3c6d7 already part of docker zone, returning 
INFO[2021-06-03T10:52:03.812048830+09:00] Firewalld: interface br-cf451fe3c6d7 already part of docker zone, returning 
INFO[2021-06-03T10:52:03.937501102+09:00] Firewalld: interface br-5935a5f634be already part of docker zone, returning 
INFO[2021-06-03T10:52:03.969284564+09:00] Firewalld: interface br-5935a5f634be already part of docker zone, returning 
INFO[2021-06-03T10:52:04.094120193+09:00] Firewalld: interface docker0 already part of docker zone, returning 
INFO[2021-06-03T10:52:04.124611799+09:00] Firewalld: interface docker0 already part of docker zone, returning 
INFO[2021-06-03T10:52:04.362041925+09:00] Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon option --bip can be used to set a preferred IP address 
INFO[2021-06-03T10:52:04.468765361+09:00] Firewalld: interface docker0 already part of docker zone, returning 
INFO[2021-06-03T10:52:04.563610198+09:00] Loading containers: done.                    
INFO[2021-06-03T10:52:04.606281828+09:00] Docker daemon                                 commit=8728dd2 graphdriver(s)=overlay2 version=20.10.6
INFO[2021-06-03T10:52:04.606387716+09:00] Daemon has completed initialization          
INFO[2021-06-03T10:52:04.646684102+09:00] API listen on /var/run/docker.sock           

도커 서비스를 종료한 뒤 /usr/bin/dockerd 명령어로 도커 서비스를 직접 실행할 수 있습니다.

마지막줄의 docker.sock 이 listen 상태로 입력받을 수 있는 상태가 된 것을 확인할 수 있습니다.

 

하지만 직접 도커데몬을 실행하면 하나의 터미널을 차지하는 포그라운드 상태로 실행되기에 도커 명령어를 입력하려면 터미널을 하나 더 열어야 하고 포그라운드 터미널에서 인터럽트 발생(ctrl+C) 시 서비스가 종료되어 운영 및 관리 측면에서 바람직하지 않습니다.

실제 운영환경에서는 도커 데몬을 직접 실행하기 보단 systemctl 이나 service 명령어로 관리하는 것이 좋습니다.

 

 

반응형

'docker' 카테고리의 다른 글

도커 컨테이너 다루기(12) - 도커데몬[3]  (0) 2021.06.08
도커 컨테이너 다루기(11) - 도커데몬[2]  (0) 2021.06.08
도커 컨테이너 다루기(9) - Dockerfile로 빌드할 때 주의할 점  (0) 2021.06.04
도커 컨테이너 다루기(8) - 도커파일(Dockerfile)[2]  (1) 2021.06.03
도커 컨테이너 다루기(8) - 도커파일(Dockerfile)[1]  (1) 2021.06.01
    'docker' 카테고리의 다른 글
    • 도커 컨테이너 다루기(12) - 도커데몬[3]
    • 도커 컨테이너 다루기(11) - 도커데몬[2]
    • 도커 컨테이너 다루기(9) - Dockerfile로 빌드할 때 주의할 점
    • 도커 컨테이너 다루기(8) - 도커파일(Dockerfile)[2]
    말랑Cow
    말랑Cow

    티스토리툴바