Post

04 Docker Network

04 Docker Network

1. Note

1. Note

  • 전반적인 흐름과 맥락을 파악필요
    • 무엇을 해야한다기 보다, 어떤 형태가 있는지 파악해야하고
    • 방법론적인 접근을 고민해야하는 부분
    • 안 좋은 방법이라도 특정한 상황에서 필요할 수 있음
  • 오버엔지니어링(over-engineering)
    • 필요한 수준을 넘어서 과하게 복잡하게 설계하거나 구현하는 것
    • 언제 어떻게 사용해야 할까.

2. Docker Network

1. Docker 네트워크

  • Docker 네트워크는 컨테이너 간 통신을 가능하게 하는 가상 네트워크 계층
  • 컨테이너는 기본적으로 격리되어 실행되기 때문에, 네트워크를 통해 서로 연결해야 함
  • 개발자는 Docker가 제공하는 네트워크 드라이버를 기반으로 생성된 네트워크에 컨테이너를 소속시킬지 결정

2. 주요 포인트

  • 컨테이너 간 통신을 위한 가상 네트워크 제공
  • IP 기반 통신 (각 컨테이너는 IP 할당)
  • DNS 기반 서비스 이름 통신 지원 (특히 user-defined network)
  • 외부(호스트/인터넷)와 연결 가능

3. 기본 동작 흐름

  • 컨테이너 생성 시 네트워크에 연결됨
  • 네트워크 내부에서 컨테이너 간 통신 가능
  • 포트 포워딩을 통해 외부 접근 허용

3. Docker Networks

1. Docker 네트워크 종류

드라이버설명특징사용 케이스
bridge단일 호스트에서 컨테이너 간 통신을 위한 기본 가상 네트워크- 컨테이너에 내부 IP 할당
- NAT 기반 통신
- 포트포워딩 필요
- default / user-defined로 구분됨
- 일반적인 백엔드 + DB 구성
- 단일 서버 환경
- docker-compose 기본 네트워크
host컨테이너가 호스트 서버의 네트워크를 그대로 사용하는 방식- 별도 네트워크 없음
- 포트포워딩 불필요
- 컨테이너 = 호스트처럼 동작
- 성능이 중요한 서비스
- 로컬 환경에서 빠른 테스트
none컨테이너의 네트워크를 완전히 차단하는 방식- 외부/내부 통신 불가
- loopback만 존재
- 완전 격리 상태
- 보안 테스트
- 네트워크 필요 없는 배치 작업
overlay여러 Docker 호스트 간 컨테이너 통신을 가능하게 하는 네트워크- 멀티 서버 지원
- 클러스터 기반 네트워크
- 분산 환경에서 사용
- MSA 환경
- 여러 서버 간 서비스 연결
macvlan컨테이너를 물리 네트워크에 직접 연결하는 방식- 컨테이너에 실제 MAC/IP 부여
- 외부에서 독립 장비처럼 인식됨
- 레거시 시스템 연동
- 네트워크 장비처럼 직접 접근 필요할 때

2. bridge

1. bridge

  • Docker에서 가장 기본이 되는 네트워크 방식으로,
  • 단일 호스트 내에서 컨테이너끼리 통신할 수 있도록 하는 가상 네트워크

2. 특징

  • 단일 호스트에서 사용하는 기본 가상 네트워크
  • 컨테이너마다 내부 IP 할당
  • NAT 기반 통신 (외부 접근 시 포트포워딩 필요)
  • default bridge와 user-defined bridge로 나뉨

3. 사용법

1
2
3
# 네트워크이름이 my-netowrk
docker network create my-network
docker run -d --network my-network nginx

4.장단점

  • 장점
    • 가장 일반적인 방식 (실무 기본)
    • 네트워크 격리 가능
    • user-defined 사용 시 컨테이너 이름으로 통신 가능 (DNS 지원)
  • 단점
    • 기본 bridge는 DNS 미지원
    • 외부 접근 시 포트 매핑 필요
    • 멀티 서버 환경에서는 사용 불가

3. host

1. host

  • 컨테이너가 별도의 가상 네트워크를 사용하지 않고, 호스트 서버의 네트워크를 그대로 공유하는 방식

2. 특징

  • 컨테이너가 호스트 네트워크를 그대로 사용
  • 별도의 가상 네트워크 없음
  • 컨테이너 = 호스트처럼 동작

3. 사용법

1
docker run -d --network host nginx

4. 장단점

  • 장점
    • 네트워크 성능 가장 좋음 (오버헤드 없음)
    • 포트포워딩 필요 없음
  • 단점
    • 포트 충돌 위험
    • 컨테이너 격리 없음 (보안 취약)
    • 운영 환경에서 사용 제한적

4. none

1. none

  • 컨테이너의 네트워크를 완전히 차단하여 외부 및 다른 컨테이너와의 통신을 막는 방식

2. 특징

  • 네트워크 완전 차단
  • 외부 및 다른 컨테이너와 통신 불가
  • loopback만 존재

3. 사용법

1
docker run -d --network none nginx

4. 장단점

  • 장점
    • 완전한 격리 (보안 목적)
    • 테스트 환경에 적합
  • 단점
    • 네트워크 기능 사용 불가
    • 일반적인 서비스 구성에는 부적합

5. overlay

1. overlay

  • 여러 Docker 호스트에 분산된 컨테이너들을 하나의 네트워크처럼 연결해주는 네트워크 방식
  • 물리적으로는 여러 서버에 나뉘어 있지만 논리적으로는 하나의 네트워크처럼 동작하게 만드는 기술

2. 특징

  • 여러 Docker 호스트 간 네트워크 구성
  • 클러스터 환경에서 사용 (Swarm/Kubernetes)
  • 서로 다른 서버의 컨테이너 간 통신 가능

3. 사용법

1
2
docker swarm init
docker network create -d overlay my-network

4. 장단점

  • 장점
    • 멀티 서버 환경 지원
    • 확장성 높은 구조 (MSA에 적합)
  • 단점
    • 설정 복잡 (클러스터 구성 필요)
    • 네트워크 오버헤드 존재
    • 단일 서버에서는 불필요

6. macvlan

1. macvlan

  • 컨테이너를 Docker 내부 네트워크가 아니라 실제 물리 네트워크에 직접 연결하여,
  • 하나의 독립적인 장비처럼 동작하게 만드는 방식
  • 컨테이너를 Docker 내부 네트워크가 아니라, 실제 물리 네트워크에 직접 붙이는 방식

2. 특징

  • 컨테이너에 실제 MAC 주소와 IP를 할당
  • 물리 네트워크에 직접 연결
  • 외부에서 하나의 독립 서버처럼 보임

3. 사용법

1
2
3
4
docker network create -d macvlan \
  --subnet=192.168.0.0/24 \
  --gateway=192.168.0.1 \
  -o parent=eth0 my-macvlan

4. 장단점

  • 장점
    • 외부 네트워크와 직접 통신 가능
    • 레거시 시스템과 호환성 좋음
    • 컨테이너를 독립 장비처럼 사용 가능
  • 단점
    • 설정 난이도 높음
    • 네트워크 장비 영향 받음
    • 일반적인 개발/운영에서는 거의 사용 안 함
This post is licensed under CC BY 4.0 by the author.