사용자 정의 Docker 네트워크에 컨테이너 연결 방법

DockerBeginner
지금 연습하기

소개

Docker 는 애플리케이션을 컨테이너화하는 강력한 도구이지만, 컨테이너 간 네트워크 연결을 관리하는 것은 어려울 수 있습니다. 이 튜토리얼에서는 사용자 정의 Docker 네트워크를 생성하고 컨테이너를 이 네트워크에 연결하여 안전하고 효율적으로 통신할 수 있도록 하는 방법을 배웁니다.

Docker 네트워크 소개

Docker 네트워크는 Docker 생태계의 필수적인 구성 요소로, 컨테이너가 서로 그리고 외부 세계와 통신할 수 있도록 합니다. Docker 의 맥락에서 네트워크는 컨테이너가 연결하고 데이터를 교환할 수 있도록 하는 가상 네트워크입니다. Docker 는 각각 고유한 기능과 사용 사례를 갖는 여러 내장 네트워크 드라이버를 제공합니다.

가장 일반적으로 사용되는 Docker 네트워크 드라이버는 다음과 같습니다.

  1. Bridge 네트워크: Docker 의 기본 네트워크 드라이버로, 호스트 머신에 가상 브리지를 생성하여 컨테이너가 서로 그리고 호스트와 통신할 수 있도록 합니다.
  2. Host 네트워크: 이 네트워크 모드는 컨테이너가 호스트의 네트워크 스택을 사용할 수 있도록 하여 컨테이너와 호스트 간의 네트워크 분리를 제거합니다.
  3. Overlay 네트워크: 이 네트워크 드라이버는 멀티 호스트 네트워킹에 사용되며, 다른 Docker 호스트에서 실행되는 컨테이너가 서로 통신할 수 있도록 합니다.
  4. Macvlan 네트워크: 이 네트워크 드라이버는 컨테이너에 MAC 주소를 할당하여 네트워크에서 물리적 장치로 나타나도록 합니다.

이러한 네트워크 드라이버와 그들의 사용 사례를 이해하는 것은 Docker 환경에서 컨테이너를 효과적으로 관리하고 연결하는 데 필수적입니다.

graph LR
    A[Docker 호스트] --> B[Bridge 네트워크]
    B --> C[컨테이너 1]
    B --> D[컨테이너 2]
    B --> E[컨테이너 3]

표 1: 일반적인 Docker 네트워크 드라이버

드라이버 설명
Bridge 호스트 머신에 가상 브리지를 생성하는 기본 네트워크 드라이버입니다.
Host 컨테이너가 호스트의 네트워크 스택을 사용할 수 있도록 하여 네트워크 분리를 제거합니다.
Overlay 다른 Docker 호스트에서 실행되는 컨테이너가 통신할 수 있도록 멀티 호스트 네트워킹을 가능하게 합니다.
Macvlan 컨테이너에 MAC 주소를 할당하여 네트워크에서 물리적 장치로 나타나도록 합니다.

다양한 네트워크 드라이버와 그들의 사용 사례를 이해함으로써 Docker 환경에서 컨테이너를 효과적으로 연결하고 관리할 수 있습니다.

사용자 정의 Docker 네트워크 생성

Docker 에서 제공하는 기본 네트워크 드라이버 외에도, 특정 요구 사항에 맞는 사용자 정의 Docker 네트워크를 생성할 수 있습니다. 사용자 정의 네트워크를 생성하면 컨테이너 간의 네트워크 구성 및 분리에 대한 더 많은 제어권을 확보할 수 있습니다.

사용자 정의 Bridge 네트워크 생성

사용자 정의 Bridge 네트워크를 생성하려면 docker network create 명령어를 사용할 수 있습니다. 다음은 예시입니다.

docker network create my-custom-network

이 명령어는 my-custom-network라는 새 Bridge 네트워크를 생성합니다. 그런 다음 docker network inspect 명령어를 사용하여 네트워크를 검사할 수 있습니다.

docker network inspect my-custom-network

출력 결과에는 네트워크에 대한 세부 정보 (예: 서브넷, 게이트웨이, 네트워크에 연결된 컨테이너 목록) 가 포함됩니다.

사용자 정의 Bridge 네트워크 구성

사용자 정의 Bridge 네트워크를 생성할 때 서브넷 및 게이트웨이와 같은 추가 구성 옵션을 지정할 수도 있습니다. 다음은 예시입니다.

docker network create --subnet 172.18.0.0/16 --gateway 172.18.0.1 my-custom-network

이 명령어는 172.18.0.0/16의 서브넷과 172.18.0.1의 게이트웨이를 가진 사용자 정의 Bridge 네트워크를 생성합니다.

컨테이너를 사용자 정의 네트워크에 연결

사용자 정의 네트워크를 생성한 후에는 새 컨테이너를 시작할 때 --network 옵션을 사용하여 컨테이너를 연결할 수 있습니다. 다음은 예시입니다.

docker run -d --name my-app --network my-custom-network nginx

이 명령어는 새로운 Nginx 컨테이너를 시작하고 my-custom-network 사용자 정의 네트워크에 연결합니다.

사용자 정의 Docker 네트워크를 생성하고 사용함으로써 컨테이너의 분리 및 보안을 개선하고 네트워크 관련 작업의 관리를 간소화할 수 있습니다.

사용자 정의 네트워크에 컨테이너 연결

이제 사용자 정의 Docker 네트워크를 생성했으므로 컨테이너를 연결하는 방법을 살펴보겠습니다.

컨테이너 생성 시 연결

새 컨테이너를 시작할 때 --network 옵션을 사용하여 연결할 네트워크를 지정할 수 있습니다. 다음은 예시입니다.

docker run -d --name my-app --network my-custom-network nginx

이 명령어는 새로운 Nginx 컨테이너를 시작하고 my-custom-network 사용자 정의 네트워크에 연결합니다.

기존 컨테이너 연결

docker network connect 명령어를 사용하여 기존 컨테이너를 사용자 정의 네트워크에 연결할 수도 있습니다. 다음은 예시입니다.

docker run -d --name my-db mysql
docker network connect my-custom-network my-db

이 명령어는 먼저 새로운 MySQL 컨테이너를 시작한 다음 my-db 컨테이너를 my-custom-network 사용자 정의 네트워크에 연결합니다.

컨테이너 연결 확인

컨테이너가 사용자 정의 네트워크에 연결되었는지 확인하려면 docker network inspect 명령어를 사용할 수 있습니다.

docker network inspect my-custom-network

출력 결과에는 네트워크에 연결된 컨테이너 목록과 사용자 정의 네트워크 내의 IP 주소가 표시됩니다.

컨테이너 간 연결을 테스트하려면 사용자 정의 네트워크 내의 컨테이너 이름 또는 IP 주소를 사용할 수 있습니다. 예를 들어, 한 컨테이너에서 다른 컨테이너에 ping을 보낼 수 있습니다.

docker exec my-app ping my-db

이 명령어는 컨테이너 이름을 호스트 이름으로 사용하여 my-app 컨테이너에서 my-db 컨테이너에 ping을 보냅니다.

컨테이너를 사용자 정의 Docker 네트워크에 연결하면 애플리케이션의 분리 및 보안을 개선하고 네트워크 관련 작업의 관리를 간소화할 수 있습니다.

요약

이 튜토리얼을 마치면 사용자 정의 Docker 네트워크를 생성하고 컨테이너를 연결하는 방법에 대한 확실한 이해를 얻게 될 것입니다. 이 지식은 컨테이너가 서로 그리고 외부 서비스와 쉽게 통신할 수 있는 더욱 강력하고 확장 가능한 Docker 기반 애플리케이션을 구축하는 데 도움이 될 것입니다.