티스토리 뷰

Dev./Docker

[Docker] Docker API 사용

인쥭 2021. 5. 10. 17:49
반응형

참고:

 

Docker Engine API v1.41 Reference

 

docs.docker.com

 

 

docker daemon 설정을 이용해 원격으로 docker 이용하기

시작하며 (이건 스킵하셔도됩니다. 거의 일기장 수준...) docker client 와 docker daemon 이 같은 machine 에 존재하지 않더라도 docker client 를 통해 원격으로 docker를 이용할 수 있다는 내용의 글입니다...

senticoding.tistory.com

1. 테스트 환경

  • ec2 Instance 2 EA (ubuntu 18.04)
  • docker version 20.10.2
  • docker API version 1.41
  • jq 1.5.1

2. docker.service 수정

  • Instance IP 주소는 1.1.1.1, docker daemon용 포트는 33333으로 가정
  • 다음과 같이 진행하여 기존 ExecStart를 주석처리하고 새 라인을 작성
root@ip-1-1-1-1:~# cd /lib/systemd/system
root@ip-1-1-1-1:/lib/systemd/system# ls docker*
docker.service  docker.socket
root@ip-1-1-1-1:/lib/systemd/system# vi docker.service

# 생략
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H 0.0.0.0:33333

# 후략

3. Docker daemon 재시작

  • 재시작할 경우, 해당 인스턴스의 33333 포트로 Docker API에 접근이 가능하다.
root@ip-1-1-1-1:/lib/systemd/system# systemctl daemon-reload
root@ip-1-1-1-1:/lib/systemd/system# systemctl restart docker.service

root@ip-1-1-1-1:/lib/systemd/system# ps -ef | grep 33333
root      4315     1  0 16:39 ?        00:00:03 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H 0.0.0.0:33333

root@ip-1-1-1-1:/lib/systemd/system# curl localhost:33333
{"message":"page not found"}

4. API Call

  • 기본적으로 curl --silent localhost:33333, POST 메소드는 curl -X POST --silent localhost:33333으로 접근하였다.

a). docker ps

  • 온갖 정보가 다 나오므로, 보안에 주의해야할 것으로 보임!
root@ip-1-1-1-1:/lib/systemd/system# curl --silent localhost:33333/containers/json | jq '.[0]'
{
  "Id": "baed~~~",
# 너무 길어서 생략

b). docker ps -a

root@ip-1-1-1-1:/lib/systemd/system# curl --silent localhost:33333/containers/json?all=true | jq '.[0]'
{
  "Id": "baed~~~",
# 너무 길어서 생략

c). docker stop

  • POST 메소드를 사용한다.
root@ip-1-1-1-1:/lib/systemd/system# curl --silent localhost:33333/containers/baed3ac2c1f1709d37793295bb38948e6ce2b1b169ca049afb74901211eaa457/json | jq -r '.State.Status'
running

root@ip-1-1-1-1:/lib/systemd/system# curl -X POST --silent localhost:33333/containers/baed3ac2c1f1709d37793295bb38948e6ce2b1b169ca049afb74901211eaa457/stop | jq -r '.'

root@ip-1-1-1-1:/lib/systemd/system# curl --silent localhost:33333/containers/baed3ac2c1f1709d37793295bb38948e6ce2b1b169ca049afb74901211eaa457/json | jq -r '.State.Status'
exited

d). docker start

  • POST 메소드를 사용한다.
root@ip-1-1-1-1:/lib/systemd/system# curl -X POST --silent localhost:33333/containers/baed3ac2c1f1709d37793295bb38948e6ce2b1b169ca049afb74901211eaa457/start | jq -r '.'

root@ip-1-1-1-1:/lib/systemd/system# curl --silent localhost:33333/containers/baed3ac2c1f1709d37793295bb38948e6ce2b1b169ca049afb74901211eaa457/json | jq -r '.State.Status'
running

root@ip-1-1-1-1:/lib/systemd/system# curl --silent localhost:33333/containers/baed3ac2c1f1709d37793295bb38948e6ce2b1b169ca049afb74901211eaa457/json | jq -r '.State.Health.Status'
healthy

5. docker 명령어를 통한 외부 호출

  • docker -H [IP]:[PORT] [명령어]
  • 보안 그룹으로 2.2.2.2 인스턴스로부터의 1.1.1.1:33333 접근이 허용되어 있는 것으로 간주한다.
ubuntu@ip-2-2-2-2:~$ docker -H 1.1.1.1:33333 ps
CONTAINER ID   IMAGE            
baed~~~        some_container~~~
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함