Docker 컨테이너(container)는 격리된 환경에서 돌아가기 때문에 기본적으로 다른 컨테이너와의 통신이 불가능하다. 하지만 여러 개의 컨테이너를 하나의 Docker 네트워크(network)에 연결시키면 서로 통신이 가능해진다. 컨테이너 간 네트워킹이 가능하도록 도와주는 Docker 네트워크에 대해 알아보도록 하자.
네트워크 조회
docker network ls 명령어를 사용하면 현재 생성되어 있는 Docker 네트워크 목록을 조회할 수 있다.
$ docker network lsNETWORK ID NAME DRIVER SCOPE143496b94e57 bridge bridge local311d6534f79f host host localaa89f58200a6 none null localbridge, host, none은 Docker 데몬(daemon)이 실행되면서 디폴트로 생성되는 네트워크이다. 대부분의 경우에는 이러한 디폴트 네트워크를 이용하는 것 보다는 사용자가 직접 네트워크를 생성해서 사용하는 것이 권장된다.
network의 driver는 해당 네트워크의 작동 방식에 대한 것으로, 여기에서 더 자세한 내용을 볼 수 있다.
네트워크 생성
먼저 docker network create 커맨드를 사용해서 새로운 Docker 네트워크를 생성해보자.
$ docker network create our-netx6wfa4e9a5ec85abcb484662sdc30a3sdc76df21svsdqw76d52fac39faqw8412zz68$ docker network lsNETWORK ID NAME DRIVER SCOPE143496b94e57 bridge bridge local311d6534f79f host host localaa89f58200a6 none null locale6dfe4a9a5ec our-net bridge local추가된 네트워크는 docker network ls 커맨드로 확인할 수 있다. -d 옵션을 사용하지 않았기 때문에 기본값인 bridge 네트워크로 생성된 것을 볼 수 있다.
상세 정보 확인
docker network inspect로 네트워크의 상세 정보를 확인할 수 있다.
$ docker network inspect our-net[ { "Name": "our-net", "Id": "e6dfe4a9a5ec85abcb484662c30a3a0fc76df217dde76d52fac39fae8412ca68", "Created": "2020-04-26T19:23:04.563643516Z", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "172.19.0.0/16", "Gateway": "172.19.0.1" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": {}, "Options": {}, "Labels": {} }]아직 컨테이너에 연결하지 않았기 떄문에 Containers 항목이 비어있다.
네트워크에 컨테이너 연결
docker network connect [OPTIONS] NETWORK CONTAINER# docker network connect our-net oneour-net 네트워크의 상세 정보를 확인해보면 one이라는 컨테이너가 연결되어있는 것을 볼 수 있다.
$ docker network inspect bridge ... "Containers": { "660bafdce2996378cde070dfd894731bb90745e46d2ab10d6504c0cc9f4bdea9": { "Name": "one", "EndpointID": "40b4bbd8385debf86eef2fc2136315e1a82fa1ef72877bfae25477d6e8e46726", "MacAddress": "02:42:ac:11:00:04", "IPv4Address": "172.17.0.4/16", "IPv6Address": "" }, }, ...생성하는 동시에 연결하고싶다면 이렇게 할 수 있다.
$ docker run -itd --name two --network our-net busybox0e7fe8a59f9d3f8bd545d3e557ffd34100a09b8ebe92ae5a375f37a5d072873d