HOWTO · Docker
Docker Compose에서 네트워크 모드 추가
이 기사에서는 Docker Compose에서 네트워크 모드를 사용하여 네트워킹을 정의하고 설정하는 방법에 대해 설명합니다.
이 페이지의 내용
Compose 파일에서 서비스의 network_mode를 해당 서비스 아래에 설정합니다. 서비스가 특정 네트워크 네임스페이스를 사용해야 할 때 이 설정을 선택하세요. network_mode를 생략하고 networks도 사용자 지정하지 않으면 Docker Compose는 서비스를 프로젝트의 기본 네트워크에 연결하며, 이 네트워크에서 서비스는 서로의 서비스 이름으로 통신할 수 있습니다. 서비스 간 통신만을 위해 사용자 지정 네트워크 모드를 설정할 필요는 없습니다. 프로젝트 기본 네트워크의 동작은 Docker의 Compose 네트워킹 가이드를 참고하세요. (Docker Compose; docker network ls)
Compose 서비스에 사용할 Docker 네트워크 모드 선택
서비스가 사용해야 하는 네트워크 네임스페이스에 따라 모드를 선택하세요.
bridge는 Docker에 기본으로 제공되는 브리지 네트워크를 사용합니다. 이름이 지정된 네트워크나 Compose 프로젝트의 기본 네트워크를 선택하는 설정은 아닙니다. 서비스가 이름이 지정된 Compose 네트워크에 연결되어야 한다면 대신networks를 구성하세요.host는 지원되는 환경에서 호스트의 네트워크 네임스페이스를 공유하므로 서비스의 네트워크 격리 방식이 달라집니다.none은 서비스의 네트워킹을 비활성화합니다.service:<service-name>은 다른 Compose 서비스의 네트워크 네임스페이스를 공유합니다.container:<container-name-or-id>는 Docker 컨테이너를 가리킵니다.
각 모드는 연결성과 격리 방식이 다릅니다. 특히 하나의 서비스에 network_mode와 networks를 함께 설정하지 마세요. Compose에서는 두 옵션을 동시에 사용할 수 없습니다. Compose 서비스 참조는 network_mode를 설명하고, 서비스 networks 참조는 별도의 네트워크 연결 설정을 설명합니다. 아래 예제는 설정 문법을 보여 주며, Docker 엔진에서 실행해 본 것은 아닙니다.
Docker Compose에서 network_mode 구성
리터럴 모드 값이나 참조 형식을 사용해 서비스 항목 안에 network_mode를 넣으세요. 예를 들어 app이라는 서비스에서 호스트 모드를 사용하는 설정은 들여쓴 services:, app:, network_mode: host 행으로 나타냅니다. 실제 Compose 파일에서는 들여쓰기를 유지하고 이미지처럼 해당 서비스에 필요한 다른 설정도 추가하세요.
이 예제를 실행하세요.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
service = "app"
mode = "host"
print(f"services:\n {service}:\n network_mode: {mode}")
services:
app:
network_mode: host
상황에 맞게 host를 bridge, none, service:<service-name> 또는 container:<container-name-or-id>로 바꾸세요. 꺾쇠괄호로 둘러싼 문구는 자리표시자입니다. service: 뒤에는 실제 Compose 서비스 이름을, container: 뒤에는 컨테이너 이름이나 ID를 넣으세요. 예를 들어 service:api는 api라는 이름의 서비스를 가리킵니다. Docker 네트워크 이름이나 ID는 어느 참조에도 대신 사용할 수 없습니다.
docker network ls는 Docker 네트워크와 각 네트워크의 이름 및 ID를 나열합니다. 컨테이너나 Compose 서비스는 나열하지 않으므로, 출력에서 service: 또는 container:에 넣을 값을 확인할 수는 없습니다. 이 명령은 사용 가능한 네트워크를 살펴보는 데 쓰고, 서비스나 컨테이너 식별자를 찾는 데 쓰지 마세요. 네트워크 이름이나 ID만으로는 위 형식의 network_mode 참조가 되지 않습니다.
network_mode를 활성화하려는 목적으로 최상위 Compose version을 추가하지 마세요. 현재 Compose version 및 name 참조에서는 최상위 version 필드를 더 이상 사용하지 않는 항목으로 설명합니다. Compose는 지원하는 Compose 형식에 따라 파일을 검사합니다.
Docker Swarm 네트워킹 고려
위의 Compose 서비스 설정과 Swarm 서비스 네트워킹은 서로 다른 구성 방식입니다. 제시된 Swarm 패턴에서는 networks 키로 서비스를 연결하고, 이미 존재하는 네트워크를 외부 네트워크로 선언합니다. Compose 문법으로는 app: networks: [host]와 같은 서비스 항목을 두고, 최상위 networks 항목에서 host라는 이름을 지정하며 external: true로 설정합니다. host를 실제 외부 네트워크 이름으로 바꾸세요. 이 설정은 서비스를 네트워크에 연결하지만, networks와 network_mode를 서로 바꿔 쓸 수 있다는 뜻도 아니고 해당 네트워크가 모든 모드와 호환된다는 뜻도 아닙니다. Compose 네트워킹 가이드에서 Compose의 네트워크 연결을 설명합니다. 외부 네트워크를 참조하기 전에 배포 환경의 Swarm 설정을 사용해 네트워크를 만들거나 확인하세요.
선택한 네트워크 모드 확인
Compose 파일을 검토해 network_mode가 의도한 서비스 아래에 중첩되어 있는지, 값이 올바른 모드 형식을 사용하는지, 참조된 서비스나 컨테이너가 서비스가 실행될 환경에 존재하는지 확인하세요. Swarm에서는 외부 네트워크가 존재하는지, 서비스의 networks 아래에 정확한 이름으로 참조되어 있는지 확인하세요. docker network ls는 실행한 Docker 호스트의 네트워크 이름과 ID를 보여 줄 수 있지만, Compose 파일의 유효성이나 서비스 간 통신 가능 여부를 검증하지는 않습니다. 이 글은 이 구성을 실행 중인 Docker 설치 환경에서 테스트했다고 주장하지 않습니다.