[Docker] Docker 네트워크 관리: 기본 개념부터 Compose 활용




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
  • appdb는 각각 고유 네트워크를 가지며, 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 CLIDocker Compose
네트워크 생성docker network createnetworks 섹션에 선언적으로 정의
네트워크 대역 설정--subnet 옵션 사용ipam 섹션으로 설정
기존 네트워크 연결docker network connectexternal: true로 설정
컨테이너 간 공통 네트워크 설정수동으로 CLI 명령 반복선언적 설정으로 자동화

마무리

Docker 네트워크는 컨테이너 간 통신을 설계하는 데 매우 중요한 역할을 합니다.

Docker CLI 명령어를 통해 기본적인 네트워크 관리를 수행할 수 있으며, Docker Compose를 사용하면 복잡한 네트워크 구조를 선언적으로 관리할 수 있습니다.




Leave a Comment