도커의 구조
도커의 위치는 /usr/bin/docker 에 위치한다.
컨테이너나 이미지를 다루는 명령어는 /usr/bin/docker에서 실행되지만, 도커 엔진의 프로세스는 /usr/bin/dockerd 파일로 실행되고 있다. 이는 docker 명령어가 실제 도커 엔진이 아닌 클라이언트로써으 도커이기 때문이다.
클라이언트 도커 (docker)
- API를 사용할 수 있도록 CLI를 제공하는 것
- 사용자가 docker로 시작하는 명령어를 입력하면 도커 클라이언트에 전달
- 도커 클라이언트는 명령어를 로컬에 존제하는 도커 데몬에게 API로 전달
- 전달할 때, /var/run/docker.sock에 위치한 유닉스 소켓을 통해 도커 데몬의 API 호출
- tcp로 원격에 있는 도커 데몬을 제어하는 방법도 존재 (밑에서 설명)
서버 도커 (dockerd)
- 실제로 컨테이너를 생성하고 실행하며 이미지를 관리하는 주체
- 외부 API 입력을 받아 도커 엔진의 기능을 수행
실행 순서
1. 사용자가 CLI를 이용하여 명령어를 입력
2. 도커 클라이언트가 유닉스 소켓을 이용하여 도커 데몬에 명령어 전달
3. 도커 데몬은 받은 명령어를 파싱하여 작업 수행
4. 수행 결과를 클라이언트에 반환하고 사용자에게 결과 출력
도커 데몬 실행
service docker start # 시작
service docker stop # 종료
우분투 계열은 설치하게 되면 자동으로 시작시 도커가 시작되도록 설정됨
레드헷 계열은 추가 설정을 해야함
systemctl enable docker
도커를 멈추고 나서, /usr/bin/dockerd 명령어를 통해 수동으로 도커데몬 실행 가능
도커 데몬 제어
- 옵션으로 -H를 사용하여 데몬의 API를 사용할 수 있는 방법을 추가
- 아무런 옵션없이 dockerd 를 실행하면 로컬의 도커 유닉스 소켓이 실행됨
# 같은 명령어
/usr/bin/dockerd
/usr/bin/dockerd -H unix:///var/run/docker.sock
- -H 옵션 뒤에 다른 UP 주소와 포트번호를 입력하면 원격 API인 Docker Remote API로 원격지의 도커를 제어 가능
- RESTful API 형식을 띠고 있으므로 HTTP 요청으로 도커 제어 가능
dockerd -H tcp://0.0.0.0:2375
- 두가지 모두 설정 가능
dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375
Remote Docker API 사용 예시
dockerd -H tcp://192.168.99.100:2375
curl 192.168.99.100:2375/version --slient | python -m json.tool
- curl 도구를 사용하여 HTTP 요청 (docker version과 같은 명령)
- 보통 HTTP 도구로 명령을 전달하기 보다 특정 언어로 바인딩한 라이브러리를 사용하는것이 일반적
'Infra > Docker' 카테고리의 다른 글
Docker Swarm (도커 스웜 모드) (0) | 2022.05.22 |
---|---|
Dockerfile (도커 파일) (0) | 2022.05.08 |