注冊用戶即可下載全站資源 關注Java幫幫微信公眾號
 

Docker學習之網絡模式配置

4
發表時間:2018-11-08 14:43來源:Java幫幫-微信公眾號

日本韩国三级aⅴ在线观看以前搭建過虛擬機(vmware)的小伙伴,有可能知道vmware為我們提供了三種網絡工作模式,它們分別是:Bridged(橋接模式)、NAT(網絡地址轉換模式)、Host-Only(僅主機模式)。

網絡模式

顯然Docker 也支持4種網絡模式供大家選擇:

  • 日本韩国三级aⅴ在线观看host模式,使用- -net=host指定。

  • container模式,使用- -net=container:NAME_or_ID指定。

  • 日本韩国三级aⅴ在线观看none模式,使用- -net=none指定。

  • bridge模式,使用- -net=bridge指定,默認設置。

host模式

眾所周知,Docker使用了Linux的Namespaces技術來進行資源隔離,如PID Namespace隔離進程,Mount Namespace隔離文件系統,Network Namespace隔離網絡等。一個Network Namespace提供了一份獨立的網絡環境,包括網卡、路由、Iptable規則等都與其他的Network Namespace隔離。一個Docker容器一般會分配一個獨立的Network Namespace。但如果啟動容器的時候使用host模式,那么這個容器將不會獲得一個獨立的Network Namespace,而是和宿主機共用一個Network Namespace。容器將不會虛擬出自己的網卡,配置自己的IP等,而是使用宿主機的IP和端口。

例如,我們在10.10.101.105/24的機器上用host模式啟動一個含有web應用的Docker容器,監聽tcp80端口。當我們在容器中執行任何類似ifconfig命令查看網絡環境時,看到的都是宿主機上的信息。而外界訪問容器中的應用,則直接使用10.10.101.105:80即可,不用任何NAT轉換,就如直接跑在宿主機中一樣。但是,容器的其他方面,如文件系統、進程列表等還是和宿主機隔離的。

container模式

日本韩国三级aⅴ在线观看在理解了host模式后,這個模式也就好理解了。這個模式指定新創建的容器和已經存在的一個容器共享一個Network Namespace,而不是和宿主機共享。新創建的容器不會創建自己的網卡,配置自己的IP,而是和一個指定的容器共享IP、端口范圍等。同樣,兩個容器除了網絡方面,其他的如文件系統、進程列表等還是隔離的。兩個容器的進程可以通過lo網卡設備通信。

none模式

這個模式和前兩個不同。在這種模式下,Docker容器擁有自己的Network Namespace,但是,并不為Docker容器進行任何網絡配置。也就是說,這個Docker容器沒有網卡、IP、路由等信息。需要我們自己為Docker容器添加網卡、配置IP等。

bridge模式

日本韩国三级aⅴ在线观看bridge模式是Docker默認的網絡設置,此模式會為每一個容器分配Network Namespace、設置IP等,并將一個主機上的Docker容器連接到一個虛擬網橋上。下面著重介紹一下此模式。

日本韩国三级aⅴ在线观看bridge模式的拓撲

日本韩国三级aⅴ在线观看當Docker server啟動時,會在主機上創建一個名為docker0的虛擬網橋,此主機上啟動的Docker容器會連接到這個虛擬網橋上。虛擬網橋的工作方式和物理交換機類似,這樣主機上的所有容器就通過交換機連在了一個二層網絡中。接下來就要為容器分配IP了,Docker會從RFC1918所定義的私有IP網段中,選擇一個和宿主機不同的IP地址和子網分配給docker0,連接到docker0的容器就從這個子網中選擇一個未占用的IP使用。如一般Docker會使用172.17.0.0/16這個網段,并將172.17.42.1/16分配給docker0網橋(在主機上使用ifconfig命令是可以看到docker0的,可以認為它是網橋的管理接口,在宿主機上作為一塊虛擬網卡使用)。單機環境下的網絡拓撲如下,主機地址為10.10.101.105/24。


默認網絡

日本韩国三级aⅴ在线观看當您安裝Docker時,會自動創建三個網絡。您可以使用以下docker network ls命令列出這些網絡:

$ docker network ls
NETWORK ID          NAME                DRIVER7fca4eb8c647        bridge              bridge9f904ee27bf5        none                nullcf03ee007fb4        host                host

日本韩国三级aⅴ在线观看這三個網絡都建在Docker中。運行容器時,可以使用該--network標志來指定容器應連接到的網絡。

默認網橋

日本韩国三级aⅴ在线观看Docker 服務啟動后默認會創建一個 docker0 網橋(其上有一個 docker0 內部接口),它在內核層連通了其他的物理或虛擬網卡,這就將所有容器和本地主機都放到同一個物理網絡。

日本韩国三级aⅴ在线观看Docker 默認指定了 docker0 接口 的 IP 地址和子網掩碼,讓主機和容器之間可以通過網橋相互通信,它還給出了 MTU(接口允許接收的最大傳輸單元),通常是 1500 Bytes,或宿主主機網絡路由上支持的默認值。這些值都可以在服務啟動的時候進行配置。

bridge所有Docker主機上都存在默認網絡。如果您不指定其他網絡,則新的容器會自動連接到默認bridge網絡。

該docker network inspect命令返回有關網絡的信息:

[root@iZ2ze74fkxrls31tr2ia2fZ ~]# docker network inspect bridge[    {        "Name": "bridge",        "Id": "7436e01fb532a9b25318c3d14c22a2b8bbf67fe9a1c4034d8529c17b98ce3408",        "Scope": "local",        "Driver": "bridge",        "EnableIPv6": false,        "IPAM": {            "Driver": "default",            "Options": null,             "Config": [                 {                              "Subnet": "192.168.1.1/24",                      "Gateway": "192.168.1.1"                }            ]        },        "Internal": false,       "Containers": {            "ac36d9ff3cad1233ff52a46f413b8f5442c6d73470aca27c25c2296f72bcca0d": {                "Name": "centos-java",                "EndpointID": "62f4d3245b96dd5ff8da0fd5801388664d118b693bf5e0db72209b9335734269",                "MacAddress": "02:42:c0:a8:01:03",                "IPv4Address": "192.168.1.3/24",                "IPv6Address": ""            },            "b5a21b26c111eb2b4c6a0823dd3c861de0e07fe485b51135cbf5c29318269810": {                "Name": "centos",                "EndpointID": "1719493bcaaec67568f5a39c1afc641c5dc6e7a65ea3733ad40c21f1b45c8ca4",                "MacAddress": "02:42:c0:a8:01:02",                "IPv4Address": "192.168.1.2/24",                "IPv6Address": ""            }        },        "Options": {            "com.docker.network.bridge.default_bridge": "true",            "com.docker.network.bridge.enable_icc": "true",            "com.docker.network.bridge.enable_ip_masquerade": "true",            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",            "com.docker.network.bridge.name": "docker0",            "com.docker.network.driver.mtu": "1500"        },        "Labels": {}    }]

修改網段

docker啟動時默認使用172.17.x.x作為容器的ip地址,可以通過以下方法自定義該網段:

日本韩国三级aⅴ在线观看修改文件 /etc/docker/daemon.json 添加內容 "bip": "ip/netmask"

{   "bip": "192.168.1.1/24"}

日本韩国三级aⅴ在线观看重啟 docker 服務:

systemctl restart docker

日本韩国三级aⅴ在线观看查看修改后的 docker0 網橋信息:

ifconfig docker0

有關daemon.json文件參數,這是Linux上允許的配置選項的完整示例:

{    "authorization-plugins": [],    "data-root": "",    "dns": [],    "dns-opts": [],    "dns-search": [],    "exec-opts": [],    "exec-root": "",    "experimental": false,    "storage-driver": "",    "storage-opts": [],    "labels": [],    "live-restore": true,    "log-driver": "",    "log-opts": {},    "mtu": 0,    "pidfile": "",    "cluster-store": "",    "cluster-store-opts": {},    "cluster-advertise": "",   "max-concurrent-downloads": 3,    "max-concurrent-uploads": 5,    "default-shm-size": "64M",    "shutdown-timeout": 15,    "debug": true,    "hosts": [],    "log-level": "",    "tls": true,    "tlsverify": true,    "tlscacert": "",    "tlscert": "",    "tlskey": "",    "swarm-default-advertise-addr": "",    "api-cors-header": "",    "selinux-enabled": false,    "userns-remap": "",    "group": "",    "cgroup-parent": "",    "default-ulimits": {},    "init": false,    "init-path": "/usr/libexec/docker-init",    "ipv6": false,    "iptables": false,    "ip-forward": false,   "ip-masq": false,   "userland-proxy": false,    "userland-proxy-path": "/usr/libexec/docker-proxy",   "ip": "0.0.0.0",    "bridge": "",    "bip": "",    "fixed-cidr": "",    "fixed-cidr-v6": "",    "default-gateway": "",    "default-gateway-v6": "",    "icc": false,    "raw-logs": false,    "allow-nondistributable-artifacts": [],    "registry-mirrors": [],    "seccomp-profile": "",    "insecure-registries": [],    "no-new-privileges": false,    "default-runtime": "runc",    "oom-score-adjust": -500,    "node-generic-resources": ["NVIDIA-GPU=UUID1", "NVIDIA-GPU=UUID2"],    "runtimes": {        "cc-runtime": {                "path": "/usr/bin/cc-runtime"            },        "custom": {                  "path": "/usr/local/bin/my-runc-replacement",              "runtimeArgs": [               "--debug"            ]        }   }}


支付寶贊助-Java幫幫社區
微信贊助-Java幫幫社區
Java幫幫公眾號生態

Java幫幫公眾號生態

總有一款適合你

Java幫幫-微信公眾號

Java幫幫-微信公眾號

將分享做到極致

Python幫幫-公眾號

Python幫幫-公眾號

人工智能,爬蟲,學習教程

大數據驛站-微信公眾號

大數據驛站-微信公眾號

一起在數據中成長

九點編程-公眾號

九點編程-公眾號

深夜九點學編程

程序員生活志-公眾號

程序員生活志-公眾號

互聯網,職場,程序員那些事兒

Java幫幫學習群生態

Java幫幫學習群生態

總有一款能幫到你

Java學習群

Java學習群

與大牛一起交流

大數據學習群

大數據學習群

在數據中成長

九點編程學習群

九點編程學習群

深夜九點學編程

python學習群

python學習群

人工智能,爬蟲

測試學習群

測試學習群

感受測試的魅力

Java幫幫生態承諾

Java幫幫生態承諾

一直堅守,不負重望

初心
勤儉
誠信
正義
分享
合作品牌 非盈利生態-優質內容分享傳播者
關于我們
友鏈申請
友鏈交換:加幫主QQ2524138991 留言即可 24小時內答復  
全站內容非商業用途,內容來源于網友,并遵循 許可,如有異議請聯系客服。
會員登錄
獲取驗證碼
登錄
登錄
我的資料
留言
回到頂部