網(wǎng)絡
docker network ls
:可以查看docker有哪些網(wǎng)絡。
[root@VM_centos ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
78c42baf28ef bridge bridge local
1db606f36f61 host host local
717d0aafe538 none null local
--network=
運行容器的時候用network參數(shù)可以指定運行哪一種網(wǎng)絡。
[root@VM_centos ~]# docker run -it --network=none busybox
none網(wǎng)絡
不掛任何網(wǎng)卡筛欢,只有一個回環(huán)網(wǎng)絡闯冷,也就是說只有docker容器自己才可以訪問秤茅,其它docker或者外網(wǎng)都不可以訪問铐维。適用于無外網(wǎng)需求且安全性比較高的網(wǎng)絡柬泽。
/ # ifconfig
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)
host
和宿主機共用一個網(wǎng)絡地址,網(wǎng)絡配置和宿主機一模一樣方椎。
bridge
宿主機安裝Docker服務時會創(chuàng)建一個 命名為 docker0 的網(wǎng)橋聂抢。如果不指定–network钧嘶,創(chuàng)建的容器默認都會掛到 docker0 上棠众,也就是說在同一個網(wǎng)段。
[root@VM_centos ~]# ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:81:eb:c2:75 txqueuelen 0 (Ethernet)
RX packets 44695 bytes 3016158 (2.8 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 52558 bytes 133682121 (127.4 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
自定義網(wǎng)絡
docker network create --driver bridge mybridge
-- 如果便創(chuàng)建一個網(wǎng)橋名為mybridge的網(wǎng)絡
[root@VM_90_159_centos ~]# ifconfig
br-5636da1dfd13: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.18.0.1 netmask 255.255.0.0 broadcast 172.18.255.255
ether 02:42:45:71:e5:b5 txqueuelen 0 (Ethernet)
RX packets 2316 bytes 173571 (169.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2711 bytes 13314288 (12.6 MiB)
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
ether 02:42:81:eb:c2:75 txqueuelen 0 (Ethernet)
RX packets 47016 bytes 3157613 (3.0 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 55274 bytes 146996787 (140.1 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
-- 查詢網(wǎng)絡會發(fā)現(xiàn)多了一個br-5636da1dfd13的網(wǎng)橋。
docker run -it --network mybridge centos
-- 運行docker容器闸拿,并把網(wǎng)絡設為mybridge 空盼。
docker之間網(wǎng)絡互通?
同一個網(wǎng)絡中的不同docker容器就能互通新荤;不同網(wǎng)絡中的不同docker容器不能互通揽趾。
比如一個172.18.0.1網(wǎng)段的docker容器,一個 172.17.0.1 網(wǎng)段的docker容器是不能互通的苛骨,如果想互通篱瞎,需要把另外一臺docker容器添加到相同的網(wǎng)絡中,比如:
docker network connect mybridge fbff14cb396f
docker和外界聯(lián)系
NAT,網(wǎng)絡地址轉(zhuǎn)換痒芝。docker把包發(fā)出去給外界俐筋,網(wǎng)橋會把包中的源地址替換成host地址。
外界與docker聯(lián)系
端口映射严衬。外界把包發(fā)給docker澄者,目標地址用的是host的地址,host再根據(jù)端口號请琳,根據(jù)端口映射找到對應的docker程序粱挡,然后發(fā)出去。