Docker 컨테이너 네트워킹 설정 방법

DockerBeginner
지금 연습하기

소개

Docker 는 애플리케이션을 컨테이너화하는 데 널리 사용되는 기술이 되었지만, Docker 컨테이너의 네트워킹 측면을 관리하는 것은 중요하지만 동시에 복잡한 작업일 수 있습니다. 이 튜토리얼에서는 Docker 네트워크의 기본 사항, 네트워크 드라이버 설정 및 컨테이너를 호스트에 연결하는 과정을 안내합니다.

Docker 네트워크 기본

Docker 네트워크 이해

Docker 는 컨테이너의 네트워킹을 구성할 수 있도록 여러 유형의 네트워크 드라이버를 제공합니다. 기본 네트워크 드라이버는 bridge 드라이버이며, 호스트 머신에 가상 브리지를 생성하고 각 컨테이너를 연결합니다. 이를 통해 컨테이너는 서로 그리고 호스트 머신과 통신할 수 있습니다.

graph LR Host -- Network Bridge --> Container1 Host -- Network Bridge --> Container2 Container1 -- Network Bridge --> Container2

bridge 드라이버 외에도 Docker 는 host, overlay, macvlan, none 등 다른 네트워크 드라이버를 지원합니다. 각 드라이버는 고유한 용도와 특징을 가지고 있으며, 다음 섹션에서 자세히 살펴보겠습니다.

네트워크 드라이버 유형

  1. Bridge: 호스트 머신에 가상 브리지를 생성하고 컨테이너를 연결하는 기본 네트워크 드라이버입니다.
  2. Host: 컨테이너가 호스트의 네트워크 스택을 직접 사용할 수 있도록 하여 가상 네트워크를 우회합니다.
  3. Overlay: 여러 Docker 호스트 간의 컨테이너 간 통신을 가능하게 하여 분산 네트워크를 생성합니다.
  4. Macvlan: 컨테이너에 MAC 주소를 할당하여 네트워크에서 물리적 장치로 나타나도록 합니다.
  5. None: 컨테이너의 네트워킹을 비활성화하여 네트워크에서 분리합니다.

각 네트워크 드라이버는 고유한 장점과 용도를 가지고 있습니다. 예를 들어, host 드라이버는 성능에 민감한 애플리케이션에 유용하며, overlay 드라이버는 여러 호스트에 걸쳐 분산 애플리케이션을 구축하는 데 필수적입니다.

graph LR Host -- Bridge --> Container1 Host -- Host --> Container2 Host1 -- Overlay --> Container3 Host2 -- Overlay --> Container4 Host -- Macvlan --> Container5 Host -- None --> Container6

다양한 네트워크 드라이버와 그 용도를 이해하는 것은 Docker 환경에서 네트워킹을 구성하는 데 중요합니다.

네트워크 드라이버 설정

Bridge 네트워크 설정

bridge 네트워크는 Docker 의 기본 네트워크 드라이버입니다. 새 bridge 네트워크를 생성하려면 다음 명령어를 사용할 수 있습니다.

docker network create my-bridge-network

그런 다음 --network 플래그를 사용하여 새 bridge 네트워크에 컨테이너를 연결할 수 있습니다.

docker run -d --name my-container --network my-bridge-network nginx

같은 bridge 네트워크에 있는 컨테이너는 컨테이너 이름 또는 컨테이너의 IP 주소를 사용하여 서로 통신할 수 있습니다.

Host 네트워크 설정

host 네트워크 드라이버를 사용하려면 --network host 플래그를 사용하여 컨테이너를 시작할 수 있습니다.

docker run -d --name my-host-container --network host nginx

host 네트워크를 사용하면 컨테이너가 호스트의 네트워크 스택을 공유하여 호스트의 네트워크 인터페이스와 포트에 직접 액세스할 수 있습니다.

Overlay 네트워크 설정

Overlay 네트워크를 생성하려면 먼저 Docker Swarm 클러스터를 초기화해야 합니다. Swarm 이 설정되면 다음 명령어로 Overlay 네트워크를 생성할 수 있습니다.

docker network create --driver overlay my-overlay-network

컨테이너는 bridge 네트워크와 마찬가지로 --network 플래그를 사용하여 Overlay 네트워크에 연결할 수 있습니다.

docker run -d --name my-overlay-container --network my-overlay-network nginx

Overlay 네트워크는 여러 Docker 호스트에 걸쳐 컨테이너 간의 통신을 가능하게 합니다.

Macvlan 네트워크 설정

macvlan 네트워크 드라이버를 사용하려면 호스트의 부모 인터페이스를 지정해야 합니다. 다음 명령어로 새 macvlan 네트워크를 생성할 수 있습니다.

docker network create -d macvlan --subnet=172.16.86.0/24 --gateway=172.16.86.1 -o parent=eth0 my-macvlan-network

컨테이너는 --network 플래그를 사용하여 macvlan 네트워크에 연결할 수 있습니다.

docker run -d --name my-macvlan-container --network my-macvlan-network nginx

Macvlan 네트워크는 컨테이너가 고유한 MAC 주소를 가질 수 있도록 하여 네트워크에서 물리적 장치로 나타나도록 합니다.

이러한 다양한 네트워크 드라이버를 설정하는 방법을 이해함으로써 Docker 기반 애플리케이션에 가장 적합한 솔루션을 선택할 수 있습니다.

컨테이너 및 호스트 연결

컨테이너 포트 노출

컨테이너 내부에서 실행 중인 서비스에 외부 액세스를 허용하려면 컨테이너의 포트를 노출해야 합니다. 컨테이너를 시작할 때 -p 또는 --publish 플래그를 사용하여 이 작업을 수행할 수 있습니다.

docker run -d -p 80:80 --name my-web-server nginx

위의 예제에서 호스트 머신의 포트 80 은 컨테이너 내부의 포트 80 으로 매핑됩니다. 이를 통해 클라이언트는 컨테이너 내에서 실행 중인 Nginx 웹 서버에 액세스할 수 있습니다.

컨테이너 연결

--link 플래그를 사용하여 컨테이너를 서로 연결할 수도 있습니다. 이렇게 하면 한 컨테이너가 다른 컨테이너의 환경 변수와 네트워크 정보에 액세스할 수 있습니다.

docker run -d --name my-db-server mysql
docker run -d --name my-app-server --link my-db-server:db nginx

이 예제에서 my-app-server 컨테이너는 별칭 db를 사용하여 my-db-server 컨테이너에 액세스할 수 있습니다.

Docker Compose 사용

Docker Compose 는 다중 컨테이너 애플리케이션을 정의하고 실행하는 프로세스를 단순화하는 도구입니다. Compose 를 사용하여 YAML 파일에서 네트워크 구성 및 컨테이너 관계를 정의할 수 있습니다.

다음은 docker-compose.yml 파일의 예입니다.

version: "3"
services:
  web:
    image: nginx
    ports:
      - "80:80"
    networks:
      - my-network
  db:
    image: mysql
    networks:
      - my-network
networks:
  my-network:
    driver: bridge

이 예제에서 webdb 서비스는 my-network bridge 네트워크에 연결되어 서로 통신할 수 있습니다.

컨테이너 포트를 노출하고, 컨테이너를 연결하고, Docker Compose 를 사용하는 방법을 이해함으로써 복잡하고 분산된 애플리케이션을 구축하기 위해 컨테이너와 호스트를 효과적으로 연결할 수 있습니다.

요약

이 튜토리얼을 마치면 Docker 네트워킹에 대한 포괄적인 이해를 얻고 컨테이너의 네트워크 설정을 효과적으로 구성할 수 있게 됩니다. 다양한 네트워크 드라이버를 활용하고 컨테이너를 호스트에 연결하며 Docker 기반 애플리케이션의 전체 네트워크 성능을 최적화하는 방법을 배우게 될 것입니다.