[docker] docker 네트워크 - 네트워크 드라이버 (2)
카테고리: docker
태그: docker
🎯네트워크 드라이버 종류
bridgeoverlayhostMacvlannone
이번 포스트에서는 이 중에서 bridge와 overlay 네트워크 드라이버에 대해 중점적으로 다룰 것이다.
🔖브리지 네트워크
- 동일한 브리지 네트워크에 연결된 컨테이너간에는 통신할 수 있지만 다른 네트워크에 연결된 컨테이너와는 격리된 환경을 제공합니다.
- 브리지 네트워크는 동일한 Docker 호스트에서 실행되는 컨테이너에 적용됩니다. 서로 다른 Docker 호스트에서 실행되는 컨테이너와 통신을 하기 위해서는 OS 수준에서 라우팅을 추가하거나
Overlay네트워크를 사용하는 방법이 있습니다. - Docker를 시작하면 기본 브리지 네트워크(
bridge)가 자동으로 생성되고 별도로 지정하지 않는 한 새로 시작되는 컨테이너는 여기에 연결됩니다. 기본 브리지 대신 사용자 정의 브리지 네트워크도 생성이 가능한 데 이것은 기본 브리지 네트워크보다 다방면에서 우수한 기능을 제공합니다.
사용자 정의 브리지와 기본 브리지의 차이
- 사용자 정의 브리지는 컨테이너 간에 자동 DNS 확인을 제공합니다.
--link옵션을 사용하지 않는 한 기본 브리지 네트워크에 연결된 컨테이너는 IP 주소로만 서로 액세스할 수 있습니다. 이에 반해 사용자 정의 브리지 네트워크에 연결된 컨테이너 간에는 컨테이너 이름 또는 별칭으로 액세스할 수 있습니다.
- 사용자 정의 브리지는 더 나은 격리를 제공합니다.
--network옵션이 지정되지 않은 모든 컨테이너는 기본 브리지 네트워크에 연결됩니다. 그러면 관련이 없는 컨테이너 간에 액세스가 가능하므로 위험할 수 있습니다.- 사용자 정의 네트워크를 사용하면 해당 네트워크에 연결된 컨테이너만 통신할 수 있는 범위가 지정된 네트워크가 제공됩니다.
- 컨테이너는 사용자 정의 네트워크에 즉시 연결하거나 분리할 수 있습니다.
- 컨테이너 실행 동안 사용자 정의 브리지는 즉시 연결하거나 연결을 끊을 수 있습니다. 반면 기본 브리지 네트워크에서 컨테이너 연결을 끊으려면 컨테이너를 중지하고 다른 네트워크 옵션으로 다시 만들어야 합니다.
- 각 사용자 정의 브리지는 다른 네트워크와 분리된 새로운 네트워크 환경을 구성합니다.
- 컨테이너가 기본 브리지 네트워크를 사용하는 경우 모든 컨테이너는 동일한 MTU 및 iptables 규칙을 사용합니다. (참고) 기본 네트워크 구성 변경
- 사용자 정의 브리지 네트워크는
docker network create를 사용하여 구성합니다. 서로 다른 애플리케이션 그룹에 서로 다른 네트워크 요구 사항이 있는 경우 각 사용자 정의 브리지를 생성할 때 개별적으로 구성할 수 있습니다.
- 기본 브리지 네트워크에 연결된 컨테이너는 환경 변수를 공유합니다.
- 원래 환경 변수를 공유하는 유일한 방법은
--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
📌출처
👍 개인 공부 기록용 블로그입니다. 오류나 조언이 있으시면 언제든지 댓글 혹은 메일로 남겨주시면 감사하겠습니다! 😄
댓글남기기