5. Docker Network
이 문서는 도커 네트워크를 다룹니다.

At its core, Docker networking is the system that allows Docker containers to communicate with each other, with the Docker host, and with the outside world
본질적으로 도커 네트워킹은 도커 컨테이너가 컨테이너끼리, 호스트, 인터넷과 통신 가능하도록 하는 시스템입니다.
출처: Docker Networking, , Geeks For Geeks
인프런의 도커 마스터즈와 Docker Networking 문서에서 학습한 내용을 정리합니다.
Network Drivers
도커에는 3가지 네트워크 드라이버 옵션이 있습니다.
컨테이너를 생성할 때 네트워크를 설정할 수 있습니다.
docker run --name cont nginx-alpine:latest --network={host | none | macvlan | overlay}
이 옵션에 따라 컨테이너가 연결되는 네트워크가 달라집니다.
주요 드라이버의 특성을 알아봅니다. 여기선 무엇보다 default 설정값인 Bridge가 중요해보입니다.
3가지 드라이버에 대한 요약표를 작성했습니다.
| Host | Bridge | None | |
|---|---|---|---|
| cmd | docker run container --network=host | docker run container --network param 없음 | docker run container --network=none |
| 특성 | 호스트 네트워크에서 컨테이너 실행 | 리눅스 브릿지 네트워크 기반. 도커 네트워크의 default 설정 | 네트워크에 연결하지 않음 |
docker networks의 각 특성을 파악해봅니다.
컨테이너를 네트워크 계층, 혹은 더 깊은 계층에서부터 격리시키거나, 완전히 오프라인으로 만드는 궁금해서
Geek for Geeks > Docker Networking > Network Drivers를 읽었습니다.
-
bridge(기본값):- 독립 실행형 컨테이너의 기본 드라이버입니다.
- 호스트에서 비공개 내부 네트워크를 생성합니다.
- 동일한
bridge네트워크에 있는 컨테이너들은 내부 IP 주소를 사용하여 서로 통신할 수 있습니다. - 호스트 외부에서 접근하려면 포트를 매핑해야 합니다.
- 기본 bridge 네트워크를 사용하는 것보다 사용자 정의 bridge 네트워크를 생성하는 것이 강력히 권장됩니다.
-
host:- 네트워크 격리를 완전히 제거합니다.
- 컨테이너는 호스트의 네트워크 네임스페이스를 공유합니다.
- 즉 컨테이너가 호스트의 IP 주소를 직접 사용하고, 컨테이너가
LISTEN중인 모든 포트가 호스트에서 열립니다. - 성능상 이점을 제공할 수 있지만, 네트워크 격리로 인한 보안 리스크가 발생합니다.
-
none:- 이 드라이버는 컨테이너에 네트워크 스택은 제공하지만 어떤 네트워크에도 연결하지 않습니다.
- 컨테이너는 완전히 고립되어 있으며, 다른 컨테이너나 외부 세계와 통신할 수 없습니다.
- 네트워크 접근이 필요 없는 배치 작업이나 태스크를 실행할 때 유용합니다.
-
overlay:
- 이 드라이버는 다중 호스트 네트워킹을 위해 사용되며, Docker Swarm 서비스에서 선호되는 선택입니다.
- 여러 Docker 호스트에 분산 네트워크를 생성하여, 서로 다른 호스트에 있는 컨테이너(or Swarm 서비스)들이 직접적이고 안전하게 통신할 수 있도록 합니다.
- macvlan :
- 컨테이너에 MAC 주소를 할당하여, 컨테이너가 네트워크상에서 실제 물리적 장치처럼 보이게 합니다.
- 장치가 물리적 네트워크 존재를 가져야 하는 레거시 애플리케이션이나 네트워크 모니터링 도구와 통합할 때 유용합니다.
overlay, macvlan, none 모두 매우 흥미롭습니다.
특히 macvlan이 컨테이너(실행 환경)에 MAC 주소를 추가할 수 있는 점이 인상적입니다.
overlay는 리눅스 브릿지 네트워크에 대한 내용이라, 별도 문서에서 자세히 알아보겠습니다.
none 또한 네트워크 연결이 차단된 컨테이너로 이해되니 꽤 유용해보입니다.
Docker Network CLI
커스텀 도커 네트워크를 만들고 컨테이너를 생성 및 실행합니다.
도커 컨테이너 커맨드와 유사해서 금방 익힐 수 있습니다.
# 도커 네트워크 목록 조회하기
docker network ls
# 도커 네트워크 생성하기
docker network create custom-net -d {bridge {none, host ...}} --subnet 10.100.100.0/24
# 커스텀 생성한 도커 네트워크로 컨테이너 생성-실행하기
docker run -d -p 80:80 --name cont-nginx --network custom-net nginx
# custom-net 네트워크 inpect
docker network inpect custom-net
