[docker] docker 네트워크 - 네트워크 드라이버 (2)

업데이트:     Updated:

카테고리:

태그:

🎯네트워크 드라이버 종류

  • bridge
  • overlay
  • host
  • Macvlan
  • none

이번 포스트에서는 이 중에서 bridgeoverlay 네트워크 드라이버에 대해 중점적으로 다룰 것이다.

🔖브리지 네트워크

  • 동일한 브리지 네트워크에 연결된 컨테이너간에는 통신할 수 있지만 다른 네트워크에 연결된 컨테이너와는 격리된 환경을 제공합니다.
  • 브리지 네트워크는 동일한 Docker 호스트에서 실행되는 컨테이너에 적용됩니다. 서로 다른 Docker 호스트에서 실행되는 컨테이너와 통신을 하기 위해서는 OS 수준에서 라우팅을 추가하거나 Overlay 네트워크를 사용하는 방법이 있습니다.
  • Docker를 시작하면 기본 브리지 네트워크(bridge)가 자동으로 생성되고 별도로 지정하지 않는 한 새로 시작되는 컨테이너는 여기에 연결됩니다. 기본 브리지 대신 사용자 정의 브리지 네트워크도 생성이 가능한 데 이것은 기본 브리지 네트워크보다 다방면에서 우수한 기능을 제공합니다.

사용자 정의 브리지와 기본 브리지의 차이


  1. 사용자 정의 브리지는 컨테이너 간에 자동 DNS 확인을 제공합니다.
    • --link 옵션을 사용하지 않는 한 기본 브리지 네트워크에 연결된 컨테이너는 IP 주소로만 서로 액세스할 수 있습니다. 이에 반해 사용자 정의 브리지 네트워크에 연결된 컨테이너 간에는 컨테이너 이름 또는 별칭으로 액세스할 수 있습니다.
  2. 사용자 정의 브리지는 더 나은 격리를 제공합니다.
    • --network 옵션이 지정되지 않은 모든 컨테이너는 기본 브리지 네트워크에 연결됩니다. 그러면 관련이 없는 컨테이너 간에 액세스가 가능하므로 위험할 수 있습니다.
    • 사용자 정의 네트워크를 사용하면 해당 네트워크에 연결된 컨테이너만 통신할 수 있는 범위가 지정된 네트워크가 제공됩니다.
  3. 컨테이너는 사용자 정의 네트워크에 즉시 연결하거나 분리할 수 있습니다.
    • 컨테이너 실행 동안 사용자 정의 브리지는 즉시 연결하거나 연결을 끊을 수 있습니다. 반면 기본 브리지 네트워크에서 컨테이너 연결을 끊으려면 컨테이너를 중지하고 다른 네트워크 옵션으로 다시 만들어야 합니다.
  4. 각 사용자 정의 브리지는 다른 네트워크와 분리된 새로운 네트워크 환경을 구성합니다.
    • 컨테이너가 기본 브리지 네트워크를 사용하는 경우 모든 컨테이너는 동일한 MTU 및 iptables 규칙을 사용합니다. (참고) 기본 네트워크 구성 변경
    • 사용자 정의 브리지 네트워크는 docker network create를 사용하여 구성합니다. 서로 다른 애플리케이션 그룹에 서로 다른 네트워크 요구 사항이 있는 경우 각 사용자 정의 브리지를 생성할 때 개별적으로 구성할 수 있습니다.
  5. 기본 브리지 네트워크에 연결된 컨테이너는 환경 변수를 공유합니다.
    • 원래 환경 변수를 공유하는 유일한 방법은 --link플래그를 사용하여 연결하는 것이었습니다. 이러한 유형의 변수 공유는 사용자 정의 네트워크에서는 불가능합니다. 그러나 환경 변수를 공유하는 더 좋은 방법이 있습니다.
    • Docker 볼륨을 사용하여 공유 정보가 포함된 파일 탑재
    • docker-compose 작성 파일에 공유 변수를 정의
    • Swarm 서비스를 사용하고 screat, config 활용

Note:

동일한 사용자 정의 브리지 네트워크 연결된 컨테이너 간에는 모든 포트에 기본적으로 액세스가 가능합니다. 다른 네트워크의 컨테이너 또는 다른 Docker 호스트에서 포트에 액세스하려면 -p, --publish 플래그를 통해 포트를 게시해야 합니다.

사용자 정의 브리지 관리


생성

  • docker network create를 통해 사용자 정의 브리지 네트워크를 만들 수 있습니다.
$ docker network create my_bridge
  • 서브넷, IP 주소범위, 게이트웨이 및 기타 옵션을 지정할 수 있습니다. 자세한 내용은 여기를 참고하세요.

삭제

  • docker network rm 명령을 통해 사용자 정의 브리지 네트워크를 삭제할 수 있습니다. 컨테이너에 현재 네트워크가 연결된 상태라면 먼저 연결을 끊어야 합니다.
$ docker network rm my_bridge

컨테이너를 사용자 정의 브리지에 연결


새 컨테이너를 생성하면서 연결

  • 새 컨테이너를 생성할 때 하나 이상의 --network 플래그를 지정할 수 있습니다. 다음 예제는 Nginx 컨테이너를 my-bridge 네트워크에 연결합니다.
$ docker create --name my-nginx \
  --network my-bridbe \
  --publish 8080:80 \
  nginx:latest

실행 중인 컨테이너에 연결

  • 실행 중인 컨테이너를 기존 사용자 정의 브리지에 연결하려면 docker network connect 명령을 사용합니다. 다음 예제는 이미 실행 중인 my-nginx 컨테이너를 my-bridge 네트워크에 연결합니다.
$ docker network connect my-bridge my-nginx

실행 중인 컨테이너에서 연결 해제

  • 실행 중인 컨테이너에서 사용자 정의 브리지 연결을 끊으려면 docker network disconnect 명령을 사용합니다. 다음 예제는 my-nginx 컨테이너에서 my-bridge 네트워크 연결을 해제합니다.
$ docker network disconnect my-bridge my-nginx

Docker 컨테이너에서 인터넷 연결


기본적으로 기본 브리지 네트워크에 연결된 컨테이너의 트래픽은 외부로 전달되지 않습니다. 전달을 활성화하려면 두 가지 설정을 변경해야 합니다. 이는 Docker 명령이 아니며 Docker 호스트의 커널에 영햘을 미칩니다.

IP Forwarding 활성화

$ sysctl net.ipv4.conf.all.forwarding=1

iptables FORWARD 체인 기본 정책 변경 (DROP -> ACCEPT)

$ suod iptables -P FORWARD ACCEPT

이러한 설정은 재부팅 후 유지되지 않으므로 시작 스크립트에 추가해야 합니다.

기본 브리지 네트워크 구성


기본 bridge 네트워크를 구성하려면 daemon.json에서 옵션을 지정해야 합니다. 다음은 여러 옵션이 지정된 예입니다.

{
  "bip": "192.168.1.1/24",
  "fixed-cidr": "192.168.1.0/25",
  "fixed-cidr-v6": "2001:db8::/64",
  "mtu": 1500,
  "default-gateway": "192.168.1.254",
  "default-gateway-v6": "2001:db8:abcd::89",
  "dns": ["10.20.1.2","10.20.1.3"]
}

변경 사항을 적용하려면 Docker를 다시 시작합니다.

🔖오버레이 네트워크

  • overlay 네트워크 드라이버는 여러 Docker 데몬 호스트 간에 분산 네트워크를 생성합니다.
  • Swarm을 init 하거나 Docker 호스트를 기존 Swarm에 가입시키면 해당 Docker 호스트에는 두 개의 새 네트워크가 생성됩니다.
    • ingress: 스웜 서비스와 관련된 제어 및 데이터 트래픽 처리를 하는 오버레이 네트워크, Swarm을 생성하고 사용자 정의 오버레이 네트워크에 연결하지 않으면 기본적으로 ingress 네트워크에 연결됨.
    • docker-gwbridge: 개별 Docker 데몬을 Swarm에 참여하는 다른 데몬에 연결하는 브리지 네트워크
  • 사용자 정의 bridge 네트워크를 만드는 것과 같은 방식으로 사용자 정의 overlay 네트워크를 만들 수 있습니다.
  • 서비스 또는 컨테이너는 한 번에 둘 이상의 네트워크에 연결할 수 있으며 각각은 연결된 네트워크를 통해서만 통신할 수 있습니다.

독립 실행형(스웜X) 컨테이너를 오버레이 네트워크에 연결

  • attachable 플래그로 생성된 사용자 정의 오버레이 네트워크에는 스웜 서비스와 독립 실행형 컨테이너를 연결할 수 있습니다.
  • 기본 ingress 네트워크는 attachable 플래그 없이 생성됩니다. 즉, 독립 실행형 컨테이너가 아닌 Swarm 서비스만 사용할 수 있습니다.
  • attachable 플래그를 사용하여 생성된 오버레이 네트워크는 개별 Docker 데몬에서 실행되는 독립 실행형 컨테이너간에 통신이 가능하게 합니다.
$ docker network create -d overlay --attachable my-attachable-overlay

📌출처

Docker Docs


👍 개인 공부 기록용 블로그입니다. 오류나 조언이 있으시면 언제든지 댓글 혹은 메일로 남겨주시면 감사하겠습니다! 😄

맨 위로 이동하기

docker 카테고리 내 다른 글 보러가기

댓글남기기