소리소문 없이... 사랑도 명예도 이름도 남김 없이...
DexCore.net

Docker

[Docker] 도커 네트워크 명령어 정리

탑~! 2025. 2. 19. 10:21

[참고 사이트]​

- [Docker] Network 명령어 정리

​- [Docker] 도커 네트워크 이해하기

1. 도커 네트워크 명령어 정리

(1) 네트워크 조회

$ docker network ls
  • Docker가 실행되면서 Driver 타입(bridge, host, null) 별로 bridge, host, none 네트워크를 기본 생성한다.
  • 다른 나머지 네트워크는 맥북미니에서 현재 테스트로 생성한 것이다.

(2) 네트워크 생성

$ docker network create my-net

(3) 네트워크 상세 정보

$ docker network inspect my-net [ { "Name": "my-net", "Id": "bc49516c6bdd136d8fdd99141d47fdb8612cc8629e3e087a0f9eb868333aaef0", "Created": "2024-05-04T23:40:41.795429881Z", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "172.22.0.0/16", "Gateway": "172.22.0.1" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": {}, "Options": {}, "Labels": {} } ]

(4) 네트워크 컨테이너 연결

# 실행 중인 컨테이너 연결을 위한 busybox 생성 $ docker run -itd --name=busybox busybox Unable to find image 'busybox:latest' locally latest: Pulling from library/busybox c34182c7a03d: Pull complete Digest: sha256:6776a33c72b3af7582a5b301e3a08186f2c21a3409f0d2b52dfddbdbe24a5b04 Status: Downloaded newer image for busybox:latest 4f2f4cfee6445136666732656bff4bfdb57627f9f69f91370e3488fe59291792 # busybox에 my-net 연결 $ docker network connect my-net busybox # 연결확인 $ docker network inspect my-net | jq '.[0].Containers' { "4f2f4cfee6445136666732656bff4bfdb57627f9f69f91370e3488fe59291792": { "Name": "busybox", "EndpointID": "1cb57652917719b8651691e1347baabff57fe79662a07094de3017cb20e6ef2b", "MacAddress": "02:42:ac:16:00:02", "IPv4Address": "172.22.0.2/16", "IPv6Address": "" } }
  • busybox가 my-net에 정상적으로 연결되었다.
  • busybox는 컨테이너 생성 시 기본 bridge 네트워크에 연결된 상태이다.
  • 이 네트워크에서 busybox를 제거해 보자.

(5) 네트워크 연결 해제

$ docker network disconnect bridge busybox

(6) 네트워크 제거

# 네트워크에 연결된 컨테이너 정지 $ docker stop busybox busybox # 네트워크 삭제 $ docker rm my-net my-net
  • my-net을 제거하기 위해서는 연결된 컨테이너를 정지해야한다.

(7) 네트워크 정리

$ docker network prune WARNING! This will remove all custom networks not used by at least one container. Are you sure you want to continue? [y/N] y Deleted Networks: rocket_default postgres_default aged jenkins-quick-start_default mongodb_default heyform_default
  • 아무 컨테이너도 연결되지 않은 불필요한 네트워크를 한번에 정리할 수 있다.

2. 도커 컨테이너 Port를 외부에 노출

(1) 컨테이너 포트 연결 명령어

$ docker run -p [HOST IP:PORT]:[CONTAINER PORT] [CONTAINER NAME]

-p 옵션 : publish 옵션. 호스트 ip 포트를 Container Port와 매핑시키는 역할을 합니다.

아래의 예제들로 포트연결을 해보겠습니다.

[예제1] nginx 컨테이너의 80번 포트를 호스트의 모든 IP의 80번 포트와 연결하여 실행

$ docker run -d -p 80:80 nginx

위의 명령어는 호스트의 80번 포트와 컨테이너의 80번 포트를 연결합니다.

0.0.0.0:80 -> 80/tcp -> 위의 실행결과에서 Port를 해석하면 모든 호스트 IP의 80번 포트는 컨테이너의 80번 포트로 매핑이 된다는 것을 의미합니다.

curl로 호스트의 80번 포트를 접근해보면 nginx가 출력되는 것을 확인할 수 있습니다.

[예제2] nginx 컨테이너의 80번 포트를 호스트의 사용 가능한 포트와 연결하여 실행

$ docker run -d -p 80 nginx

위의 명령어처럼 80번 포트 하나만 지정을 하면 컨테이너 포트만 지정하는 역할을 합니다.

이렇게 되면, 컨테이너 80번 포트를 호스트의 사용가능한 포트를 랜덤으로 지정하여 연결하게 됩니다.

docker ps로 확인해본 결과 컨테이너의 80번 포트를 호스트의 49153포트로 자동으로 연결이 되었습니다.

마찬가지로 curl localhost:49153로 접근을하면 정상적으로 동작하고 curl localhost:80는 동작하지 않습니다.

[예제3] nginx 컨테이너의 80번 포트를 호스트의 127.0.0.1 IP의 80번 포트와 연결하여 실행

$ docker run -d -p 127.0.0.1:80:80 nginx

위처럼 컨테이너의 IP까지 지정을 해주면 호스트의 해당 IP에 대해서만 포트(여기선 80번 포트)를 매핑하게 됩니다.

 

 

출처 : https://blog.naver.com/islove8587/223441394186

728x90
반응형