Docker는 몇가지 네트워크 드라이버를 기본 제공하여 강력한 네트워크 기능을 활용할 수 있게 합니다.
상세 내용은 Docker Docs를 참고하시기 바랍니다. ( Docker Docs - Network )
기존에 컨테이너 간 통신에 사용하던 docker run –link 옵션은 legacy 기능이 되었습니다. 새로운 컨테이너 간 통신 방법을 확인할 필요가 있습니다. ( Docker Docs - link )
기본적으로 컨테이너는 IP주소로만 접근할 수 있습니다. 반면에, user defined bridge network 적용시 컨테이너의 명으로 접근해 편리하게 네트워크 기능을 수행할 수 있습니다.
또한, docker network 명령어로 네트워크에 컨테이너 추가/해제가 컨테이너의 생성/삭제 없이 쉽고 가볍게 이루어집니다. 이를 활용해 시스템 요구사항에 맞는 다양한 활용법을 적용할 수 있습니다. (배포전략 등)
동일한 user defined bridge network 에 연결된 컨테이너는 모든 Port를 서로에게 노출시키고 외부에는 Port를 노출하지 않습니다. 이를 통해 private 네트워크를 구성해 시스템의 보안 level을 높일 수 있습니다.
Docker Network의 기본동작을 확인하고, 다양한 경우의 수를 대비한 컨테이너 간 통신을 테스트합니다. 마지막으로 private network 상의 API 서버를 구현해 실제 적용할 수 있는 최소단위의 구성을 해보겠습니다.
docker network 명령어의 기본 동작을 확인해보겠습니다. 상세한 옵션 등은 Docker Docs나 Docker cli 상의 help option을 확인하시면 됩니다.
ls
docker network ls
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
251862fde7a0 bridge bridge local
aa6913be5189 host host local
c455da940d9b none null local
docker network create {network 명}
$ docker network create js-network
b89583ee19716b63c30d59a5d2d21a39f3cd30ecbcced537793e9fe6a4407195
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
251862fde7a0 bridge bridge local
aa6913be5189 host host local
b89583ee1971 js-network bridge local
c455da940d9b none null local
inspect
docker network inspect {network 명}
$ docker network inspect js-network
[
{
"Name": "js-network",
"Id": "b89583ee19716b63c30d59a5d2d21a39f3cd30ecbcced537793e9fe6a4407195",
"Created": "2018-03-21T07:14:28.207599689Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
docker network connect {network 명} {container 명}
$ docker network connect js-network jisang-ms1
$ docker network inspect js-network
[
{
"Name": "js-network",
"Id": "b89583ee19716b63c30d59a5d2d21a39f3cd30ecbcced537793e9fe6a4407195",
"Created": "2018-03-21T07:14:28.207599689Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"fe50dfe7788f46b4df3e25a128bec292f4263167dafa116ef4e68a47aeaccdcb": {
"Name": "jisang-ms1",
"EndpointID": "c7c9a46ad6715cc65250a502bbd28c1bc389514d1f1db6136b90f12e483681e0",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
disconnect
docker network disconnect {network 명} {container 명}
$ docker network disconnect js-network jisang-ms1
$ docker network inspect js-network
[
{
"Name": "js-network",
"Id": "b89583ee19716b63c30d59a5d2d21a39f3cd30ecbcced537793e9fe6a4407195",
"Created": "2018-03-21T07:14:28.207599689Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
docker network rm {network 명}
$ docker network rm js-network
js-network
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
251862fde7a0 bridge bridge local
aa6913be5189 host host local
c455da940d9b none null local
docker run
docker run --network={network 명} {컨테이너 image}
$ docker run -d --network=js-network -e SPRING_PROFILES_ACTIVE=docker --name jisang-ms1 jisang-ms1:latest
4e1c75a6f44763a4ac0266271698448491905388dd69397aaf84eda641464058
$ docker network inspect js-network
[
{
"Name": "js-network",
"Id": "3e7b219d5c06c4a817ebf499316a4758f016d747b6be8a0d5b83ba108620e42c",
"Created": "2018-03-21T07:38:35.244071424Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"4e1c75a6f44763a4ac0266271698448491905388dd69397aaf84eda641464058": {
"Name": "jisang-ms1",
"EndpointID": "4c3b9ea660520f6ed6463575e6ec44f7a2652a43c075ee5f640367f00ec6a2ec",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
지금까지 Docker의 user defined network에 대해 알아보고 docker network 명령어의 간단 동작을 수행해보았습니다.
다음 포스팅에서는 컨테이너 간 통신에 연관된 factors를 확인하고 경우의 수를 찾아 테스트를 진행해보겠습니다.