브리지 네트워크는 기본 docker0 브리지가 아닌 사용자 정의 브리지를 새로 생성해 각 컨테이너에 연결할 수 있다.
컨테이너는 연결된 브리지를 통해 외부와 통신할 수 있다.
기본적으로 존재하는 docker0를 사용하는 브리지 네트워크가 아닌 새로운 브리지 타입의 네트워크를 생성
root@red-virtual-machine:~# docker network create --driver bridge mybridge
980ce48afa70afaaa981b75f5ec794f084d77fedde97134259ccc13b902a8e2a
생성된 도커 브리지 확인
root@red-virtual-machine:~# docker network ls
NETWORK ID NAME DRIVER SCOPE
1ab9e3b84bac bridge bridge local <-- 기본 도커 네트워크 드라이버(브리지)
52cbe87fc308 host host local
5ff836f5f909 my_custom_network bridge local
980ce48afa70 mybridge bridge local <-- 방금 생성
a0d789747ff4 none null local
새로 생성한 mybridge 네트워크를 사용하는 컨테이너 생성
root@red-virtual-machine:~# docker run -i -t --name mynetwork_container --net mybridge ubuntu:14.04
컨테이너의 ip를 확인하면 새로운 IP 대역인 172.18 대역으로 내부 IP가 할당 되었다.
root@8e473f10523f:/# ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:ac:12:00:02
inet addr:172.18.0.2 Bcast:172.18.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:48 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:6751 (6.7 KB) TX bytes:0 (0.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
호스트 IP 구성을 확인하면 새로운 브리지와 컨테이너의 가상 네트워크 인터페이스를 확인 할 수 있다.
root@red-virtual-machine:~# ifconfig
br-980ce48afa70: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.18.0.1 netmask 255.255.0.0 broadcast 172.18.255.255
inet6 fe80::42:55ff:fe07:2dca prefixlen 64 scopeid 0x20<link>
ether 02:42:55:07:2d:ca txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 29 bytes 4260 (4.2 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
inet6 fe80::42:6bff:fefe:f54e prefixlen 64 scopeid 0x20<link>
ether 02:42:6b:fe:f5:4e txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 35 bytes 4882 (4.8 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.159.128 netmask 255.255.255.0 broadcast 192.168.159.255
inet6 fe80::91dd:c79d:4366:c741 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:67:67:2d txqueuelen 1000 (Ethernet)
RX packets 36847 bytes 53113401 (53.1 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 5276 bytes 399479 (399.4 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 364 bytes 32608 (32.6 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 364 bytes 32608 (32.6 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
veth3df71ce: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::d05a:3fff:feff:f801 prefixlen 64 scopeid 0x20<link>
ether d2:5a:3f:ff:f8:01 txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 54 bytes 7319 (7.3 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
vethb4fef0e: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::2021:4dff:fe1a:6bba prefixlen 64 scopeid 0x20<link>
ether 22:21:4d:1a:6b:ba txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 70 bytes 8826 (8.8 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
브리지에 연결된 컨테이너를 유동적으로 붙이고 뗄 수 있다.
root@red-virtual-machine:~# docker network disconnect mybridge mynetwork_container
ipconfig로 확인하면 veth 하나가 사라진다.
root@red-virtual-machine:~# docker network connect mybridge mynetwork_container
ipconfig로 확인하면 veth 하나가 새로 생긴다.
네트워크의 서브넷, 게이트웨이, IP 할당 범위 등을 임의로 설정
root@red-virtual-machine:~# docker network create --driver=bridge --subnet=172.72.0.0/16 --ip-range=172.72.0.0/24 --gateway=172.72.0.1 my_custom_network
5ff836f5f9098c1b2bde6a292c0663d5680f310bdd54db0fa61af7ae891579fe
단 subnet과 ip-rage는 같은 대역이어야 한다.