Docker 네트워크에 대한 개념, 명령어를 설명하고 docker-compose 파일로 설정하는 방법에 대한 내용을 정리합니다.
Docker 네트워크는 컨테이너 간의 통신을 관리하고, 외부와의 연결을 설정하며, 네트워크를 분리하여 보안을 강화하는 데 사용됩니다.
아래에서는 Docker 네트워크 개념, 기본 Docker 명령어로 네트워크 관리, 그리고 Docker Compose를 통한 네트워크 설정을 설명하겠습니다.
1. Docker 네트워크 개념
Docker는 기본적으로 여러 네트워크 드라이버를 제공하며, 각 드라이버는 특정한 목적을 위해 설계되었습니다.
주요 네트워크 드라이버
bridge
(기본값): 컨테이너가 독립된 네트워크 환경에서 통신할 수 있도록 합니다. 일반적으로 단일 호스트에서 컨테이너를 연결하는 데 사용됩니다.host
: 컨테이너가 호스트의 네트워크 스택을 직접 사용합니다. 성능은 높지만 격리가 없습니다.none
: 네트워크를 비활성화합니다. 컨테이너가 외부와 통신하지 않도록 설정합니다.overlay
: 다중 호스트 네트워크를 지원하며, Docker Swarm이나 Kubernetes 같은 오케스트레이션 도구와 함께 사용됩니다.macvlan
: 컨테이너가 네트워크 인터페이스를 직접 사용하도록 설정합니다. 각 컨테이너에 고유한 MAC 주소를 부여합니다.
2. 기본 Docker 명령어를 통한 네트워크 관리
Docker CLI를 사용하여 네트워크를 생성, 관리 및 삭제할 수 있습니다.
(1) 네트워크 생성
기본 네트워크 생성
docker network create my_bridge_network
- 기본적으로
bridge
드라이버가 사용됩니다.
특정 드라이버 지정
docker network create --driver bridge my_bridge_network
커스텀 서브넷과 IP 범위 지정
docker network create \
--driver bridge \
--subnet=192.168.1.0/24 \
my_custom_network
(2) 네트워크 목록 확인
Docker에서 생성된 모든 네트워크를 확인할 수 있습니다.
docker network ls
출력 예:
NETWORK ID NAME DRIVER SCOPE
1d9dbfab6d3c bridge bridge local
8a99773cdbf5 host host local
a2b5ec56bcde my_bridge_network bridge local
(3) 네트워크 상세 정보 확인
네트워크의 구성 및 연결된 컨테이너를 확인합니다.
docker network inspect my_bridge_network
출력 예:
[
{
"Name": "my_bridge_network",
"Id": "a2b5ec56bcde",
"Created": "2024-12-24T10:30:00.000Z",
"Driver": "bridge",
"IPAM": {
"Config": [
{
"Subnet": "192.168.1.0/24"
}
]
},
"Containers": {
"d3f4a4e56bca": {
"Name": "my_container",
"IPv4Address": "192.168.1.2/24"
}
}
}
]
(4) 컨테이너 네트워크 연결/제거
네트워크에 컨테이너 연결
이미 실행 중인 컨테이너를 네트워크에 연결합니다.
docker network connect my_bridge_network my_container
네트워크에서 컨테이너 제거
docker network disconnect my_bridge_network my_container
(5) 네트워크 삭제
네트워크 삭제
docker network rm my_bridge_network
주의: 네트워크에 연결된 컨테이너가 있으면 삭제할 수 없습니다.
3. Docker Compose를 통한 네트워크 설정
Docker Compose를 사용하면 네트워크 설정을 선언적으로 정의할 수 있습니다.
(1) 기본 네트워크 설정
version: '3.9'
services:
web:
image: nginx
networks:
- my_bridge_network
networks:
my_bridge_network:
driver: bridge
web
서비스는my_bridge_network
라는 네트워크에 연결됩니다.- Compose는 자동으로 네트워크를 생성합니다.
(2) 여러 네트워크 연결
version: '3.9'
services:
app:
image: app_image
networks:
- app_network
- shared_network
db:
image: db_image
networks:
- db_network
- shared_network
networks:
app_network:
driver: bridge
db_network:
driver: bridge
shared_network:
driver: bridge
app
과db
는 각각 고유 네트워크를 가지며,shared_network
를 통해 서로 통신할 수 있습니다.
(3) 기존 네트워크 사용
이미 존재하는 네트워크를 Docker Compose에서 사용할 수 있습니다.
version: '3.9'
services:
app:
image: app_image
networks:
- existing_network
networks:
existing_network:
external: true
external: true
를 사용하면 Compose가 네트워크를 생성하지 않고, 기존 네트워크를 참조합니다.
(4) 네트워크 대역 설정
네트워크의 서브넷과 IP 범위를 명시적으로 정의할 수 있습니다.
version: '3.9'
services:
web:
image: nginx
networks:
- custom_network
networks:
custom_network:
driver: bridge
ipam:
config:
- subnet: 192.168.10.0/24
subnet
을 명시적으로 정의하면 네트워크 충돌을 방지할 수 있습니다.
4. Docker CLI vs. Docker Compose: 네트워크 관리 비교
기능 | Docker CLI | Docker Compose |
---|---|---|
네트워크 생성 | docker network create | networks 섹션에 선언적으로 정의 |
네트워크 대역 설정 | --subnet 옵션 사용 | ipam 섹션으로 설정 |
기존 네트워크 연결 | docker network connect | external: true 로 설정 |
컨테이너 간 공통 네트워크 설정 | 수동으로 CLI 명령 반복 | 선언적 설정으로 자동화 |
마무리
Docker 네트워크는 컨테이너 간 통신을 설계하는 데 매우 중요한 역할을 합니다.
Docker CLI 명령어를 통해 기본적인 네트워크 관리를 수행할 수 있으며, Docker Compose를 사용하면 복잡한 네트워크 구조를 선언적으로 관리할 수 있습니다.