[Docker] Network 설정

도커 컨테이너는 서로 간의 통신을 위해 도커 네트워크를 통해 통신합니다.

별도의 네트워크를 생성하여 사용하거나, 네트워크 대역을 설정하는 등 관리할 수 있습니다.

 

네트워크 리스트 확인

docker network ls 명령어로 도커 네트워크 리스트를 확인할 수 있습니다.
기본 값으로 bridge, host, none 이름의 도커 네트워크가 생성됩니다.

# docker network ls
NETWORK ID     NAME                DRIVER    SCOPE
1828940023a0   bridge              bridge    local
ed4ac8c45f9c   host                host      local
f906c4534681   none                null      local

bridge 네트워크 드라이브

bridge 네트워크 드라이브는 기본 네트워크 드라이버입니다. 드라이버를 지정하지 않고 docker-compose를 작성하여 컨테이너를 생성하면 기본적으로 bridge 네트워크 드라이브로 네트워크가 생성됩니다. 일반적으로 응용프로그램이 통신해야 하는 독립형 컨테이너에서 실행될 때 사용됩니다.

 

host 네트워크 드라이브

 host 네트워크 드라이브는 Docker 호스트 간의 네트워크 분리를 제거하고 호스트의 네트워킹을 직접 사용합니다.

 

none 네트워크 드라이브

 none 네트워크 드라이브는 모든 네트워크을 비활성화하는 설정입니다.

 

 

기본 설정

별도의 도커 네트워크를 설정하지 않고 docker-compose를 통해 도커 컨테이너를 생성하면 bridge 네트워크 드라이브로 네트워크가 생성됩니다. 동일한 docker-compose 파일에 별도의 네트워크 설정 없이 여러 컨테이너를 추가했다면 모두 동일한 도커 네트워크가 할당됩니다.

services:
  httpd:
    image: httpd:latest
    container_name: "my-web-server1"
    restart: "always"
    ports:
      - "8081:80"

 

컨테이너를 실행하면 webserver_default 이름의 네트워크가 생성됩니다.
네트워크 이름 규칙은 docker-compose.yml 파일이 위치한 디렉토리 이름에 '_default' 추가된 형태로 생성됩니다.

(docker-compose 버전에 따라 기본 생성 이름은 달라질 수 있습니다.)

# docker-compose up -d
Creating network "webserver_default" with the default driver
Creating my-web-server1 ... done

 

 

docker network ls 명령어로 네트워크가 추가된 것을 확인하실 수 있습니다.

# docker network ls
NETWORK ID     NAME                DRIVER    SCOPE
1828940023a0   bridge              bridge    local
ed4ac8c45f9c   host                host      local
f906c4534681   none                null      local
162b8673c609   webserver_default   bridge    local

 

상세 정보 확인

생성된 네트워크는 inspect 옵션을 통해 상세 정보를 확인할 수 있습니다.

도커 네트워크에 할당된 컨테이너는 "Containers" 항목에서 확인하실 수 있습니다.

# docker network inspect webserver_default
[
    {
        "Name": "webserver_default",
        "Id": "162b8673c60998f9e127f6c3d3c946b7f3005db0277270a0302d64a5d25734bc",
        "Created": "2022-11-22T23:16:11.2384848+09:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.25.0.0/16",
                    "Gateway": "172.25.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "72c4f8408a4c09f12f667de5188452550fa444d57656ac51fbd709f3d28b727e": {
                "Name": "my-web-server1",
                "EndpointID": "9ace8e9ea4647d52abd9cae0a90e62b7955fecffdfde46c16686b9060aba6714",
                "MacAddress": "02:42:ac:19:00:02",
                "IPv4Address": "172.25.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "default",
            "com.docker.compose.project": "webserver",
            "com.docker.compose.version": "1.29.2"
        }
    }
]

 

도커 네트워크에 2개 이상의 컨테이너가 할당되면 아래와 같이 확인 가능합니다.

"Containers": {
    "5af2aed3ae0a96e79aadbb007babb48fad29a866623bbefb10410071def95d91": {
        "Name": "my-web-server2",
        "EndpointID": "28e88ea1fb41743162a5c7f85af97f7cf152dd1e80c9ace503ae7d11dc355db4",
        "MacAddress": "02:42:ac:1a:00:03",
        "IPv4Address": "172.26.0.3/16",
        "IPv6Address": ""
    },
    "7d669f907151d747074c50a97ce1c35c32ce214857b6b012ab18dc747883bb28": {
        "Name": "my-web-server1",
        "EndpointID": "671b2b651d7e4033fc268806c9137e2ac3d517d1397e1cf84f2d667ab177eb31",
        "MacAddress": "02:42:ac:1a:00:02",
        "IPv4Address": "172.26.0.2/16",
        "IPv6Address": ""
    }
},

 


IP 대역 설정

docker-compose.yml 파일을 통해 도커 네트워크를 생성하고, IP 대역을 지정할 수 있습니다.
테스트로 "172.16.101.0/24" 대역으로 도커 네트워크를 생성하고, 도커 컨테이너에 적용해봅시다.

services:
  httpd:
    image: httpd:latest
    container_name: "my-web-server1"
    restart: "always"
    ports:
      - "8081:80"
    networks:
      - test-network-1

networks:
  test-network-1:
    ipam:
      driver: default
      config:
        - subnet: "172.16.101.0/24"

 

도커 컨테이너 실행 후 생성된 네트워크 정보를 확인해보면 "172.16.101.0/24" IP 대역으로 도커 네트워크가 생성되고 "172.16.101.2/24" IP로 도커 컨테이너에 할당된 것을 확인하실 수 있습니다.

# docker network inspect webserver_test-network-1
[
    {
        "Name": "webserver_test-network-1",
        "Id": "6dd881586154cbf2f95d710fc67f6ed6ec79149478b4e7502b3b6472eaf71b8a",
        "Created": "2022-12-01T23:29:47.4810513+09:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.16.101.0/24"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "e5436808ad268cccee655a2df0ae7a5dc31c8d9e0bd1387cc6dd5aa29cf93a3b": {
                "Name": "my-web-server1",
                "EndpointID": "d16c3da2b0ccb72a772c8682db0ed7a49441b731b6f2a48cd87b901c833672cb",
                "MacAddress": "02:42:ac:10:65:02",
                "IPv4Address": "172.16.101.2/24",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "test-network-1",
            "com.docker.compose.project": "webserver",
            "com.docker.compose.version": "1.29.2"
        }
    }
]

 

네트워크 설정은 이 외에도 다양하게 설정할 수 있지만 간단히 네트워크를 구성하는 방법을 알아보았습니다.

+ Recent posts