개발공부

Docker 네트워크 설정

알릿수 2020. 11. 1. 16:56
반응형

1. Docker의 네트워크 정보

~ % docker network ls

NETWORK ID          NAME                DRIVER              SCOPE
974ff5b6e135        bridge              bridge              local
1efae2c6c97a        host                host                local
0669358a7263        none                null                local

 bridge 라는 이름의 네트워크는 도커에서 기본 생성한 것으로, 컨테이너에 네트워크 지정을 하지 않으면 bridge 네트워크를 사용하게 된다.

기본 브릿지 네트워크를 사용하는 경우 이름을 해결할 수 없다고하는데 (무슨소린지..?) 이를 해결하기 위해 컨테이너를 실행시 --link옵션을 사용하여 도커의 호스트파일에 컨테이너의 아이피 정보를 등록한다고 한다.

2. Docker Container 의 네트워크 정보 확인

~ % docker container inspect web

3. 네트워크 생성

~ % docker network create --driver=bridge web-network 

기본 브릿지 네트워크와 다르게 사용자가 직접 생성한 네트워크는 link 옵션을 사용하지 않고 앨리어스를 사용할 수 있고, 편하기 때문에 권장된다.

4. 도커 컨테이너의 네트워크 설정

web 컨테이너를 실행하고

~ % docker container run --name=web -it -d -p 80:80 nginx

잘 떠있는지 확인

~ % docker container ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
379a17bef884        nginx               "/docker-entrypoint.…"   9 seconds ago       Up 8 seconds        0.0.0.0:80->80/tcp   web
a5a1b1c0ef8a        centos:7            "/bin/bash"              29 minutes ago      Up 29 minutes                            sample

 

web 컨테이너에 web-network를 할당해준다.

~ % docker network connect web-network web

추후 또 다른 컨테이너를 web-network에 할당해주면, 같은 네트워크가 할당된 컨테이너끼리 통신이 가능하다.

~ % docker inspect web

"web-network": {
                    "IPAMConfig": {},
                    "Links": null,
                    "Aliases": [
                        "379a17bef884"
                    ],
                    "NetworkID": "8778ec0e1d85438eb30bffee9e2f9f05e024c533bc13a242ac744c2308a63b98",
                    "EndpointID": "72c183c44b0aea0f99e3234b3acdc7ffa2b3579e9aee56ed0d1cc5c905d56368",
                    "Gateway": "172.18.0.1",
                    "IPAddress": "172.18.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "",
                    "DriverOpts": {}
                }

~ % docker network ls

NETWORK ID          NAME                DRIVER              SCOPE
974ff5b6e135        bridge              bridge              local
1efae2c6c97a        host                host                local
0669358a7263        none                null                local
8778ec0e1d85        web-network         bridge              local

동일한 네트워크 아이디가 설정된 것을 확인할 수 있다.

네트워크의 정보를 조회해보면, 

~ % docker inspect web-network

[
    {
        "Name": "web-network",
        "Id": "8778ec0e1d85438eb30bffee9e2f9f05e024c533bc13a242ac744c2308a63b98",
        "Created": "2020-11-01T07:15:22.801328753Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
"Containers": {
            "379a17bef884a183d42976cbed881b46b6cf5205e50d436f37ccd23b8e017038": {
                "Name": "web",
                "EndpointID": "72c183c44b0aea0f99e3234b3acdc7ffa2b3579e9aee56ed0d1cc5c905d56368",
                "MacAddress": "",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            }
        },

해당 네트워크를 사용중인 컨테이너의 정보를 확인할 수 있다.

(subnet: 172.18.0.0/16 -> 172.18.*.* 로 2^16 개의 주소표현이 가능하다는 의미)

반응형