반응형
1. docker 초기 네트워크 list : cluster가 아닌 단독 머신
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
102b4a4b9e3c bridge bridge local # bridge 모드
f77f1779e8f2 host host local # 호스트와 만 통신
66f90b6293cc none null local # 없음.
2. 통신 흐름 (위 그림 참조)
- 외부 → 호스트 eth0 → docker0 (docker bridge) → veth*(docker0 ↔ container 사이의 가상 인터페이스) → container eth0
3. 인터페이스 확인
# 컨테이너 2개가 실행 중이고 새로운 브릿지(test_default)를 생성해 할당
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
102b4a4b9e3c bridge bridge local
f77f1779e8f2 host host local
66f90b6293cc none null local
52df863fe389 test_default bridge local
# test_default라는 bridge는 br-52df863fe389 라는 이름으로 172.22.0.0/16 대역을 할당하고 172.22.0.1의 게이트웨이 가상 인터페이스
# docker0 은 default bridge 인터페이스 이며 172.17.0.0/16 대역을 할당하고 172.17.0.1 게이트웨이
# veth* 인터페이스 2개는 실행중인 컨테이너 각각 앞단에 위치하는 가상 인터페이스이며 컨테이너 1개한 1개씩 생성 되고 IP 정보가 없다.(크로스 케이블 같은 걸로 연결했다고 생각하면 됨)
$ ifconfig
br-52df863fe389: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.22.0.1 netmask 255.255.0.0 broadcast 172.22.255.255
...
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
...
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.6.200 netmask 255.255.255.0 broadcast 192.168.6.255
...
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
...
veth049da25: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::28f3:5dff:fe76:1301 prefixlen 64 scopeid 0x20<link>
...
vethd298970: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::e83d:40ff:feed:fc8f prefixlen 64 scopeid 0x20<link>
...
# bridge-utils
$ brctl show
bridge name bridge id STP enabled interfaces
br-52df863fe389 8000.0242d41576fe no veth049da25
vethd298970
# network 정보
$ docker network inspect test_default
...
{
"Name": "test_default",
"Id": "52df863fe389c04aa0c07d36872b7852f5a99efb3b04913e6f64f93f0a882b7e",
"Created": "2021-03-24T20:03:25.456471568+09:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.22.0.0/16",
"Gateway": "172.22.0.1"
}
]
},
...
4. bridge network 생성
# 172.22.0.0/16 대역으로 172.22.0.1이 게이트웨이인 test_default 이름의 bridge network 생성
$ docker network create \
--driver bridge \
--ip-range 172.22.0.0/16 \
--subnet 172.22.0.0/16 \ # 서브넷은 아이피 범위와 동일. (동일해야함)
--gateway 172.22.0.1 \
test_default
5. 컨테이너에 bridge network 할당
# 컨테이너 실행
$ docker run -itd --name=test_nginx_1 --net=test_default -P nginx:latest
$ docker run -itd --name=test_centos7_1 --net=test_default -P ansible/centos7-ansible:latest
# 확인
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d1bec0c7389d nginx:latest "/docker-entrypoint.…" 4 hours ago Up 4 hours 80/tcp test_nginx_1
468b9e8889de ansible/centos7-ansible:latest "tail -f /dev/null" 4 hours ago Up 4 hours test_centos7_1
# bridge network 정보 확인
$ docker network inspect test_default
...
"Containers": {
"468b9e8889de0efeab6658879297cd9b9670b24bb087f703592c1adf12d8c060": {
"Name": "test_centos7_1",
"EndpointID": "dd457321f126f0a575658aed30fa43f728903da7a762948702d85a976befdb58",
"MacAddress": "02:42:ac:16:00:03",
"IPv4Address": "172.22.0.3/16",
"IPv6Address": ""
},
"d1bec0c7389db541ec982bad00c82eb1b2e59561189ae8ea0e2efdee5a9b967e": {
"Name": "test_nginx_1",
"EndpointID": "8e09c4d6a769783d12f3535d5780d17fbbee9e5444b1a538ebc60a92271030e4",
"MacAddress": "02:42:ac:16:00:02",
"IPv4Address": "172.22.0.2/16",
"IPv6Address": ""
}
},
...
6. ping test : test_centos7_1 → test_nginx_1 로 ping.
- bridge network로 묶여있고 같은 네트워크 대역이라 ping 및 tcp 등 통신이 가능함.
# test_centos7_1 접속
$ docker exec -it test_centos7_1 /bin/bash
# ping test
[root@468b9e8889de ansible]# ping test_nginx_1
PING test_nginx_1 (172.22.0.2) 56(84) bytes of data.
64 bytes from test_nginx_1.test_default (172.22.0.2): icmp_seq=1 ttl=64 time=0.309 ms
64 bytes from test_nginx_1.test_default (172.22.0.2): icmp_seq=2 ttl=64 time=0.078 ms
64 bytes from test_nginx_1.test_default (172.22.0.2): icmp_seq=3 ttl=64 time=0.089 ms
^C
--- test_nginx_1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.078/0.158/0.309/0.107 ms
# web test
[root@468b9e8889de ansible]# curl test_nginx_1
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
반응형
'Micro Service Architecture > Docker' 카테고리의 다른 글
22. Docker Network - Bridge (net-alias) (0) | 2021.03.24 |
---|---|
21. Docker Network - Bridge (네트워크 공유) (0) | 2021.03.24 |
19. docker-compose 문법 (0) | 2021.03.24 |
18. [docker] Bash Completion (0) | 2021.03.16 |
17. [docker] Private Registry(Harbor) 설치 및 Portainer 연동 (0) | 2021.03.16 |