Docker 네트워크

Docker 컨테이너는 기본적으로 격리된 환경에서 실행됩니다. 네트워크 설정을 통해 컨테이너끼리 통신하거나, 외부와 연결할 수 있습니다.

드라이버설명
bridge기본값. 같은 호스트의 컨테이너 간 통신
host호스트 네트워크를 그대로 사용 (포트 매핑 불필요)
none네트워크 완전 차단
overlay여러 호스트에 걸친 컨테이너 간 통신 (Swarm)

Docker 설치 시 기본으로 생성되는 docker0 브릿지를 사용합니다.

# 사용자 정의 bridge 네트워크 생성
docker network create my-network
 
# 컨테이너를 네트워크에 연결하며 실행
docker run -d --name app --network my-network my-image
 
# 같은 네트워크 내 컨테이너끼리 컨테이너 이름으로 통신 가능
docker run -d --name db --network my-network postgres

사용자 정의 bridge 네트워크에서는 컨테이너 이름이 자동으로 DNS로 동작합니다.
기본 bridge에서는 IP 직접 지정이 필요합니다.

컨테이너 포트를 호스트에 노출할 때 -p 옵션을 사용합니다.

# 호스트 8080 → 컨테이너 80
docker run -p 8080:80 nginx
 
# 모든 인터페이스 대신 localhost에만 바인딩
docker run -p 127.0.0.1:8080:80 nginx

# 네트워크 목록
docker network ls
 
# 특정 네트워크 상세 정보 (연결된 컨테이너, IP 등)
docker network inspect my-network
 
# 실행 중인 컨테이너의 네트워크 정보
docker inspect --format '{{json .NetworkSettings.Networks}}' <container>

docker-compose를 사용하면 같은 파일 내 서비스끼리 자동으로 하나의 bridge 네트워크에 묶입니다.

services:
  web:
    image: nginx
    ports:
      - "8080:80"
  db:
    image: postgres
# web에서 db 호스트명으로 postgres에 접근 가능