컨테이너는 독립적인 환경에서 실행되지만, 애플리케이션을 만들다 보면 서로 데이터를 주고받아야 하거나 외부 요청을 받아야 할 일이 많습니다. Docker 네트워크는 이러한 컨테이너간 통신을 가능하게 해주는 역할을 합니다.
🔍 Docker Network 의 종류
Docker는 기본적으로 다음과 같은 네트워크 드라이버들을 제공합니다
드라이버
설명
bridge
기본 드라이버. 컨테이너 간 통신이 가능하며, 같은 호스트에서 작동합니다.
host
컨테이너가 호스트의 네트워크를 그대로 사용합니다. 격리는 없지만 속도는 빠릅니다.
none
네트워크를 사용하지 않도록 설정합니다. 완전한 격리가 필요할 때 사용합니다.
overlay
여러 호스트 간 컨테이너를 연결할 수 있습니다. Docker Swarm에서 유용합니다.
macvlan
컨테이너에 고유한 MAC 주소를 부여해 물리 네트워크처럼 동작시킵니다.
✅ Docker 네트워크 생성
Docker 네트워크를 사용하면 다음과 같은 기능들을 사용할 수 있습니다.
같은 네트워크내 컨테이너 간 이름 기반 통신 가능
자체 서브넷 설정 가능
네트워크 격리를 통해 보안 강화
docker network create \ --driver bridge \ --subnet 192.168.100.0/24 \ # my-bridge 를 이용하는 Docker 는 192.168.100.0/24 내 IP 를 할당 받습니다. my-bridge
✅ Docker Network 사용
1. 네트워크 생성
Docker 명령어로 생성하는 네트워크는 기본적으로 bridge 네트워크를 사용합니다.
# 사용자 정의 브리지 네트워크 생성 docker network create my-bridge-network
# 네트워크 확인 docker network ls
NETWORK ID NAME DRIVER SCOPE 970c8ca1f098 app_default bridge local b7cc4195660a bridge bridge local 752114a3f537 cluster4_default bridge local cefaa7d0f84f discovery-server_msa bridge local b15c797bd7cb host host local e30ba0356072 minikube bridge local 1d556958a0e3 monitoring_kafka_network bridge local c11f235772a0 my-bridge-network bridge local 09369e87d3bf mysql_default bridge local 12bba3372bec none null local b6805d2acdd3 redis-insight_default bridge local 2e03a529f3f0 spring-cloud bridge local
2. 컨테이너 2개 실행 (같은 네트워크에 연결):
docker run -d --name container1 --network my-bridge-network nginx docker run -it --name container2 --network my-bridge-network alpine sh
컨테이너2에서 container1 의 이름으로 접속이 가능합니다 👉 같은 네트워크에 연결된 컨테이너는 이름으로 서로 통신 가능하다는 점이 포인트입니다!