docker network connect 명령어를 사용하여 컨테이너 네트워크 관리 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker network connect 명령어를 사용하여 컨테이너 네트워크를 효과적으로 관리하는 방법을 배우게 됩니다. 실행 중인 컨테이너를 기존 네트워크에 연결하고, 컨테이너를 초기 시작 시 네트워크에 연결하며, 네트워크에서 컨테이너에 고정 IP 주소를 지정하고, 컨테이너에 대한 네트워크 별칭을 생성하여 더 쉬운 통신을 가능하게 하는 방법을 살펴볼 것입니다.

실습을 통해 컨테이너 네트워크 구성을 조작하는 실질적인 경험을 얻어, 더 강력하고 상호 연결된 Dockerized 애플리케이션을 구축할 수 있습니다.

실행 중인 컨테이너를 네트워크에 연결

이 단계에서는 실행 중인 Docker 컨테이너를 기존 네트워크에 연결하는 방법을 배우게 됩니다. 이는 이미 실행 중인 컨테이너가 있고 특정 네트워크의 다른 컨테이너 또는 서비스와 통신해야 할 때 유용합니다.

먼저, 이 데모에 사용할 새 네트워크를 생성해 보겠습니다. my-network라는 이름의 브리지 네트워크를 생성합니다.

docker network create my-network

네트워크가 성공적으로 생성되었음을 나타내는 다음과 유사한 출력을 볼 수 있습니다.

<network_id>

이제, 처음에는 my-network에 연결되지 않은 간단한 컨테이너를 실행해 보겠습니다. detached 모드 (-d) 로 alpine 컨테이너를 실행하고 이름을 my-container로 지정합니다.

docker run -d --name my-container alpine sleep infinity

출력은 컨테이너 ID 가 됩니다.

<container_id>

컨테이너가 실행 중이고 my-network에 연결되지 않았는지 확인하려면 컨테이너의 네트워크 설정을 검사할 수 있습니다.

docker inspect my-container --format '{{json .NetworkSettings.Networks}}'

출력은 기본 브리지 네트워크를 표시하지만 my-network는 표시하지 않습니다.

{
  "bridge": {
    "IPAMData": null,
    "IPAddress": "<ip_address>",
    "IPPrefixLen": 16,
    "IPv6Gateway": "",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "MacAddress": "<mac_address>",
    "DriverOpts": null
  }
}

이제 docker network connect 명령어를 사용하여 실행 중인 my-containermy-network에 연결해 보겠습니다.

docker network connect my-network my-container

명령이 성공하면 출력이 없습니다.

컨테이너가 이제 my-network에 연결되었는지 확인하려면 컨테이너의 네트워크 설정을 다시 검사합니다.

docker inspect my-container --format '{{json .NetworkSettings.Networks}}'

이번에는 출력에 기본 브리지 네트워크와 my-network가 모두 표시되어야 합니다.

{
  "bridge": {
    "IPAMData": null,
    "IPAddress": "<ip_address>",
    "IPPrefixLen": 16,
    "IPv6Gateway": "",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "MacAddress": "<mac_address>",
    "DriverOpts": null
  },
  "my-network": {
    "IPAMData": null,
    "IPAddress": "<ip_address>",
    "IPPrefixLen": 24,
    "IPv6Gateway": "",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "MacAddress": "<mac_address>",
    "DriverOpts": null
  }
}

마지막으로, 생성한 컨테이너와 네트워크를 정리해 보겠습니다.

docker stop my-container
docker rm my-container
docker network rm my-network

컨테이너 시작 시 네트워크에 연결

이 단계에서는 Docker 컨테이너를 시작할 때 특정 네트워크에 연결하는 방법을 배우게 됩니다. 이는 컨테이너가 처음부터 올바른 네트워크에 있는지 확인하는 가장 일반적인 방법입니다.

먼저, 사용할 app-network라는 새 네트워크를 생성해 보겠습니다.

docker network create app-network

네트워크가 성공적으로 생성되었음을 나타내는 다음과 유사한 출력을 볼 수 있습니다.

<network_id>

이제 간단한 nginx 컨테이너를 실행하고 시작할 때 직접 app-network에 연결합니다. --network 플래그를 사용하고 그 뒤에 네트워크 이름을 지정합니다. 또한 detached 모드 (-d) 로 실행하고 이름을 web-server로 지정합니다.

docker run -d --name web-server --network app-network nginx

출력은 컨테이너 ID 가 됩니다.

<container_id>

컨테이너가 app-network에 연결되었는지 확인하려면 컨테이너의 네트워크 설정을 검사할 수 있습니다.

docker inspect web-server --format '{{json .NetworkSettings.Networks}}'

출력은 컨테이너가 app-network에 연결되어 있음을 보여야 합니다.

{
  "app-network": {
    "IPAMData": null,
    "IPAddress": "<ip_address>",
    "IPPrefixLen": 24,
    "IPv6Gateway": "",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "MacAddress": "<mac_address>",
    "DriverOpts": null
  }
}

이번에는 docker run 명령 중에 네트워크를 지정했기 때문에 컨테이너가 기본 브리지 네트워크가 아닌 app-network에만 연결되어 있음을 알 수 있습니다.

마지막으로, 컨테이너와 네트워크를 정리해 보겠습니다.

docker stop web-server
docker rm web-server
docker network rm app-network

컨테이너에 네트워크 IP 주소 할당

이 단계에서는 컨테이너를 네트워크에 연결할 때 특정 고정 IP 주소를 할당하는 방법을 배우게 됩니다. 기본적으로 Docker 는 네트워크의 서브넷에서 IP 주소를 동적으로 할당합니다. 그러나 경우에 따라 컨테이너가 예측 가능한 IP 주소를 갖도록 해야 할 수 있습니다.

먼저, 지정된 서브넷으로 새 네트워크를 생성해 보겠습니다. 서브넷 172.20.0.0/16을 사용하여 static-net이라는 브리지 네트워크를 생성합니다.

docker network create --subnet 172.20.0.0/16 static-net

네트워크가 성공적으로 생성되었음을 나타내는 다음과 유사한 출력을 볼 수 있습니다.

<network_id>

이제 alpine 컨테이너를 실행하고 --ip 플래그를 사용하여 고정 IP 주소를 지정하여 static-net에 연결합니다. IP 주소 172.20.0.10을 할당합니다. detached 모드 (-d) 로 실행하고 이름을 static-ip-container로 지정합니다.

docker run -d --name static-ip-container --network static-net --ip 172.20.0.10 alpine sleep infinity

출력은 컨테이너 ID 가 됩니다.

<container_id>

컨테이너가 static-net에서 할당된 고정 IP 주소를 갖는지 확인하려면 컨테이너의 네트워크 설정을 검사합니다.

docker inspect static-ip-container --format '{{json .NetworkSettings.Networks}}'

출력은 지정된 IP 주소로 static-net에 연결된 컨테이너를 표시해야 합니다.

{
  "static-net": {
    "IPAMData": null,
    "IPAddress": "172.20.0.10",
    "IPPrefixLen": 16,
    "IPv6Gateway": "",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "MacAddress": "<mac_address>",
    "DriverOpts": null
  }
}

마지막으로, 컨테이너와 네트워크를 정리해 보겠습니다.

docker stop static-ip-container
docker rm static-ip-container
docker network rm static-net

컨테이너 네트워크 별칭 생성

이 단계에서는 컨테이너에 대한 네트워크 별칭을 생성하는 방법을 배우게 됩니다. 네트워크 별칭은 동일한 네트워크의 다른 컨테이너가 컨테이너를 확인하고 연결하는 데 사용할 수 있는 대체 이름을 제공합니다. 이는 Docker 네트워크 내에서 서비스 검색에 유용합니다.

먼저, alias-network라는 새 네트워크를 생성해 보겠습니다.

docker network create alias-network

네트워크가 성공적으로 생성되었음을 나타내는 다음과 유사한 출력을 볼 수 있습니다.

<network_id>

이제 nginx 컨테이너를 실행하고 --network-alias 플래그를 사용하여 네트워크 별칭을 할당하여 alias-network에 연결합니다. 별칭 web을 할당합니다. detached 모드 (-d) 로 실행하고 이름을 alias-container로 지정합니다.

docker run -d --name alias-container --network alias-network --network-alias web nginx

출력은 컨테이너 ID 가 됩니다.

<container_id>

컨테이너에 네트워크 별칭이 있는지 확인하려면 컨테이너의 네트워크 설정을 검사합니다.

docker inspect alias-container --format '{{json .NetworkSettings.Networks}}'

출력은 alias-network에 연결된 컨테이너를 표시하고 네트워크 별칭을 나열해야 합니다.

{
  "alias-network": {
    "IPAMData": null,
    "IPAddress": "<ip_address>",
    "IPPrefixLen": 24,
    "IPv6Gateway": "",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "MacAddress": "<mac_address>",
    "Aliases": ["web", "alias-container"],
    "DriverOpts": null
  }
}

출력에서 "Aliases":["web","alias-container"] 부분을 확인하십시오. Docker 는 컨테이너 이름도 별칭으로 자동 추가합니다.

이제 동일한 네트워크에서 다른 컨테이너를 실행하고 네트워크 별칭 web을 사용하여 alias-container에 ping 을 시도해 보겠습니다. alias-network에서 대화형으로 (-it) alpine 컨테이너를 실행합니다.

docker run -it --rm --network alias-network alpine ping -c 3 web

별칭 web을 사용하여 alias-container에 대한 ping 이 성공했음을 나타내는 출력을 볼 수 있습니다.

PING web (<ip_address>): 56 data bytes
64 bytes from <ip_address>: seq=0 ttl=64 time=0.xxx ms
64 bytes from <ip_address>: seq=1 ttl=64 time=0.xxx ms
64 bytes from <ip_address>: seq=2 ttl=64 time=0.xxx ms

--- web ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.xxx/0.xxx/0.xxx/0.xxx ms

이는 동일한 네트워크의 컨테이너가 네트워크 별칭을 사용하여 서로 확인하고 통신할 수 있음을 보여줍니다.

마지막으로, 컨테이너와 네트워크를 정리해 보겠습니다.

docker stop alias-container
docker rm alias-container
docker network rm alias-network

요약

이 랩에서는 docker network connect 명령을 사용하여 Docker 컨테이너 네트워크를 관리하는 방법을 배웠습니다. 실행 중인 컨테이너를 기존 네트워크에 연결하는 연습을 통해 컨테이너가 시작된 후 동적으로 네트워크 연결을 추가하는 방법을 시연했습니다.

또한 컨테이너를 생성할 때 특정 네트워크에 연결하고, 네트워크에서 컨테이너에 대한 고정 IP 주소를 지정하고, 네트워크 내에서 컨테이너에 대한 대체 이름을 제공하여 컨테이너 간의 검색 가능성과 통신을 향상시키는 네트워크 별칭을 생성하는 방법을 살펴보았습니다.