Docker 네트워크 설정
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 개의 주소표현이 가능하다는 의미)