Docker
docker network
개발자깡
2024. 3. 27. 13:34
rabbitmq clustering을 구성하기 위해 서로 다른 호스트의 컨테이너끼리 통신이 필요했는데 docker network overlay로 해결을 하게 되어 정리해본다.
docker swarm으로 host1에 조인을 먼저 해준다.
[host1]
docker swarm init
*토큰이 기억안날때*
docker swarm join-token manager
init은 host1에서만 진행하여도 된다. init할때 나온 join 명령어를 join할 host에서 복붙해준다.
[host2]
docker swarm join --token [token] [ip]:[port]
*join 확인하기*
docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
dkp8vy1dq1kxleu9g4u78tlag * manager2 Ready Active Reachable
dvfxp4zseq4s0rih1selh0d20 manager1 Ready Active Leader
노드를 확인해보면 host1과host2가 연결된 것을 확인할 수 있다.
*표시는 현재 서버(host2)를 표시한것.
여기까지 하면 기본적으로 docker_gwbridge와 ingress라는 네트워크가 생성된다.
docker_gwbridge는 Overlay Network를 Docker Deamon의 물리적 Network에 연결하는 Bridge Network이고,
ingress는 Service되는 Node간 Load Balancing을 하는 Overlay Network이다.
[host1]
docker network create -d overlay --attachable overnet
여기까지하면 기본적으로 ingress라는 이름으로 overlay swarm이 생성된다.
compose 파일에서 네트워크를 생성할것이 아니라면 사용할 네트워크를 create해준다.
[host1, 2]
docker network connect [networkname] [containername]
docker network inspect [networkname]
[
{
"Name": "overnet",
"Id": "26pngezmy4rfnf5i6hou6yt15",
"Created": "2024-03-26T01:51:21.641722299Z",
"Scope": "swarm",
"Driver": "overlay",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "10.0.3.0/24",
"Gateway": "10.0.3.1"
}
]
},
"Internal": false,
"Attachable": true,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"8bc03d5b8d83dcb1a99d0f8eae5a4a2ba33b8737fa8c7d553b125604dc1f34c4": {
"Name": "agw-broker2",
"EndpointID": "749a679f3ba3a6536e75227146660e29e773dae5c2eca42317fef962594b8257",
"MacAddress": "02:42:0a:00:03:04",
"IPv4Address": "10.0.3.4/24",
"IPv6Address": ""
},
"lb-overnet": {
"Name": "overnet-endpoint",
"EndpointID": "d834f81be3552ec162f4749794907a7f3478ed9a8cf50f2f93723f51ccbbe446",
"MacAddress": "02:42:0a:00:03:05",
"IPv4Address": "10.0.3.5/24",
"IPv6Address": ""
}
},
"Options": {
"com.docker.network.driver.overlay.vxlanid_list": "4099"
},
"Labels": {},
"Peers": [
{
"Name": "d9c07683c75f",
"IP": "172.30.0.184"
}
]
}
]
기존에 있던 컨테이너에 네트워크 연결해주고 inspect로 확인하면 컨테이너가 잘 연결된걸 확인할 수 있다.
ec2에서 작업한다면 포트열어주기!
- 2377/tcp : 클러스터 관리
- 4789/udp : Ingress overlay 네트워크 트래픽
- 7946/tcp,udp : 노드 간 통신
docker exec [containername] ping [host IPv4Address]
각 host끼리 ping 보내보기.