日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Docker--网络详解

發(fā)布時間:2023/12/20 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker--网络详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 一、Docker網(wǎng)絡(luò)原理
    • 1.1**容器內(nèi)先安裝net-tools工具yum install -y net-tools然后查看容器IP(container ip)**
    • 1.2**默認(rèn)網(wǎng)絡(luò)**

一、Docker網(wǎng)絡(luò)原理

Docker使用Linux橋接,在宿主機(jī)虛擬一個Docker容器網(wǎng)橋(docker0),Docker啟動一個容器時會根據(jù)Docker網(wǎng)橋的網(wǎng)段分配給容器一個IP地址,稱為Container-IP, 同時Docker網(wǎng)橋是 每個容器的默認(rèn)網(wǎng)關(guān)。因?yàn)樵谕凰拗鳈C(jī)內(nèi)的容器都接入同一個網(wǎng)橋,這樣容器之間就能夠通過容器的Container-IP直接通信

[root@localhost ~]# ifconfig docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255ether 02:42:b1:c5:3b:4f txqueuelen 0 (Ethernet)RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 0 bytes 0 (0.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

1.1容器內(nèi)先安裝net-tools工具yum install -y net-tools然后查看容器IP(container ip)

[root@localhost ~]# yum install -y net-tools [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2d1f43c3d536 tomcat:latest "/bin/bash" 6 seconds ago Created reverent_banzai#使用大寫p進(jìn)行隨機(jī)端口映射 [root@localhost ~]# docker run -itd --name test1 -P tomcat 95fffcb47dbbd93ed798ada33a54b2aa5b17d8fb1e4a7ab73fb638501ca54a5b [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 95fffcb47dbb tomcat "catalina.sh run" 5 seconds ago Up 4 seconds 0.0.0.0:49153->8080/tcp, :::49153->8080/tcp test1 2d1f43c3d536 tomcat:latest "/bin/bash" 2 minutes ago Exited (137) About a minute ago reverent_banzai#使用小寫p加端口進(jìn)行指定的端口映射 [root@localhost ~]# docker run -itd --name test2 -p 49110:80 tomcat 581f77fc4c7cd42d2c41bd9126d9ff0226583e3368d8366dedb1a56e4417a389 [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 581f77fc4c7c tomcat "catalina.sh run" 3 seconds ago Up 2 seconds 8080/tcp, 0.0.0.0:49110->80/tcp, :::49110->80/tcp test2 95fffcb47dbb tomcat "catalina.sh run" 2 minutes ago Up 2 minutes 0.0.0.0:49153->8080/tcp, :::49153->8080/tcp test1 2d1f43c3d536 tomcat:latest "/bin/bash" 4 minutes ago Exited (137) 3 minutes ago reverent_banzai#測試 分別登錄192.168.237.141:49110和192.168.237.141:49153可以訪問tomcat頁面#可以訪問是因?yàn)橥ㄟ^iptables的DNAT進(jìn)行了轉(zhuǎn)換 [root@localhost ~]# iptables -nL -t nat Chain PREROUTING (policy ACCEPT) target prot opt source destination DOCKER all -- 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCALChain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination DOCKER all -- 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE match dst-type LOCALChain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUERADE all -- 172.17.0.0/16 0.0.0.0/0 RETURN all -- 192.168.122.0/24 224.0.0.0/24 RETURN all -- 192.168.122.0/24 255.255.255.255 MASQUERADE tcp -- 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535 MASQUERADE udp -- 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535 MASQUERADE all -- 192.168.122.0/24 !192.168.122.0/24 MASQUERADE tcp -- 172.17.0.2 172.17.0.2 tcp dpt:8080 MASQUERADE tcp -- 172.17.0.3 172.17.0.3 tcp dpt:80Chain DOCKER (2 references) target prot opt source destination RETURN all -- 0.0.0.0/0 0.0.0.0/0 DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:49153 to:172.17.0.2:8080 DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:49110 to:172.17.0.3:80

1.2默認(rèn)網(wǎng)絡(luò)

當(dāng)你安裝Docker時,它會自動創(chuàng)建三個網(wǎng)絡(luò)。你可以使用以下docker network ls命令列出這些網(wǎng)絡(luò)

[root@localhost ~]# docker network ls NETWORK ID NAME DRIVER SCOPE 69b39f1a9e1a bridge bridge local da57f14ea87a host host local b3681285c530 none null local

Docker網(wǎng)絡(luò)類型

網(wǎng)絡(luò)類型描述
Host容器將不會虛擬出自己的網(wǎng)卡,配置自己的IP等,而是使用宿主機(jī)的IP和端口
Container創(chuàng)建的容器不會創(chuàng)建自己的網(wǎng)卡,配置自己的IP,而是和一個指定的容器共享IP、端口范圍
None該模式關(guān)閉了容器的網(wǎng)絡(luò)功能
Bridge默認(rèn)為該模式,此模式會為每一個 容器分配、設(shè)置IP等,并將容器連接到一個docker0虛擬網(wǎng)橋,通過docker0網(wǎng)橋以及iptables nat表配置與宿主機(jī)通信
自定義網(wǎng)絡(luò)模式安裝Docker時,它會自動創(chuàng)建三個網(wǎng)絡(luò),bridge (創(chuàng)建容器默認(rèn)連接到此網(wǎng)絡(luò))、none 、host

使用docker run 創(chuàng)建Docker容器時,可以用–net或–network 選項(xiàng)指定容器的網(wǎng)絡(luò)模式

網(wǎng)絡(luò)類型描述
host模式使用–net=host指定
Container模式使用–net=none 指定
None模式使用–net=container:NAME_ _or_ID指定
Bridge模式使用–net=bridge指定,默認(rèn)設(shè)置,可省略

Host模式
Host 模式并沒有為容器創(chuàng)建一個隔離的網(wǎng)絡(luò)環(huán)境。而之所以稱之為host模式,是因?yàn)樵撃J较碌?Docker 容器會和 host 宿主機(jī)共享同一個網(wǎng)絡(luò) namespace,故 Docker Container可以和宿主機(jī)一樣,使用宿主機(jī)的eth0,實(shí)現(xiàn)和外界的通信。換言之,Docker Container的 IP 地址即為宿主機(jī) eth0 的 IP 地址,其特點(diǎn)包括:

(1)這種模式下的容器沒有隔離的 network namespace
(2)容器的 IP 地址同 Docker host 的 IP 地址
(3)需要注意容器中服務(wù)的端口號不能與 Docker host 上已經(jīng)使用的端口號相沖突
(3)host 模式能夠和其它模式共存
container模式
Container 網(wǎng)絡(luò)模式是 Docker 中一種較為特別的網(wǎng)絡(luò)的模式。處于這個模式下的 Docker 容器會共享其他容器的網(wǎng)絡(luò)環(huán)境,因此,至少這兩個容器之間不存在網(wǎng)絡(luò)隔離,而這兩個容器又與宿主機(jī)以及除此之外其他的容器存在網(wǎng)絡(luò)隔離

[root@localhost ~]# docker inspect -f '{{.State.Pid}}' 95fffcb47dbb #查看容器進(jìn)程PID 5996 [root@localhost ~]# ls -l /proc/5996/ns 總用量 0 lrwxrwxrwx. 1 root root 0 7月 10 23:58 ipc -> ipc:[4026532623] lrwxrwxrwx. 1 root root 0 7月 10 23:58 mnt -> mnt:[4026532621] lrwxrwxrwx. 1 root root 0 7月 10 23:38 net -> net:[4026532626] #查看container模式的Network Namespace lrwxrwxrwx. 1 root root 0 7月 10 23:58 pid -> pid:[4026532624] lrwxrwxrwx. 1 root root 0 7月 10 23:58 user -> user:[4026531837] lrwxrwxrwx. 1 root root 0 7月 10 23:58 uts -> uts:[4026532622][root@localhost ~]# docker run -itd --name test4 --net=container:95fffcb47dbb centos bash 590162d14ba58f544969ab80754389f6667799f27e92b276013f6cc83b71907f [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 590162d14ba5 centos "bash" 27 seconds ago Up 26 seconds test4 431ecd6d0eec tomcat "bash" 5 minutes ago Up 5 minutes test3 581f77fc4c7c tomcat "catalina.sh run" 25 minutes ago Up 25 minutes 8080/tcp, 0.0.0.0:49110->80/tcp, :::49110->80/tcp test2 95fffcb47dbb tomcat "catalina.sh run" 27 minutes ago Up 27 minutes 0.0.0.0:49153->8080/tcp, :::49153->8080/tcp test1 2d1f43c3d536 tomcat:latest "/bin/bash" 30 minutes ago Exited (137) 29 minutes ago reverent_banzai [root@localhost ~]# docker inspect -f '{{.State.Pid}}' 590162d14ba5 6713 [root@localhost ~]# ls -l /proc/6713/ns 總用量 0 lrwxrwxrwx. 1 root root 0 7月 11 00:06 ipc -> ipc:[4026532845] lrwxrwxrwx. 1 root root 0 7月 11 00:06 mnt -> mnt:[4026532843] lrwxrwxrwx. 1 root root 0 7月 11 00:06 net -> net:[4026532626] #container模式的Network Namespace和上面的一致 lrwxrwxrwx. 1 root root 0 7月 11 00:06 pid -> pid:[4026532846] lrwxrwxrwx. 1 root root 0 7月 11 00:06 user -> user:[4026531837] lrwxrwxrwx. 1 root root 0 7月 11 00:06 uts -> uts:[4026532844]

none模式
網(wǎng)絡(luò)模式為 none,即不為 Docker 容器構(gòu)造任何網(wǎng)絡(luò)環(huán)境。一旦Docker 容器采用了none 網(wǎng)絡(luò)模式,那么容器內(nèi)部就只能使用loopback網(wǎng)絡(luò)設(shè)備,不會再有其他的網(wǎng)絡(luò)資源。Docker Container的none網(wǎng)絡(luò)模式意味著不給該容器創(chuàng)建任何網(wǎng)絡(luò)環(huán)境,容器只能使用127.0.0.1的本機(jī)網(wǎng)絡(luò)
bridge模式
Docker 容器默認(rèn)使用 bridge 模式的網(wǎng)絡(luò)。其特點(diǎn)如下:

(1)使用一個 linux bridge,默認(rèn)為 docker0
(2)使用 veth 對,一頭在容器的網(wǎng)絡(luò) namespace 中,一頭在 docker0 上
(3)該模式下Docker Container不具有一個公有IP,因?yàn)樗拗鳈C(jī)的IP地址與veth pair的 IP地址不在同一個網(wǎng)段內(nèi)
(4)Docker采用 NAT 方式,將容器內(nèi)部的服務(wù)監(jiān)聽的端口與宿主機(jī)的某一個端口port 進(jìn)行“綁定”,使得宿主機(jī)以外的世界可以主動將網(wǎng)絡(luò)報文發(fā)送至容器內(nèi)部
(5)外界訪問容器內(nèi)的服務(wù)時,需要訪問宿主機(jī)的 IP 以及宿主機(jī)的端口 port
(6)NAT 模式由于是在三層網(wǎng)絡(luò)上的實(shí)現(xiàn)手段,故肯定會影響網(wǎng)絡(luò)的傳輸效率
(7)容器擁有獨(dú)立、隔離的網(wǎng)絡(luò)棧;讓容器和宿主機(jī)以外的世界通過NAT建立通信
自定義網(wǎng)絡(luò)模式創(chuàng)建步驟

[root@localhost ~]# docker network create --subnet=172.18.0.0/16 --opt "com.docker.network.bridge.name"="docker1" mynetwork dc47693a08090ecfbccdfef829aad2dfe1e6104dbe35f663935c0b3937e39d25[root@localhost ~]# ifconfig docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255inet6 fe80::42:b1ff:fec5:3b4f prefixlen 64 scopeid 0x20<link>ether 02:42:b1:c5:3b:4f txqueuelen 0 (Ethernet)RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 12 bytes 1668 (1.6 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0docker1: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500inet 172.18.0.1 netmask 255.255.0.0 broadcast 172.18.255.255ether 02:42:94:ae:e6:48 txqueuelen 0 (Ethernet)RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 0 bytes 0 (0.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

指定IP運(yùn)行docker

[root@localhost ~]# docker run -it --name test7 --net mynetwork --ip 172.18.0.15 centos:7 /bin/bash [root@228a9b43ff7b /]# yum install net-tools[root@228a9b43ff7b /]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 172.18.0.15 netmask 255.255.0.0 broadcast 172.18.255.255ether 02:42:ac:12:00:0f txqueuelen 0 (Ethernet)RX packets 2895 bytes 23643460 (22.5 MiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 2007 bytes 111783 (109.1 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

總結(jié)

以上是生活随笔為你收集整理的Docker--网络详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。