Docker Network는 컨테이너들이 서로 통신할 수 있도록 격리된 네트워크 환경을 제공합니다. 필요에 따라 다양한 유형의 네트워크를 생성하여 컨테이너들을 연결하고 관리할 수 있습니다.
1. Docker Network 종류
Docker는 다양한 네트워크 드라이버를 제공하며, 각 드라이버는 특정 유형의 네트워크를 지원합니다. 주요 네트워크 종류는 다음과 같습니다.
- bridge: 기본 네트워크 드라이버로, Docker가 자동으로 생성하는 기본 네트워크입니다. 컨테이너들은 이 네트워크를 통해 서로 통신할 수 있으며, 호스트와 통신할 수도 있습니다.
- host: 호스트의 네트워크 인터페이스를 직접 사용하여 컨테이너와 호스트가 동일한 네트워크 네임스페이스를 공유합니다. 네트워크 격리가 필요 없는 경우에 유용하지만, 보안 문제가 발생할 수 있습니다.
- overlay: 여러 Docker 데몬을 연결하여 Docker Swarm 서비스와 컨테이너 간에 노드 간 통신을 가능하게 합니다. Swarm 모드에서 작동하며, 여러 호스트에 걸쳐 있는 컨테이너 간에 통신할 수 있도록 합니다.
- none: 컨테이너에 네트워크 인터페이스를 제공하지 않습니다. 컨테이너가 외부와 통신할 필요가 없는 경우에 사용됩니다.
2. Docker Network 생성 명령어
docker network create 명령어를 사용하여 새로운 Docker 네트워크를 생성할 수 있습니다.
Bash
docker network create [옵션] <네트워크 이름>
주요 옵션
- -d, --driver <드라이버>: 사용할 네트워크 드라이버를 지정합니다. (기본값: bridge)
- --subnet <서브넷>: 네트워크의 IP 주소 대역을 지정합니다.
- --gateway <게이트웨이>: 네트워크의 게이트웨이 IP 주소를 지정합니다.
- -o <옵션>=<값>: 드라이버별 추가 옵션을 지정합니다.
예시
- bridge 네트워크 생성:
-
Bash
docker network create my-bridge-network
- bridge 네트워크 생성 (서브넷 및 게이트웨이 지정):
-
Bash
docker network create --subnet=172.18.0.0/16 --gateway=172.18.0.1 my-bridge-network
- overlay 네트워크 생성:
-
Bash
docker network create -d overlay my-overlay-network
생성된 네트워크 확인
docker network ls 명령어를 사용하여 생성된 네트워크 목록을 확인할 수 있습니다.
Bash
docker network ls
컨테이너를 네트워크에 연결
docker run 명령어의 --network 옵션을 사용하여 컨테이너를 특정 네트워크에 연결할 수 있습니다.
Bash
docker run --network=<네트워크 이름> <이미지 이름>
docker-compose.yml 파일을 이용한 네트워크 정의
docker-compose.yml 파일에 networks 섹션을 추가하여 네트워크를 정의하고, 서비스를 해당 네트워크에 연결할 수 있습니다.
YAML
version: "3.9"
services:
web:
image: nginx:latest
ports:
- "80:80"
networks:
- my-network
db:
image: mysql:latest
environment:
MYSQL_ROOT_PASSWORD: password
networks:
- my-network
networks:
my-network:
driver: bridge