Programming Note

Docker 원격 사용 및 Docker Engine API

Jeyeon 2024. 12. 19. 17:16

Docker는 기본적으로 Server-Client 구조로 되어있기 때문에 원격 사용이 가능하다.

우리가 흔히 사용하는 Docker CLI는 Client이고 모든 기능은 Docker Daemon이라는 Server를 호출하여 사용하는 구조이다. 이를 모두 묶어서 Docker Engine이라고 부른다.

(Docker Desktop은 Docker CLI를 포함하고 있으며 GUI 환경으로 Docker CLI를 간편하게 사용하기 위한 도구이다.)

 

위 이미지에서 보는 것과 같이 Docker daemon은 REST API를 제공하고 이를 통해 사용이 가능한 구조이다. 그렇기 때문에 설정만 한다면 원격에서 REST API를 사용하여 Docker daemon에 접근할 수 있다.

Daemon 확인 후 서비스 수정하기

docker 원격 사용을 위해 설정을 바꿔 주어야 하기 때문에 서비스 파일 위치부터 확인한다.

$ systemctl status docker.service

위처럼 /lib/systemd/system/docker.service 위치에 서비스 파일이 있는 것을 확인하였다.

 

 

해당 파일을 vi나 nano로 열어서 ExecStart 필드를 찾아 아래와 같이 수정한다.

(수정 권한이 필요하기 때문에 sudo로 권한을 취득하여 열어 수정해야 한다.)

$ sudo vi /lib/systemd/system/docker.service

0.0.0.0:2375라고 작성하였으므로 2375 포트를 통해 Daemon에 접근할 수 있도록 한다는 뜻이다.

 

 

저장 후 daemon을 재시작한다.

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker.service

daemon 상태를 확인해 보면 정상적으로 잘 실행된 모습을 볼 수 있다.

 

 

Docker CLI를 통한 원격 제어

아래와 같이 -H 옵션으로 호스트와 포트를 입력하면 원격에서 Docker에 접근할 수 있다.

$ docker -H {host}:{port} {명령어}

아래는 원격으로 Docker에 있는 이미지 목록을 확인이 가능한 모습이다.

 

 

REST API를 통한 제어

Docker engine에 대한 api 명세는 아래 웹페이지에 상세하게 기술되어 있다.

https://docs.docker.com/reference/api/engine/version/v1.47/

 

/containers/json?all=true 로 현재 docker에 생성되어 있는 모든 컨테이너를 조회해 본 결과이다.

조회 말고도 컨테이너 생성, 정보 갱신, 삭제, 이미지 풀, 삭제, 빌드까지… 로컬에서 사용할 수 있는 기능이라면 모두 REST API를 통해 사용이 가능하다.