티스토리 뷰

Docker

Remote API with Docker for Mac

SanYang 2017. 4. 9. 14:55

Overview

  Docker Engine에서 제공하는 API들을 HTTP를 활용하여 간단한 정보를 얻어보고자 합니다.

Background

  Mac에서는 Docker for Mac( https://docs.docker.com/docker-for-mac/install ) 을 이용하여 Docker를 사용합니다. 안타깝게도 Docker for Mac은 Docker Engine에 tcp로 접근할 수 있는 방법을 제공하고 있지 않습니다. 이에 따라, unix socket을 통해 통신을 해야하는데, 이는 접근성이 떨어지는 단점이 있습니다. 이에 따라, socat을 활용하여 HTTP를 통한 API 호출을 해보고자 합니다.

What is socat?

  두 가지의 서로 다른 채널을 연결해주는 tool ( https://github.com/craSH/socat )입니다. 지금과 같은 상황에서는 TCP를 통해 전달받은 요청을 UNIX socket으로 forwarding 하는데 사용하고 있습니다. 자세한 내용은 위의 README를 보시면 아실 수 있습니다.

Settings

$ brew install socat


$ socat -d TCP-LISTEN:2376,range=127.0.0.1/32,reuseaddr,fork UNIX:/var/run/docker.sock


$ curl http://127.0.0.1:2376/version


{

  • Version"17.03.1-ce",
  • ApiVersion"1.27",
  • MinAPIVersion"1.12",
  • GitCommit"c6d412e",
  • GoVersion"go1.7.5",
  • Os"linux",
  • Arch"amd64",
  • KernelVersion"4.9.13-moby",
  • Experimentaltrue,
  • BuildTime"2017-03-24T00:00:50.070226199+00:00"

}


위와 같이 curl을 호출했을 때, json 응답이 온다면 Setting에 성공하신 겁니다~!

Docker Engine API

  Docker Engine은 많은 API들을 제공합니다. 이 중에서 유용해 보이는 API들을 간단하게나마 정리하고자 합니다.

1) Docker에서 관리하는 Container들의 정보

http://127.0.0.1:2376/containers/json


https://docs.docker.com/engine/api/v1.27/#operation/ContainerList

2) Docker에서 발생하는 Event들의 정보

http://127.0.0.1:2376/events


https://docs.docker.com/engine/api/v1.27/#operation/SystemEvents

3) 특정 Container 내부에 실행되고 있는 프로세스 목록

http://127.0.0.1:2376/containers/{containerId}/top


https://docs.docker.com/engine/api/v1.27/#operation/ContainerTop


{containerId}는 $ docker ps -a 에서 노출되는 ID들 중 유니크하다면 줄여서 사용하셔도 됩니다. 예를 들어, container Id가 axxxx와 bxxxx가 있다면, a만 containerId에 넣어도 된다는 것을 의미합니다. 충돌이 나지 않는다면, Docker에서는 적절한 Container를 매핑하여 정보를 넘겨줍니다.

4) 특정 Container의 리소스 모니터링

http://127.0.0.1:2376/containers/{containerId}/stats


{containerId}는 $ docker ps -a 에서 노출되는 ID들 중 유니크하다면 줄여서 사용하셔도 됩니다. 예를 들어, container Id가 axxxx와 bxxxx가 있다면, a만 containerId에 넣어도 된다는 것을 의미합니다. 충돌이 나지 않는다면, Docker에서는 적절한 Container를 매핑하여 정보를 넘겨줍니다.

5) Container Operation

5-1. Create a container

5-2. Start a container

5-3. Stop a container

5-4. Restart a container

5-5. Kill a container


좀 더 자세한 API들의 목록을 확인하고 싶으시면 아래의 링크를 참조해주세요.


https://docs.docker.com/engine/api/v1.27/


Reference

https://forums.docker.com/t/remote-api-with-docker-for-mac-beta/15639

https://docs.docker.com/docker-for-mac/faqs/#how-do-i-connect-to-the-remote-docker-engine-api



부족한 부분이 있거나 설명이 난해했던 부분에 대해서는 언제든지 Comment 부탁드립니다.

감사합니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함