이 포스팅은 위키북스의 시작하세요! 도커/쿠버네티스 를 보고 공부한 내용을 바탕으로 하고 있습니다. (문제가 된다면 비공개 처리하겠습니다😂😂)
도커는 실제로 어디있는 걸까요?
// which는 특정명령어의 위치를 찾아주는 명령어이다.
$ which docker
=> /usr/bin/docker
이번에는 도커 프로세스를 확인해보겠습니다.
// ps는 실행되는 프로세스에 대한 정보를 출력해주는 명령어이다.
// 참고 : https://unipro.tistory.com/238
$ ps aux | grep docker
보면 크게 두가지 경로로 나뉘는 것을 볼 수 있습니다. 명령어를 실행하는 /usr/bin/docker와 프로세스가 실행되는 /usr/bin/dockerd.
공식 도커 docs 이미지 출처 : https://docs.docker.com/get-started/overview/
두가지 그림을 보면 어떤식으로 동작하는지 대충 느낌이 올겁니다. /usr/bin/docker는 도커 클라이언트
라고 보면 됩니다. 단순히 명령어를 입력받는 CLI를 제공하고 도커 데몬에게 API로 명령어를 전달해줍니다. 구체적으로는 Docker 클라이언트와 도커 데몬은 UNIX 소켓 또는 네트워크 인터페이스를 통해 REST API를 사용하여 통신합니다.
/usr/bin/dockerd는 도커 서버
. 즉, 도커 데몬
입니다. 외부에서 API 입력을 받아 도커 엔진의 기능을 수행합니다. 여기서 기능이란 이미지를 생성하고, 컨테이너를 생성하는 등의 모든 기능을 의미합니다.
우분투에 도커가 설치가 되면 자동으로 서비스에 등록되므로 호스트가 재시작하더라도 자동으로 실행됩니다.
수동으로 시작, 정지 시킬 수도 있습니다.
$ service docker start
$ service docker stop
도커 데몬에 적용할 수 있는 옵션 확인하면 100개가 넘어보이네요...
$ dockerd --help
설정방법은 2가지가 있습니다. 하나는 도커데몬을 직접 실행하는방법입니다.
$ dockerd -H tcp://0.0.0.0:2375
또 다른 하나는 설정파일을 수정한 뒤 도커 데몬이 설정 파일을 읽어 서비스로 실행되도록 하는 방법입니다. (일반적인 방법)
$ nano /etc/default/docker
-H 옵션은 도커 데몬의 API를 사용할 수 있는 방법을 추가합니다. 쉽게 말해 도커를 원격으로 제어하기 위해 설정할 수 있는 옵션입니다. (구체적인방법은 생략)
-H를 설정해 Remote API를 사용한다면 보안 설정을 반드시 해야할겁니다. 왜냐하면 기본적으로 보안 설정이 되어있지 않기 때문에 IP와 포트번호만 다른사람이 알고있어도 제어할 수 있기 때문입니다. (구체적인 방법은 생략)
도커는 특정 스토리지 백엔드 기술을 사용해 도커 컨테이너와 이미지를 저장하고 관리합니다.
$ docker info | grep "Storage Driver"
우분투 같은 데비안 계열은 기본적으로 overlay2를 사용하고 있습니다. 그 밖에도 AUFS, VFS, ZFS, Btrfs 등 다양한 드라이버를 지원하고 있습니다.
책에서는 이런 드라이버에 대한 내용과 사용하는법에 자세히.. 설명하고 있습니다. (어..렵)
참고 : https://docs.docker.com/config/daemon/#enable-debugging
일반적인 서버 운영 환경에서는 서비스 운영을 하면서 필요한 시스템 메트릭(CPU/메모리 사용률, 네트워크 트래픽, …등)을 모니터링하면서 특이사항이 있을때 대응해 나간다. 도커 컨테이너를 이용해서 서비스를 진행할때도 이는 필요한 기능이다. 허나 컨테이너라는 환경하에서는 기존 모니터링 도구로는 컨테이너에 대한 모니터링을 진행하는 것이 쉽지 않다. 이런 문제점을 해결하고 컨테이너를 모니터링하기 위한 도구로 많이 사용되는 것이 구글에서 만든 cAdvisor(Container Advisor)
다.
cAdvisor는 호스트에서 실행중인 컨테이너들의 자원 사용량과 성능에 관한 정보를 수집해서 보여준다. cAdvisor는 자신이 컨테이너를 모니터링 하는 도구이면서 컨테이너를 이용해서 실행할 수 있다.
아래 처럼 간단한 도커 명령이면 cAdvisor를 실행할 수 있다.
sudo docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:rw \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
google/cadvisor:latest