티스토리 뷰

Cloud/Architecture&Tech

Docker with tcp socket

Jacob_baek 2021. 7. 6. 20:21

Windows 환경에서 가급적 docker-desktop의 docker 사용을 권장하지만 간혹 docker-desktop을 설치하여 사용이 어려운 경우 다음과 같은 방법을 사용하여 연결이 가능하다. 다만 해당 방법은 VM혹은 원격에서 접근 가능한 서버에 docker engine이 동작한다는 가정이 존재한다.

remote docker engine 작업

docker engine이 동작될 서버에서 다음과 같은 설정을 추가한다.

[root@rocky8-server ~]# cat /etc/docker/daemon.json
{
  "hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]
}

이후 아래와 같이 "-H fd://" 옵션을 execstart에서 제거한다.
(주석처리된 라인이 기존에 존재하던 라인이며 주석이 없는 라인이 변경된 라인이라 보면 된다.)

[root@rocky8-server ~]# cat /lib/systemd/system/docker.service | grep ExecStart
#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecStart=/usr/bin/dockerd --containerd=/run/containerd/containerd.sock

아래와 같이 systemd 를 다시 읽어와 docker를 재시작한다.

[root@rocky8-server ~]# systemctl daemon-reload
[root@rocky8-server ~]# systemctl restart docker

docker가 재시작이 완료되면 다음과 같이 지정한 2375 port로 listen되는것을 확인할 수 있다.

[root@rocky8-server ~]# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      831/sshd
tcp6       0      0 :::22                   :::*                    LISTEN      831/sshd
tcp6       0      0 :::2375                 :::*                    LISTEN      800719/dockerd

참고
물론 방화벽 허용 작업도 필요하다.
만약 RHEL 계열인경우 firewall-cmd 명령으로 아래와 같이 수행해 포트를 open 해준다.

[root@rocky8-server ~]# firewall-cmd --add-port=2375/tcp
success
[root@rocky8-server ~]# firewall-cmd --add-port=2375/tcp --permanent
success

Client 입장에서 docker 명령수행

이제 windows 혹은 원격서버에 접근을 하려는 docker engine이 없는 서버에서 다음과 같은 명령을 수행한다.
(필자는 windows 10에 WSL 1에서 docker-desktop이 없는 환경이라 아래와 같이 WSL 1에서 명령을 수행하였다.)

jacob@dubaekPC:~$ docker -H 192.168.56.9:2375 images
REPOSITORY                  TAG            IMAGE ID       CREATED       SIZE
<none>                      <none>         5fb7a90a25aa   4 days ago    72.8MB
postgres                    10-alpine      26c27c6e4a93   10 days ago   72.8MB
postgres                    10.17-alpine   26c27c6e4a93   10 days ago   72.8MB
quay.io/keycloak/keycloak   13.0.1         3211f97fa4c8   5 weeks ago   698MB

다음과 같이 alias를 등록하여 docker 명령을 좀더 쉽게 사용할 수 있다.

alias docker='docker -H 192.168.56.9:2375'

참고사항
docker build 및 docker run 등의 기본적인 동작은 문제가 없었다.
다만 docker login의 경우 "runtime error: invalid memory address or nil pointer dereference" 에러가 발생되었고
원격 환경이기에 ~/.docker/config.json의 미존재로 인한 이슈로 보여진다.
하여 원격환경에서는 별도의 registry에 login 및 push는 정상동작 안될수 있다.

알아두어야 할 것

docker run -v /host/dir:/container/dir 과 같은 명령은 docker daemon이 동작하는 환경의 host를 기반으로 하기에
docker command를 수행하는 원격의 환경에서는 사용이 불가하다.

'Cloud > Architecture&Tech' 카테고리의 다른 글

how to make a scheduled mysqldump with k8s cronjob  (0) 2020.02.12
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함