도커의 구조
도커를 사용할때 docker 라는 명령어를 맨 앞에 붙여서 사용한다.
이 도커는 실제로 which 명령어로 위치를 확인 할 수 있다.
[root@localhost ~]# which docker /usr/bin/docker
위의 경로에서 도커 명령어를 실행하고 사용되고 있다.
실행중인 도커 프로세스를 검색해 보자.
[root@localhost ~]# ps aux | grep docker root 1356 0.0 0.0 116824 1032 pts/0 S+ 21:56 0:00 grep --color=auto docker ...
컨테이너 및 이미지를 다루는 명령어는 /usr/bin/docker 에서 시행되지만,
도커 엔진의 프로세스는 /usr/bin/dockerd 파일에서 실행된다.
도커는 크게 두가지도 나뉜다.
하나는 클라이언트, 하나는 서버로 구성된다.
실제 컨테이너 생성하며 이미지를 관리하는 주체는 도커 서버이며, 도커 엔진 (/usr/bin/dockerd) 프로세스에서 동작한다.
도커 엔진은 외부에서 API 입력을 받아 도커 엔진의 기능을 수행한다.
도커 프로세스가 실행되어 서버로서 입력을 받을 준비가 된 상태를 도커 데몬이라고 한다.
역시 API를 입력받아 도커 엔진의 기능을 수행하는데, 이 API를 사용할 수 있도록 제공하는것이 도커 클라이언트이다.
우리는 docker 로 시작하는 명령어를 입력하면 도커 클라이언트를 사용하는것이며,
도커 클라이언트는 입력된 명령어를 로컬에 존재하는 도커 데몬에게 API로서 전달한다.
이때 도커 클라이언트는 /var/run/docker.sock 에 위치한 소켓을 통하여 도커 데몬의 API를 호출한다.
우리는 터미널이나 SSH로 도커가 설치된 호스트에 접속하여
docker 명령어를 입력하면 아래와 같은 과정으로 도커가 제어된다.
- 사용자가 docker ps 명령어를 입력한다.
- /usr/bin/docker는 /var/run/docker.sock 소켓을 사용해 도커 데몬에게 명령어를 전달한다.
- 도커 데몬은 명령어를 파싱하고 명령어에 해당하는 작업을 수행한다.
- 수행결과를 도커 클라이언트에게 반환하고 사용자에게 결과를 출력한다.
이게 일반적인 도커 데몬을 제어하는 순서이다.
도커 데몬 실행
일반적으로 도커는 아래 명령어로 시작, 정지 할 수 있다.
[root@localhost ~]# service docker start Redirecting to /bin/systemctl start docker.service [root@localhost ~]# service docker stop Redirecting to /bin/systemctl stop docker.service
리눅스 부팅시 도커를 자동으로 실행하게 하려면 아래의 명령어로 서비스를 활성화 한다.
# systemctl enable socker
도커 서비스는 dockerd로 도커 데몬을 실해할 수 있다.
dockerd 명령어는 /usr/bin/dockerd로서 존재하지 때문에 명령어를 바로 실핼 할 수 있다.
[root@localhost ~]# dockerd INFO[2018-02-05T22:08:36.365465389+09:00] libcontainerd: started new docker-containerd process pid=1562 INFO[0000] starting containerd module=containerd revision=89623f28b87a6004d4b785663257362d1658a729 version=v1.0.0 INFO[0000] loading plugin "io.containerd.content.v1.content"... module=containerd type=io.containerd.content.v1 WARN[0000] failed to load plugin io.containerd.snapshotter.v1.btrfs error="path ... INFO[2018-02-05T22:08:36.766577465+09:00] API listen on /var/run/docker.sock
dockerd 를 입력하면 데몬이 실행되며, 각종 정보가 출력되는데 마지막의 /var/run/docker.sock에서
입력을 받을 수 있는 상태라는 메세지가 출력된다.
하지만, 도커를 직접 실행하게 되면, 하나의 터미널에서 차지하는 포그라운드 상태로 실행될 뿐더러 보안측면에서 바람직하지 않다.
실제 운영환경에서는 위와 같이 도커 데몬을 직접 실행하지 않으며,
대부분 디버깅 용도로 쓰일때문 직접 도커 데몬을 실행 한다.
dockerd 는 docker daemon 이라는 명령어로 사용될 수 있으며,
docker daemon명령어는 dockerd를 간적접으로 실행하며 두 명령어는 동일하다.
(docker daemon 명령어는 1.13버전부터 폐기 예정됨.)
도커 데몬 설정
도커 데몬 제어
# dockerd -H unix:///ver/run/docker.sock
도커 데몬 보안 적용
# dockerd ---tlsverify
도커 데몬 스토리지 드라이버 변경
# dockerd --storage-driver=fevicemapper