Open engal1991 opened 2 years ago
docker 명령어로 실행되던 주체 외부에서 api입력을 받아 도커엔진의 기능을 수행 /var/run/docker.socker 유닉스 소켓을 통해 도커데몬 api를 호출한다.
컨테이너를 생성하고 ,. 이미지를 관리하는 주체 dockerd라는 프로세스로서 동작하며, 입력을 받을준비가 된상태를 도커데몬이라고한다.
service docker start
servvce docker stop
도커를 시작하거나 정지할 수 있다.
systemctl enable docker
도커를 자동으로 설정하려면 위와 같이 활성화한다.
도커 서비스는 dockerd로 도커 데몬을 실행합니다. 하지만, 서비스를 사용하지 않고 직접 도커 데몬을 실행할 수도 있습니다.
sudo service docker stop
sudo dockerd
실행하게 되면 도커 데몬에 대한 각종 정보가 출력되는데, 마지막 줄은 /var/run/docker.sock에서 입력을 받을 수 있는 상태라는 메세지입니다. 여기서 터미널을 하나 더 열어서 도커 명령어를 입력하면 이전처럼 도커를 사용할 수 있습니다.
도커 데몬으로 설정할 수 있는 옵션은 dockerd --help 명령어로 확인이 가능합니다.
dockerd 명령어로 인자를 넣어 도커 데몬을 직접 실행하는 것보다 더커 설정 파일을 수정한 뒤에 도커 데몬이 설정 파일을 읽어 서비스로 실행되게 하는 것이 일반적입니다.
직접 도커 데몬 실행
dockerd -H tcp://0.0.0.:2375 -insecure-registry=192.168.100.99:5000 -tls=false
서비스로 실행(설정파일 수정)
# vi /etc/default/docker
...
DOCKER_OPTS="-H tcp://0.0.0.0:2375 --insecure-registry=192.168.100.99:5000 --tls=false"
-H 옵션은 도커 데몬의 API를 사용할 수 있는 방법을 추가합니다. 아무런 옵션을 설정하지 않고 도커 데몬을 실행하면 도커 클라이언트인 /usr/bin/docker를 위한 유닉스 소켓 /var/run/docker.sock을 사용합니다.
그러므로 단순히 dockerd를 입력해 도커 데몬을 실행해도 도커 클라이언트의 CLI를 실행할 수 있습니다. 따라서, 아래의 두 명령어는 동일합니다.
dockerd
dockerd -H unix:///var/run/docker.sock
-H에 IP주소와 포트 번호를 입력하면 원격 API인 Docker Remote API로 도커를 제어할 수 있습니다. Remote API는 도커 클라이언트와는 다르게 로컬에 있는 도커 데몬이 아니더라도 제어할 수 있으며, RESTful API 형식을 띠고 있으므로 HTTP 요청으로 도커를 제어할 수 있습니다.
다음 명령어로 도커 데몬을 실행하면 호스트에 존재하는 모든 네트워크 인터페이스의 IP 주소와 2375번 포트를 바인딩해 입력을 받습니다.
dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375
H에 unix:///var/run/docker.sock을 지정하지 않고, 위와 같이 Remote API만을 위한 바인딩 주소를 입력했다면, 유닉스 소켓은 비활성화되므로 도커 클라이언트를 사용할 수 없게 되며, 호스트에서는 docker로 시작하는 명령어를 사용할 수 없게 됩니다.
따라서 일반적으로 도커 클라이언트를 위한 유닉스 소켓과 Remote API를 위한 바인딩 주소를 동시에 설정합니다.
dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375
shell의 환경변수를 설정해 원격에 있는 도커를 제어할 수도 있습니다. 도커 클라이언트는 shell의 DOCKER_HOST 변수가 설정되어 있다면, 해당 도커 데몬에 API 요청을 전달합니다.
export DOCKER_HOST="tcp://localhost:2375"
docker verion
또는 -H 옵션을 설정하여 제어할 원격 도커 데몬을 설정할 수도 있습니다.
docker -H tcp://localhost:2375 version
영양가가..없네요...
도커는 특정 스토리지 벡엔드 기술을 사용하여 도커 컨테이너와 이미지를 저장하고 관리합니다.
일부 OS는 도커를 설치할 때 기본적으로 사용되도록 설정된 스토리지 드라이버가 있는데, 우분투와 같은 데비안 계열의 OS는 overlay2를, 구버전의 CentOS와 같은 OS는 devicemapper를 사용합니다.
이는 docker info 명령어로 확인할 수 있습니다.
도커를 사용하는 환경에 따라서 스토리지 드라이버는 자동으로 정해지지만, 도커 데몬 실행 옵션에서 스토리지 드라이버를 변경할 수도 있습니다. 이는 도커 데몬 옵션 중 --storage-driver 를 사용하여 변경할 수 있으며, 지원하는 드라이버는 OverlayFS, AUFS, Btrfs, Devicemapper, VFS, ZFS 등이 있습니다.
이 가운데 하나만 선택해 도커 데몬에 적용할 수 있으며, 적용된 스토리지 드라이버에 따라 컨테이너와 이미지가 별도로 생성됩니다.
예를 들면, 도커가 AUFS를 기본적으로 사용하도록 설정된 우분투 OS에서 Devicemapper를 사용하도록 변경하게 되면, 기존에 AUFS에서 사용했던 이미지와 컨테이너는 더 이상 사용할 수 없게 됩니다.
별도로 생성된 Devicemapper 파일은 /var/lib/docker/devicemapper 디렉토리에 저장되며, AUFS 파일은 /var/lib/docker/aufs 디렉토리에 저장되어 따로 관리됩니다.
어떤 스토리지 드라이버를 사용할지는 개발하는 컨테이너 어플리케이션 및 개발 환경에 따라서 다릅니다. RedHat 계열의 OS를 사용하고 있다면 OverlayFS를 선택하는 것이 좋을 수 있고, 안정성을 우선시하는 컨테이너 어플리케이션을 개발하고 있다면 Btrfs가 좋은 선택이 될 수도 있습니다. 무조건 좋은 스토리지 드라이버라는 것은 없기 때문에 상황에 따라 각 드라이버의 장단점을 감안하여 선택하는 것이 바람직합니다.
컨테이너 내부에서 사용되는 파일시스템의 크기는 도커가 사용하고 있는 스토리지 드라이버에 따라 조금씩 다릅니다.
예를 들어, 도커 엔진이 AUFS나 overlay2 등의 스토리지 드라이버를 사용하도록 설정되어 있다면 컨테이너는 호스트의 저장 공간의 크기를 공유합니다. 따라서 overlay2를 기본적으로 사용하는 우분투의 도커에서는 컨테이너 내부에서의 저장 공간이 호스트의 저장 공간 크기와 같습니다.
이번에 예시로 overlay2에서 컨테이너의 저장 공간을 설정하는 방법에 대해서 알아보겠습니다.
컨테이너의 저장 공간을 설정하기 위해서는 도커 데이터가 저장되어 있는 디스크가 xfs 파일시스템인 경우에 가능하며 project quota라는 기능을 이용해서 컨테이너의 저장 공간을 제한할 수 있습니다.
이 기능을 사용하기 위해 대략적인 준비과정은 다음과 같습니다.
docker run -it --storage-opt size=1G centos:7
, 도커 프로젝트에서 지원하는 상용 솔루션 및 각종 오픈소스 대시보드도 있습니다. 이번 글에서는 하나의 컨테이너 뿐만 아니라 도커 데몬 자체를 모니터링하는 방법을 알아보겠습니다.
sudo dockerd -d
도커 데몬을 디버그 옵션으로 설정하여 .디버그 옵션으로 실행하면 Remote API의 입출력뿐만 아니라 로컬 도커 클라이언트에서 오가는 모든 명령어를 로그로 출력합니다. 디버그 모드는 도커 데몬을 실행할 때 -D 옵션을 추가해서 사용할 수 있습니다. 도커 데몬을 포그라운드 상태로 실행해야 하는 단점이 있다.
. events는 도커 데몬에 어떤 일이 일어나고 있는지를 실시간 스트림 로그로 보여줍니다. 아래 명령어 중의 하나를 입력하면 도커 데몬이 수행한 명령어의 결과를 실시간으로 볼 수 있습니다.
docker events
docker system events
container, image, volume, network, plugin , daemon 의 정보를 제공한며, filter type 옵션 설정도가능하다.
docker events --filter 'type=image'
docker stats 명령어는 실행 중인 모든 컨테이너의 자원 사용량을 스트림으로 출력합니다.
stats 명령어는 실행 중인 모든 컨테이너의 CPU, 메모리 제한 및 사용량, 네트워크 입출력, 블록 입출력(하드웨어 입출력) 정보를 출력합니다. 기본적으로 스트림 형태로 출력되며, 스트림이 아닌 한 번만 출력하는 방식을 원한다면 --no-stream 옵션을 추가합니다.
system df 명령어는 도커에서 사용하고 있는 이미지, 컨테이너, 로컬 볼륨의 총 개수 및 사용 중인 개수, 크기, 삭제함으로써 확보 가능한 공간을 출력합니다.
CAdvisor는 구글이 만든 컨테이너 모니터링 도구로, 컨테이너로서 간단히 설치할 수 있고 컨테이너별 실시간 자원 사용량 및 도커 모니터링 정보 등을 시각화해서 보여줍니다.
그러나 CAdvisor는 단일 도커 호스트만을 모니터링할 수 있다는 한계가 있습니다. 여러 개의 호스트를 도커로 사용하고 있으며, 이를 기반으로 PaaS 같은 도커 클러스터를 구축했다면 단일 CAdvisor 컨테이너는 용도에 맞지 않을 수 있습니다.
이를 위해서 보통은 쿠버네티스나 스웜 모드 등과 같은 오케스트레이션 툴을 설치한 뒤에 프로메테우스(Prometheus), InfluxDB 등을 이용해 여러 호스트의 데이터를 수집하는 것이 일반적입니다.
도커 기반어인 go는 물론 c#, c++, 파이썬, 다트, 자바등 라이브러리를 오픈소스 베이스로 도커데몬 원격 API로 접근할수 있다.
2.5.1 도커의 구조
2.5.2 도커 데몬 실행
2.5.3 도커 데몬 설정
2.5.4 도커 데몬 모니터링
2.5.5 Remote API 라이브러리를 이용한 도커 사용