June 19, 2019

Docker network - 생성(Create) / 조회(ls)

Docker Network - 명령어 확인해보기.

Docker 컨테이너 끼리 통신 및 네트워크 관리를 위해 옵션을 한번 알아보도록 하겠습니다.

docker network <명령어>




dongdonge@dongdonge$ sudo docker network --help

Usage:  docker network COMMAND

Manage networks

Commands:
  connect     도커 컨테이너를 도커 네트워크에 연결시
  create      도커 네트워크 생성
  disconnect  연결된 도커 컨테이너 네트워크 연결 해제
  inspect     도커 네트워크 상세 정보 확인
  ls          네트워크의 구성 정보를 목록으로 확인
  prune       사용하지 않는 모든 도커 네트워크 제거
  rm          도커 네트워크 제거

Run 'docker network COMMAND --help' for more information on a command.

위 명령을 살펴보면, 7개의 명령어로 구분이 되어 있습니당.




Docker Network ls - 네트워크 구성 정보 확인

Docker Network의 목록을 확인하기 위해 사용할 수 있습니다.

docker network ls <옵션> 또는
docker network list <옵션>




sudo docker network ls --help

Usage:  docker network ls [OPTIONS]

List networks

Aliases:
  ls, list

Options:
  -f, --filter filter   Provide filter values (e.g. 'driver=bridge')
      --format string   Pretty-print networks using a Go template
      --no-trunc        Do not truncate the output
  -q, --quiet           Only display network IDs

1. -f, --filter <필터> : 출력 필터

2. --format <문자열> : 문자 포맷

3. --no-trunc : 출력을 자르지 않는다.

4. -q, --quiet : 네트워크 ID만 출력한다.




dongdonge@dongdonge$ sudo docker network ls

NETWORK ID          NAME                DRIVER              SCOPE
b074e320f8c0        bridge              bridge              local
039243296d3c        host                host                local
d2842d865a78        none                null                local

출력된 결과를 보면 "bridge", "host", "none" 세 개의 네트워크를 확인 할 수 있습니다.

Docker 설치를 하게 되면 기본적으로 위 세 개의 네트워크로 구성되어 있습니다.

또한 컨테이너 생성시 별도로 네트워크를 지정하지 않으면 기본적으로 bridge network로 연결됩니당.




Docker Network create - 네트워크 생성

Docker Network 생성시 사용됩니다.

docker network create <옵션> 네트워크




dongdonge@dongdonge$ sudo docker network create --help

Usage:  docker network create [OPTIONS] NETWORK

Create a network

Options:
      --attachable           Enable manual container attachment
      --aux-address map      Auxiliary IPv4 or IPv6 addresses used by Network driver
                             (default map[])
      --config-from string   The network from which copying the configuration
      --config-only          Create a configuration only network
  -d, --driver string        네트워크 관리하는 드라이브 (default "bridge")
      --gateway strings      IPv4 or IPv6 Gateway for the master subnet
      --ingress              Create swarm routing-mesh network
      --internal             Restrict external access to the network
      --ip-range strings     컨테이너에 IP 할당 범위
      --ipam-driver string   IP Address Management Driver (default "default")
      --ipam-opt map         Set IPAM driver specific options (default map[])
      --ipv6                 Enable IPv6 networking
      --label list           네트워크 메타 데이터 설정
  -o, --opt map              Set driver specific options (default map[])
      --scope string         Control the network's scope
      --subnet strings       CIDR형 네트워크 서브




dongdonge@dongdonge$ sudo docker network create --driver=bridge tmp_network
c605f4737695c19cf851940da010295331ba317186ae88e7e604fe66465b8832

위 명령으로 네트워크는 브릿지 모드를 사용하고, 네트워크명은 "tmp_network"로 지정 하였다.




dongdonge@dongdonge$ sudo docker network ls

NETWORK ID          NAME                DRIVER              SCOPE
b074e320f8c0        bridge              bridge              local
039243296d3c        host                host                local
d2842d865a78        none                null                local
c605f4737695        tmp_network         bridge              local

생성된 Docker Network 리스트를 확인해보면, 방금 생성한 "tmp_network" 이름으로 "c605f4737695" 네트워크 아이디가 할당되었다.




Docker Network Connect - 네트워크 연결

Docker Container를 도커 네트워크에 연결할 때 connect 명령어를 사용합니다.

docker network connect <옵션> 네트워크 컨테이너명




dongdonge@dongdonge$ sudo docker network connect --help

Usage:  docker network connect [OPTIONS] NETWORK CONTAINER

Connect a container to a network

Options:
      --alias strings           컨테이너에 네트워크 별칭 추가
      --ip string               IPv4 설정
      --ip6 string              IPv6 설정
      --link list               다른 컨테이너에 링크 연결
      --link-local-ip strings   컨테이너에 링크 로컬 주소 추가

먼저 컨테이너에 네트워크 연결하기전 Default로 어떤 설정이 되어 있는지 확인후 Connect 해보겠습니당.




dongdonge@dongdonge$ sudo docker inspect dongdonge_tttt
[
     "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "b074e320f8c0c30deffd8af0860a6ef861794f9ae669b12b492984d8962685dc",
                    "EndpointID": "4e8fa41f6d34cfd40c7644e2664166128d82f68470baba2205bffb0f5b33b34e",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }   
]

출력된 결과를 살펴보면, 네트워크 Driver가 "Bridge"로 설정되어 있습니다.




dongdonge@dongdonge$ sudo docker network connect tmp_network dongdonge_tttt

"dongdonge_tttt"라는 컨테이너를 "tmp_network" 도커 네트워크에 연결합니다. 연결 후
동일한 네트워크상에 존재하는 다른 컨테이너와 네트워크 통신을 할 수 있습니다.




dongdonge@dongdonge$ sudo docker inspect dongdonge_tttt

 "DriverOpts": null
                },
                "tmp_network": {
                    "IPAMConfig": {},
                    "Links": null,
                    "Aliases": [
                        "6d0fc332cc2e"
                    ],
                    "NetworkID": "c605f4737695c19cf851940da010295331ba317186ae88e7e604fe66465b8832",
                    "EndpointID": "cd7d8ad691e3060055d9c7ab3c2b6e3d4cdf51994d957bf37332b4788b98c77f",
                    "Gateway": "172.18.0.1",
                    "IPAddress": "172.18.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:12:00:02",
                    "DriverOpts": null
                }
            }

"tmp_network"으로 도커 네트워크에 소속된걸 확인할 수 있습니다.

반면, Docker Container를 생성하면서 네트워크를 변경하고자 한다면 아래 옵션을 추가하시면 됩니다.




dongdonge@dongdonge$  sudo docker run -itd --name=test --net=tmp_network nginx

51921c2ba2e2e2c6c5468bd99789ecdd9dc12e59c3a0d9340a6ee9ff06f35189

Docker run --name으로 "test" 라는 컨테이너명을 생성하고, --net= 옵션으로 네트워크를 방금 생성한 "tmp_network"로 설정합니다. 이미지는 테스트를 위해 "nginx" Docker Image를 기반으로 하였습니다.

생성후 컨테이너를 확인해보면 아래와 같이 "tmp_network"로 설정된걸 볼 수 있습니다.




dongdonge@dongdonge$  sudo docker inspect test

 "Networks": {
                "tmp_network": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": [
                        "51921c2ba2e2"
                    ],
                    "NetworkID": "c605f4737695c19cf851940da010295331ba317186ae88e7e604fe66465b8832",
                    "EndpointID": "a972048f96c9f73204ba93b505c37a9c348e61445221bc7c0934a3ade5968ce7",
                    "Gateway": "172.18.0.1",
                    "IPAddress": "172.18.0.3",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:12:00:03",
                    "DriverOpts": null
                }
            }

마찬가지로 해당 컨테이너가 "tmp_network"로 연결된걸 확인할 수 있습니다.




Docker Network Disconnect - 연결 해제

Docker 네트워크 연결 해제시 disconnect 명령어를 사용하여 네트워크 연결을 해제합니다.

docker network disconnect <옵션> 네트워크명 컨테이너명




dongdonge@dongdonge$ sudo docker network disconnect --help

Usage:  docker network disconnect [OPTIONS] NETWORK CONTAINER

Disconnect a container from a network

Options:
  -f, --force   네크워크 연결된 컨테이너 강제로 연결 해제




dongdonge@dongdonge$ sudo docker network disconnect tmp_network test

위 명령어 처럼 disconnect를 입력한다면 정상적으로 도커 컨테이너가 네트워크 연결을 해제 합니다.




Docker Network Inspect - 네트워크 상세 정보 표시

Docker Network의 상세 정보 및 연결된 컨테이너 정보를 확인할 때 사용됩니다.

docker network inspect <옵션> 네트워크명




dongdonge@dongdonge$ sudo docker network inspect --help

Usage:  docker network inspect [OPTIONS] NETWORK [NETWORK...]

Display detailed information on one or more networks

Options:
  -f, --format string   Format the output using the given Go template
  -v, --verbose         Verbose output for diagnostics




dongdonge@dongdonge$ sudo docker network inspect tmp_network

[
    {
        "Name": "tmp_network",
        "Id": "c605f4737695c19cf851940da010295331ba317186ae88e7e604fe66465b8832",
        "Created": "2019-07-01T01:57:51.540146281+09:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "6d0fc332cc2e55ac81a325950317864c361ec22cf6bebd2108a0c544a0366b37": {
                "Name": "dongdonge_tttt",
                "EndpointID": "cd7d8ad691e3060055d9c7ab3c2b6e3d4cdf51994d957bf37332b4788b98c77f",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

"tmp_network" Docker Network의 상세 정보를 확인할 수 있다.
해당 네트워크의 Driver명, 네트워크 대역, 현재 네트워크에 연결된 도커명, 연결된 아이피 정보 등등 알 수 있습니다.




만약 Docker Network를 삭제 한다면 아래 명령어를 입력하시면 됩니다.

dongdonge@dongdonge$ sudo docker network rm tmp_network

tmp_network

docker network rm <네트워크명>

만약 제거가 되지 않는다면, 해당 네트워크에 연결된 컨테이너를 해제해야 합니다.