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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Docker初学乍练之单主机网络

發布時間:2025/3/20 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker初学乍练之单主机网络 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、Docker bridge network

Docker 橋接網絡使用軟件橋接, 該軟件橋接允許連接到同一橋網的容器進行通信, 同時提供與未連接到該橋網絡的容器的隔離。Docker 橋接驅動程序會自動在主機中安裝規則, 以便不同橋接網絡上的容器不能直接相互通信。橋接網絡適用于在同一 Docker 守護進程主機上運行的容器。Docker 默認網絡類型為橋接,對于橋接網絡用戶可以使用docker默認的,也可以自定義橋接網絡,自定義的橋接網絡優先級高于默認的。

1、Docker default bridge

1.1、基于docker默認橋接網絡的橋接容器

橋接式容器,一般擁有兩個接口:一個環回接口和一個連接至物理機docker0網卡上的以太網接口;物理機docker0網卡其實是NAT橋,因此橋接式容器可通過此接口訪問外部網絡,但防火墻規則阻止了一切從外部網絡訪問橋接式容器的請求

[root@node ~]# docker container run --name br-net1 -it --rm busybox:latest / # ip add 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever 22: eth0@if23: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ffinet 172.17.0.2/16 brd 172.17.255.255 scope global eth0valid_lft forever preferred_lft forever

橋接網絡中,容器網卡與物理機網卡各占docker虛擬網卡的一半,網關默認為物理機網卡172.17.0.1,為容器自動分配0.2到0.254的地址

1.2、基于docker默認橋接網絡的開放式容器

開放容器內服務到橋接式網絡宿主機外部去

1.2.1、“-P“選項或”--publish-all“將容器的所有計劃要開放端口全部映射至主機端口,計劃要開放的端口使用--expose選項指定

docker container run --name myweb --rm -it -P --expose 2000 --expose 2001 busybox

查看映射結果

[root@node ~]# docker port myweb 2000/tcp -> 0.0.0.0:32770 2001/tcp -> 0.0.0.0:32769

1.2.2、“-p”選項

使用格式:
-p <containerPort> :將指定的容器端口映射至主機所有地址的一個動態端口

示例:docker container run --name myweb --rm -p 80 busybox

-p <hostPort>:<containerPort>:將容器端口<containerPort>映射至指定的主機端口<hostPort>

示例:docker container run --name myweb --rm -p 8080:80 busybox -p <ip>::<containerPort>:將指定的容器端口<containerPort>映射至主機指定<ip>的動態端口 示例:docker container run --name myweb --rm -p 192.168.143.130::80 busybox -p <ip>:<hostPort>:<containerPort>:將指定的容器端口<containerPort>映射至主機指定<ip>的端口<hostPort> 示例:docker container run --name myweb --rm -p 192.168.143.130:8080:80 busybox

Ps:”動態端口“指隨機端口,具體的映射結果可使用docker port命令查看

1.3、基于docker默認橋接網路的聯盟式容器

聯盟式容器,是指使用某個已存在容器的網絡接口的容器,容器間的Network、IPC、UTS是共享的,共用的網絡與進程間通信協議棧讓容器間可通過環回口通信
聯盟式容器彼此間存在端口沖突的可能性,因此,通常只會在多個容器上的程序需要程序loopback接口互相通信、或對某已存在的容器的網絡屬性進行監控時才使用此種模式的網絡類型
示例:
創建容器b1

[root@node ~]# docker container run -it --rm --name b1 busybox:latest / # ip add 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever 34: eth0@if35: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ffinet 172.17.0.2/16 brd 172.17.255.255 scope global eth0valid_lft forever preferred_lft forever

創建容器b2,加入容器b1的網絡,

[root@node ~]# docker container run --name b2 --network container:b1 -it --rm busybox:latest / # ip add 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever 34: eth0@if35: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ffinet 172.17.0.2/16 brd 172.17.255.255 scope global eth0valid_lft forever preferred_lft forever

1.4、默認橋接網絡的配置

創建或運行容器時,通過--network參數指明網絡類型
Docker-daemon配置文件中關于橋接網絡的配置

{"bip": "10.0.0.1/24","fixed-cidr": "10.0.0.1/25","fixed-cidr-v6": "2001:db8::/64","mtu": 1500,"default-gateway": "10.0.0.1","default-gateway-v6": "2001:db8:abcd::89","dns": ["10.0.0.1","10.0.20.1"] }

2、自定義橋接網絡

通過network命令集實現網絡的自定義

2.1、創建與刪除自定義橋接網絡

docker network create my-net docker network rm my-net

2.2、查看自定義橋接網絡信息

docker inspect my-net[{"Name": "my-net","Id": "eaeb9efaf1fe290ec90b6f8e79b1ae76f14bb8048f03511ff28946eb1aa666e7","Created": "2019-04-24T09:21:04.123600659-07:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": {},"Config": [{"Subnet": "172.18.0.0/16","Gateway": "172.18.0.1"}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {},"Options": {},"Labels": {}} ]

2.3、創建容器時連接容器到自定義橋接網絡,通過--network參數指定

[root@node1 docker-img]# docker container run --name myweb --network my-net -it --rm busybox:latest / # ip add 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever 200: eth0@if201: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ffinet 172.18.0.2/16 brd 172.18.255.255 scope global eth0valid_lft forever preferred_lft forever

2.4、容器運行是加入自定義橋接網絡

docker container run --name myweb -it --rm busybox:latest docker network connect my-net myweb myweb上查看是否連接自定義橋接網絡 / # ip add 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever 202: eth0@if203: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue link/ether 02:42:0a:00:00:02 brd ff:ff:ff:ff:ff:ffinet 10.0.0.2/24 brd 10.0.0.255 scope global eth0valid_lft forever preferred_lft forever 204: eth1@if205: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ffinet 172.18.0.2/16 brd 172.18.255.255 scope global eth1valid_lft forever preferred_lft forever

2.5、斷開自定義橋接網絡

docker network disconnect my-net myweb

3、自定義橋接網絡與默認橋接網絡的區別

? 用戶定義的橋接網絡提供自動DNS解析,默認橋接網絡只能通過IP地址通信

? 容器可以動態連接并與用戶定義的網絡分離,在容器的生存期內, 您可以動態地將其與用戶定義的網絡連接或斷開。若要從默認橋接網絡中刪除容器, 需要停止該容器, 然后使用不同的網絡選項重新創建它。

? 用戶自定義的橋接網絡可根據容器的功能分別配置用戶自定義的橋接網絡可以選擇啟用或停用IPv6,而默認橋接網絡在docker支持配置IPv6的情況下,默認橋接網絡會自動為 IPv6 配置,而不能禁用。

Ps:因為默認的橋接網絡在功能上不如自定義橋接網絡完善,且存在設計缺陷,Docker 官方不建議在生產環境使用此種網絡

二、Docker host network

Docker 容器使用主機網絡,則該容器的網絡堆棧不會與 Docker 主機隔離。例如, 如果運行綁定到端口80的容器并使用主機網絡, 則該容器的應用程序將在主機 ip 地址上的端口80上可用。主機網絡僅適用于Linux主機。
容器加入主機網絡

[root@node ~]# docker container run --name b2 --network host -it --rm busybox:latest / # echo "hello docker" > /tmp/index.html / # httpd -h /tmp/宿主機訪問 [root@node ~]# curl 127.0.0.1 hello docker

三、Docker none network

不參與網絡通信,運行于此類容器中的進程僅能訪問本地環回接口,僅適用于進程無須網絡通信的場景中,例如備份、進程診斷及各種離線任務等
創建封閉式容器

[root@node ~]# docker container run --name br-net1 -it --network none --rm busybox:latest / # ip add 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever

參考文章:
docker docs:https://docs.docker.com/network/

轉載于:https://blog.51cto.com/jiayimeng/2384261

總結

以上是生活随笔為你收集整理的Docker初学乍练之单主机网络的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。