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.