Victoree's Blog

[6] DockerDemon 본문

Infra/Docker

[6] DockerDemon

victoree 2021. 5. 28. 15:08
728x90

DockerDemon

도커 데몬 명령어

# service docker start
# service docker stop
  • 우분투
    • 도커 설치시 자동으로 서비스 등록됨
    • 호스트가 재시작되더라도 자동 실행
  • 레드햇 계열
    • 자동 실행으로 설정되지는 않음
    • $ systemctl enable docker 수행 시, 자동으로 서비스 활성화됨
  • 도커 서비스는 dockerd로 데몬을 실행함
    • /usr/bin/dockerd에 명령어가 존재함
  • API listen on /var/run/docker.sock
    • 소켓이 입력을 받을 수 있는 상태가 되었음을 뜻함

도커 데몬 설정

  1. 도커 데몬 제어 : -H
  • 기본 설정
    • docker demon 실행 시
    • 도커 클라이언트(/usr/bin/docker)를 위한 유닉스 소켓인 "/var/run/docker.sock"을 사용
  • -H를 이용하여, IP 주소와 포트번호를 입력하면 원격 API인 Docker Remote API로 도커를 제어할 수 있음
    • dockerd -H tcp://0.0.0.0:2375 설정 시
      • 유니스 소켓은 비활성화됨 -> 도커 클라이언트를 사용할 수 없음
      • docker로 시작하는 명령어를 사용할 수 없음
      • 일반적으로 도커 클라이언트를 위한 유닉스 소켓과 Remote API를 위한 바인딩 주소를 동시에 설정함
    • dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375
      • 도커 클라이언트가 도커 데몬에게 명령어를 수행하도록 요청할 때도 내부적으로는 같은 API를 사용 -> Remote API 또한 도커 클라이언트에서 사용 가능한 모든 명령어를 사용할 수 있음
  • 도커 데몬과 특정 IP 바인딩 시
    • 다른 호스트에서 매핑한 IP로 도커 명령을 쏴서 도커 데몬의 명령을 실행 시킬 수 있음
    • 셸의 환경변수를 설정해 원격 도커를 제어할 수 있음
      • EXPORT DOCKER_HOST="tcp://192.168.99.100:2375"
  1. 도커 데몬 보안설정 : --tlsverify
  • remote api 사용 시, 보안이 적용되어 있지 않으면 바인딩된 IP주소와 포트만 알면 도커를 제어할 수 있음
  • 책의 160쪽에 설명있으므로 정리는 생략

도커 스토리지 드라이버

도커 스토리지 드라이버 변경 : --storage-driver

  • 도커는 스토리지 백엔드 기술을 이용하여 도커 컨테이너와 이미지를 저장하고 관리함
  • 우분투
    • overlay2
  • CentOS
    • deviceampper
  • /var/lib/docker/(드라이버 이름)에 컨테이너와 이미지가 저장됨
    • 여러개의 디바이스가 ㅎㅎㅎ하나의 디렉토리 안에 존재할 경우 위 옵션으로 명시하지 않으면 도커 데몬이 시작되지 않음(어떤 스토리지 디바이스를 사용해야하지 모르기 때문에)

스토리지 드라이버의 원리 : CoW V.S. RoW

  • 읽기와 새로운 파일 쓰기 / 기존의 파일 쓰기 작업
  • 스냅숏의 기본 개념
    • 원본 파일은 읽기 전용으로 사용하되 파일 변경 시, 새로운 공간을 할당
  • CoW
    • 파일 쓰기 요청 시, 원본 파일을 읽은 후 스냅샷 공간으로 복사(쓰기 작업 1)
    • 쓰기 요청 반영(쓰기 작업 2)
    • 두번의 쓰기 작업으로 오버헤드 발생
  • RoW
    • 원본 스냅샷 프리즈로 원본 파일을 보호
    • 변경 사항을 새로운 블록을 할당받아 변경점을 기록

1. AUFS

  • 데비안 계열에서 기본적으로 사용할 수 있는 드라이버
  • 안정성 측면에서 우수
  • RHEL, CentOS 에서는 사용 불가능
  • 파일 변경 시 CoW의 원리를 거침
  • 컨테이너 실행/삭제 등의 컨테이너 관련 수행 작업이 매우 빠름
  • 호스트의 저장 공간의 크기를 공유함

2. Devicemapper

  • 래드헷 계열의 리눅스 배포판을 위해 개발된 스토리지 드라이버
  • deprecated 됨
  • 파일 변경 시 RoW의 원리를 거침
  • 기본적으로 100GB 짜리 data 파일과 meta 데이터가 생성됨
    • 100GB의 희소 파일에서 공간을 할당받아 이미지와 컨테이너 레이어 저장소로 사용
    • 블록 단위로 공간을 할당받음
    • 컨테이너와 이미지 블록 정보는 metadata 파일에 저장됨
  • 기본적으로 10GB의 저장 공간을 할당함
    • 옵션 추가를 통해 저장 공간 값을 수정할 수 있음

3. OverlayFS

  • 레드헷 계열 및 라즈비안, 우분투 등 대부분의 운영체제에서 도커 설치 시 자동 설정되는 드라이버
  • overlay2 > overlay
    • 이미지 구성을 위해 여러 개의 레이어 구조를 지원함
  • 계층화된 이미지 구조를 사용하지 않으며, lowerdir이라는 단일화된 이미지 레이어를 사용함
  • 호스트의 저장 공간의 크기를 공유함

4. Btrfs

  • 파일 시스템을 별도로 구성하지 않으면 도커에서 사용할 수 없음
  • 블록 단위가 아닌 파일 단위로 각 레이어를 저장
  • 스냅샷에 새로운 공간을 할당하는 RoW 방식을 사용함

5. ZFS

  • allocate-on-demand 작업에 의해 zpool로부터 새로운 블록을 할당받고 쓰기작업을 수행함
  • 압축과 데이터 중복 제거 등의 기능을 제공함
  • 메모리를 많이 소모하는 파일 시스템이므로 호스트의 자원 사용량을 수시로 체크하는 것이 좋음

도커 데몬 모니터링

도커 데몬 디버그 모드

  • 도커 데몬의 대부분의 일을 알아내기 위해선 데몬을 디버그 옵션으로 실행하는 것이 좋음
    • 모든 명령어를 로그로 출력함
    • 원하지 않는 정보도 출력됨 && 호스트의 파일을 읽거나 도커 데몬을 포그라운드 상태로 실행해야 한다는 단점이 있음

events, stats, system df 명령어

events

  • 기본적으로 제공하는 명령어
  • 도커 데몬에서 어떤일이 일어나는지 실시간 스트림 로그로 보여줌
  • $ docker evnets || $ docker system events
  • 모든 명령어가 출력되는 것은 아님
    • attach, commit, copy, create : 컨테이너 관련 명령어
    • delete, import, load, pull, push : 이미지 관련 명령어
    • 볼륨, 네트워크, 플러그인 등의 수행 결과
  • filter를 걸수도 있음
    • container / image / volume / network / plugin / daemon 등
    • # docker evnets --filter 'type=image'

stats

  • 실행중인 컨테이너의 자원 사용량을 스트림으로 출력
  • CPU / 메모리 제한 및 사용량 / 네트워크 입출력 / 블록 입출력 정보를 출력함
  • --no-stream으로 옵션을 줄 수도 있음

System df

  • 사용하는 이미지, 컨테이너, 로컬 볼륨의 총 개수 및 사용중 개수, 크기, 삭제함으로 확보 가능한 공간을 출력함

CAdvisor

  • 구글이 만든 모니터링 도구
  • 컨테이너 별 실시간 자원 사용량 및 도커 모니터링 정보등을 시각화해서 보여줌
  • 도커 데몬의 정보를 가져올 수 있는 호스트의 모든 디렉토리를 CAdvisor의 볼륨으로 마운트함
    • 단일 도커 호스트만 모니터링 할 수있음
    • 여러 도커 호스트 사용 혹은 PaaS같은 도커 클러스터를 구축했다면 쿠버네티스 혹은 스웜 모드 등의 오케스트레이션 툴을 설치 후 프로메테우스, InfluxDB 등을 통해 데이터를 수집하는 것이 일반적임
728x90

'Infra > Docker' 카테고리의 다른 글

[8] Docker Compose  (0) 2021.05.28
[7] Docker Swarm  (0) 2021.05.28
[5] Dockerfile  (0) 2021.05.28
[4] Docker 이미지  (0) 2021.04.26
[3] Docker Logging 및 자원 할당  (0) 2021.04.26
Comments