본문 바로가기

docker 활용 팁

오토씨 2022. 9. 26.

1. dockerd remote 접속 가능하도록 설정하는 방법

# Ubuntu 16.04의 경우
$ sudo vi /lib/systemd/system/docker.service

[수정전]
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:2375

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
$ sudo netstat -antpl
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:2375            0.0.0.0:*               LISTEN      1197/dockerd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1135/sshd


2. dockerd remote 접속 alias 활용

# 임시 적용 방법
$ alias docker="docker -H remote_dockerd_ip:2375" # default port: 2375, ":2375" 생략 가능

# 영구 적용 방법
$ vi /etc/profile
alias docker="docker -H remote_dockerd_ip:2375"


3. dockerd remote 통신은 http 프로토콜을 사용한다.

# 원격에서 명령 실행
$ docker -H localhost:2375 ps

# 트래픽 덤프
$ sudo tcpdump -nn -i lo

00:08:53.548704 IP 127.0.0.1.37034 > 127.0.0.1.2375: Flags [P.], seq 1:91, ack 1, win 342, options [nop,nop,TS val 1389036 ecr 1389036], length 90
        0x0000:  0000 0000 0000 0000 0000 0000 0800 4500  ..............E.
        0x0010:  008e d37f 4000 4006 68e8 7f00 0001 7f00  ....@.@.h.......
        0x0020:  0001 90aa 0947 d30d 80a8 d24c 1c42 8018  .....G.....L.B..
        0x0030:  0156 fe82 0000 0101 080a 0015 31ec 0015  .V..........1...
        0x0040:  31ec 4845 4144 202f 5f70 696e 6720 4854  1.HEAD./_ping.HT
        0x0050:  5450 2f31 2e31 0d0a 486f 7374 3a20 6c6f  TP/1.1..Host:.lo
        0x0060:  6361 6c68 6f73 743a 3233 3735 0d0a 5573  calhost:2375..Us
        0x0070:  6572 2d41 6765 6e74 3a20 446f 636b 6572  er-Agent:.Docker
        0x0080:  2d43 6c69 656e 742f 3139 2e30 332e 3133  -Client/19.03.13
        0x0090:  2028 6c69 6e75 7829 0d0a 0d0a            .(linux)....

00:08:53.549002 IP 127.0.0.1.2375 > 127.0.0.1.37034: Flags [P.], seq 1:282, ack 91, win 342, options [nop,nop,TS val 1389037 ecr 1389036], length 281
        0x0000:  0000 0000 0000 0000 0000 0000 0800 4500  ..............E.
        0x0010:  014d a5fd 4000 4006 95ab 7f00 0001 7f00  .M..@.@.........
        0x0020:  0001 0947 90aa d24c 1c42 d30d 8102 8018  ...G...L.B......
        0x0030:  0156 ff41 0000 0101 080a 0015 31ed 0015  .V.A........1...
        0x0040:  31ec 4854 5450 2f31 2e31 2032 3030 204f  1.HTTP/1.1.200.O
        0x0050:  4b0d 0a41 7069 2d56 6572 7369 6f6e 3a20  K..Api-Version:.
        0x0060:  312e 3430 0d0a 4361 6368 652d 436f 6e74  1.40..Cache-Cont
        0x0070:  726f 6c3a 206e 6f2d 6361 6368 652c 206e  rol:.no-cache,.n
        0x0080:  6f2d 7374 6f72 652c 206d 7573 742d 7265  o-store,.must-re
        0x0090:  7661 6c69 6461 7465 0d0a 436f 6e74 656e  validate..Conten
        0x00a0:  742d 4c65 6e67 7468 3a20 300d 0a43 6f6e  t-Length:.0..Con
        0x00b0:  7465 6e74 2d54 7970 653a 2074 6578 742f  tent-Type:.text/
        0x00c0:  706c 6169 6e3b 2063 6861 7273 6574 3d75  plain;.charset=u
        0x00d0:  7466 2d38 0d0a 446f 636b 6572 2d45 7870  tf-8..Docker-Exp
        0x00e0:  6572 696d 656e 7461 6c3a 2066 616c 7365  erimental:.false
        0x00f0:  0d0a 4f73 7479 7065 3a20 6c69 6e75 780d  ..Ostype:.linux.
        0x0100:  0a50 7261 676d 613a 206e 6f2d 6361 6368  .Pragma:.no-cach
        0x0110:  650d 0a53 6572 7665 723a 2044 6f63 6b65  e..Server:.Docke
        0x0120:  722f 3139 2e30 332e 3133 2028 6c69 6e75  r/19.03.13.(linu
        0x0130:  7829 0d0a 4461 7465 3a20 5475 652c 2030  x)..Date:.Tue,.0
        0x0140:  3120 4465 6320 3230 3230 2031 353a 3038  1.Dec.2020.15:08
        0x0150:  3a35 3320 474d 540d 0a0d 0a              :53.GMT....

00:08:53.550375 IP 127.0.0.1.37034 > 127.0.0.1.2375: Flags [P.], seq 91:196, ack 282, win 350, options [nop,nop,TS val 1389037 ecr 1389037], length 105
        0x0000:  0000 0000 0000 0000 0000 0000 0800 4500  ..............E.
        0x0010:  009d d381 4000 4006 68d7 7f00 0001 7f00  ....@.@.h.......
        0x0020:  0001 90aa 0947 d30d 8102 d24c 1d5b 8018  .....G.....L.[..
        0x0030:  015e fe91 0000 0101 080a 0015 31ed 0015  .^..........1...
        0x0040:  31ed 4745 5420 2f76 312e 3430 2f63 6f6e  1.GET./v1.40/con
        0x0050:  7461 696e 6572 732f 6a73 6f6e 2048 5454  tainers/json.HTT
        0x0060:  502f 312e 310d 0a48 6f73 743a 206c 6f63  P/1.1..Host:.loc
        0x0070:  616c 686f 7374 3a32 3337 350d 0a55 7365  alhost:2375..Use
        0x0080:  722d 4167 656e 743a 2044 6f63 6b65 722d  r-Agent:.Docker-
        0x0090:  436c 6965 6e74 2f31 392e 3033 2e31 3320  Client/19.03.13.
        0x00a0:  286c 696e 7578 290d 0a0d 0a              (linux)....

00:08:53.550705 IP 127.0.0.1.2375 > 127.0.0.1.37034: Flags [P.], seq 282:487, ack 196, win 342, options [nop,nop,TS val 1389037 ecr 1389037], length 205
        0x0000:  0000 0000 0000 0000 0000 0000 0800 4500  ..............E.
        0x0010:  0101 a5fe 4000 4006 95f6 7f00 0001 7f00  ....@.@.........
        0x0020:  0001 0947 90aa d24c 1d5b d30d 816b 8018  ...G...L.[...k..
        0x0030:  0156 fef5 0000 0101 080a 0015 31ed 0015  .V..........1...
        0x0040:  31ed 4854 5450 2f31 2e31 2032 3030 204f  1.HTTP/1.1.200.O
        0x0050:  4b0d 0a41 7069 2d56 6572 7369 6f6e 3a20  K..Api-Version:.
        0x0060:  312e 3430 0d0a 436f 6e74 656e 742d 5479  1.40..Content-Ty
        0x0070:  7065 3a20 6170 706c 6963 6174 696f 6e2f  pe:.application/
        0x0080:  6a73 6f6e 0d0a 446f 636b 6572 2d45 7870  json..Docker-Exp
        0x0090:  6572 696d 656e 7461 6c3a 2066 616c 7365  erimental:.false
        0x00a0:  0d0a 4f73 7479 7065 3a20 6c69 6e75 780d  ..Ostype:.linux.
        0x00b0:  0a53 6572 7665 723a 2044 6f63 6b65 722f  .Server:.Docker/
        0x00c0:  3139 2e30 332e 3133 2028 6c69 6e75 7829  19.03.13.(linux)
        0x00d0:  0d0a 4461 7465 3a20 5475 652c 2030 3120  ..Date:.Tue,.01.
        0x00e0:  4465 6320 3230 3230 2031 353a 3038 3a35  Dec.2020.15:08:5
        0x00f0:  3320 474d 540d 0a43 6f6e 7465 6e74 2d4c  3.GMT..Content-L
        0x0100:  656e 6774 683a 2033 0d0a 0d0a 5b5d 0a    ength:.3....[].


4. A Python library for Docker Engine API

# 설치 방법
$ pip install docker

# 참고 URL
https://docker-py.readthedocs.io/en/stable/

댓글