Docker Engine API 설정 및 사용 방법

2024. 8. 22. 20:19Docker

Docker Engine에서 제공하는 HTTP API를 사용하여 Docker client가 Docker Engine과 통신하는 방법을 작성하겠습니다.

 

※ 이 글에서 설명하는 docker daemon 설정은 CentOS7 기반으로 작성되었습니다.

 

1. 원격으로 사용하려는 docker daemon에 host를 설정합니다.

# .docker/daemon.json 파일을 수정합니다. 없으면 새로 만들어줍니다.
$ cd .docker
$ vi daemon.json
# host로 UNIX 소켓, IP를 연결할 수 있게 daemon.json 파일을 수정합니다.
{
"hosts": ["unix:///var/run/docker.sock", "tcp://127.0.0.1:2375"]
}

 

2. /lib/systemd/system/docker.service 를 설정해 줍니다.

$ cd /lib/systemd/system
$ sudo vi docker.service
# 다음을 docker.service에 추가합니다.
# 0.0.0:2375는 원격 통신을 위한 호스트, unix socket은 로컬 통신을 위한 소켓입니다.
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H 0.0.0.0:2375

 

3. 변경이 완료되면, 적용을 위해 systemctl을 다시 로드합니다.

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

 

4. docker를 재시작합니다.

$ service docker restart

 

5. 다음과 같이 출력되면 설정이 완료된 것입니다.

$ netstat -lntp | grep dockerd
tcp6 0 0 :::2375 :::* LISTEN 2015/dockerd

 

이제 도커 클라이언트에서 호출하여 통신이 잘 되는지 확인해 보겠습니다.

도커 이미지를 pull 하기 위해 다음과 같이 호출합니다.

POST http://{IP}:2375/images/create?fromImage=rabbitmq&tag=3-management
response
{
    "status": "Pulling from library/rabbitmq",
    "id": "3-management"
}
{
    "status": "Pulling fs layer",
    "progressDetail": {},
    "id": "d7bfe07ed847"
}
{
    "status": "Pulling fs layer",
    "progressDetail": {},
    "id": "a8249261ea33"
}
...
{
    "status": "Extracting",
    "progressDetail": {
        "current": 7471104,
        "total": 11645457
    },
    "progress": "[================================>                  ]  7.471MB/11.65MB",
    "id": "0fbf2173e110"
}
{
    "status": "Extracting",
    "progressDetail": {
        "current": 9961472,
        "total": 11645457
    },
    "progress": "[==========================================>        ]  9.961MB/11.65MB",
    "id": "0fbf2173e110"
}
{
    "status": "Extracting",
    "progressDetail": {
        "current": 11645457,
        "total": 11645457
    },
    "progress": "[==================================================>]  11.65MB/11.65MB",
    "id": "0fbf2173e110"
}
{
    "status": "Pull complete",
    "progressDetail": {},
    "id": "0fbf2173e110"
}
{
    "status": "Digest: sha256:aadcd2873a65f4976774d05b54bb048a4f9878eae473a89bffc740bfc0de1803"
}
{
    "status": "Status: Downloaded newer image for rabbitmq:3-management"
}

 

반응형