- 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
- 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.
Docker Remote API 사용하기
이재홍 http://www.pyrasis.com 2014.08.02 ~ 2014.09.20
Docker는 데몬과 클라이언트 간의 통신을 할 때 로컬에서는 유닉스 소켓을 사용하고, 원격에서는 TCP 소켓을 사용합니다. 여기에 HTTP REST 형식으로 API가 구현되어 있습니다. 따라서 API가 특정 언어에 종속되어 있지 않고, 다양한 언어에서 사용할 수 있습니다.
먼저 기존의 Docker 데몬을 정지하고 TCP 소켓으로 다시 실행시켜 API를 테스트해보겠습니다.
$ sudo service docker stop
$ sudo docker -d -H tcp://0.0.0.0:4243
docker -d -H tcp://0.0.0.0:4243
형식입니다. -d
옵션을 사용하여 데몬 모드로 실행하고, -H
옵션을 사용하여 접속을 받을 IP 주소와 포트 번호를 설정합니다. Docker 데몬의 기본 포트 번호는 4243입니다.
명령을 실행하면 Docker 데몬이 foreground로 실행됩니다. 따라서 테스트를 위해 새 터미널을 실행합니다.
Docker Remote API는 HTTP REST 형식이므로 curl
명령으로 손쉽게 사용할 수 있습니다. 먼저 nginx 이미지를 받습니다.
$ curl -X POST http://127.0.0.1:4243/images/create?fromImage=nginx:latest
-X
: POST 메서드를 사용하도록 설정합니다.- 이미지를 받는 Remote API는 /images/create?fromImage=<이미지 이름>:<태그>입니다.
받은 nginx 이미지로 컨테이너를 생성합니다.
$ curl -X POST -H "Content-Type: application/json" \
-d '{ "Image":"nginx:latest", "ExposedPorts":"80/tcp" }' \
http://127.0.0.1:4243/containers/create
{"Id":"386147f1c71ca7ee6a7013dbd2fff5d3091e41268885f954046be964b9ade39e","Warnings":null}
-X
: POST 메서드를 사용하도록 설정합니다.-H
: Content-Type을 application/json으로 사용하도록 설정합니다.-d
: 컨테이너를 생성하기 위해 설정 데이터를 보냅니다. 여기서는 Image에 nginx:latest를 설정하였고, 호스트에 포트를 연결하기 위해 ExposedPorts에 80/tcp를 설정하였습니다.- 컨테이너를 생성하는 Remote API는 /containers/create입니다.
컨테이너가 생성되면 컨테이너 ID가 출력됩니다.
이제 생성된 컨테이너를 시작합니다.
$ curl -X POST -H "Content-Type: application/json" \
-d '{ "PortBindings": {"80/tcp": [{ "HostPort": "80"}]} }' \
http://127.0.0.1:4243/containers/386147f1c71c/start
-X
: POST 메서드를 사용하도록 설정합니다.-H
: Content-Type을 application/json으로 사용하도록 설정합니다.-d
: 컨테이너의 80번 포트를 외부에 노출합니다. 여기서는 PortBindings에 {"80/tcp": [{ "HostPort": "80"}]}를 설정하였습니다.- 컨테이너를 시작하는 Remote API는 /containers/<컨테이너 ID>/start입니다. 컨테이너 ID는 앞에서 컨테이너를 생성할 때 출력된 값을 사용합니다(12자리).
컨테이너 목록을 출력합니다.
$ curl http://127.0.0.1:4243/containers/json
[{"Command":"nginx","Created":1409246048,"Id":"386147f1c71ca7ee6a7013dbd2fff5d3091e41268885f954046be964b9ade39e","Image":"nginx:1","Names":["/angry_bartik"],"Ports":[{"IP":"0.0.0.0","PrivatePort":80,"PublicPort":80,"Type":"tcp"}],"Status":"Up 6 seconds"}
컨테이너 목록을 출력하는 Remote API는 GET 메서드에 /containers/json입니다. 정지된 컨테이너까지 출력하려면 /containers/json?all=1처럼 all=1을 붙여주면 됩니다.
이처럼 HTTP 메서드를 이용하여 Docker 데몬을 제어할 수 있습니다. HTTP REST 형식으로 된 Remote API를 그대로 사용하여 구현하는 일은 드물 것이라 생각됩니다. 또한, Remote API는 빠르게 업그레이드되고 있기 때문에 전체 API는 책에 담지 않았습니다. Remote API 목록은 다음 URL을 참조하기 바랍니다.
저작권 안내
이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.- 블로그, 게시판 등에 퍼가는 것을 금지합니다.
- 비공개 포스트에 퍼가는 것을 금지합니다.
- 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
- 링크 및 SNS 공유는 허용합니다.