首頁 > 運維 > Docker > 主體

docker network指令詳解

王林
發布: 2020-08-21 17:31:50
轉載
18007 人瀏覽過

docker network指令詳解

我們先來看看network所有的子指令:

(推薦教學:docker教學

docker network create
docker network connect
docker network ls
docker network rm
docker network disconnect
docker network inspect
登入後複製

一、建立網路

在安裝Docker Engine時會自動建立一個預設的bridge網路docker0。 此外,還可以建立自己的bridge網路或overlay網路。

bridge網路依附在執行Docker Engine的單一主機上,而overlay網路則能夠覆蓋運行各自Docker Engine的多主機環境。

建立bridge網路比較簡單如下:

 # 不指定网络驱动时默认创建的bridge网络
 docker network create simple-network
 # 查看网络内部信息
 docker network inspect simple-network
 # 应用到容器时,可进入容器内部使用ifconfig查看容器的网络详情
登入後複製

但是建立一個overlay網路就需要一些前提條件(具體操作請參考Docker容器網路相關內容): 

- key-value store(Engine支持Consul、Etcd和ZooKeeper等分布式存储的key-value store) 
- 集群中所有主机已经连接到key-value store 
- swarm集群中每个主机都配置了下面的daemon参数 
- –cluster-store 
- –cluster-store-opt 
- –cluster-advertise
登入後複製

然後建立overlay網路:

# 创建网络时,使用参数`-d`指定驱动类型为overlay
docker network create -d overlay my-multihost-network
登入後複製

就使用--subnet選項建立子網路而言,bridge網路只能指定一個子網,而overlay網路支援多個子網路。

在bridge和overlay網路驅動程式下所建立的網路可以指定不同的參數。

二、連接容器

建立三個容器,分別前兩個使用預設網路啟動容器,第三個使用自訂bridge網路啟動。 然後再將第二個容器新增到自訂網路。這三個容器的網路情況如下:

第一個容器:只有預設的docker0

第二個容器:屬於兩個網路-docker0、自訂網路

#第三個容器:只屬於自訂網路

說明:透過容器啟動指定的網路會覆蓋預設bridge網路docker0。

# 创建三个容器 conTainer1,container2,container3
docker run -itd --name=container1 busybox
docker run -itd --name=container2 busybox
# 创建网络mynet
docker network create -d bridge --subnet 172.25.0.0/16 mynet
# 将容器containerr2连接到新建网络mynet
docker network connect mynet container2
# 使用mynet网络来容器container3
docker run --net=mynet --ip=172.25.3.3 -itd --name=container3 busybox
 
# 查看这三个容器的网络情况
docker network inspect container1 # docker0
docker network inspect container2 # docker0, mynet
docker network inspect container3 # mynet
登入後複製

三、預設網路與自訂bridge網路的差異

預設網路docker0:網路中所有主機間只能用IP互相存取。透過--link選項所建立的容器可以對連結的容器名稱(container-name)作為hostname進行直接存取。 

自訂網路(bridge):網路中所有主機除ip存取外,還可以直接用容器名稱(container-name)作為hostname相互存取。

# 进入container2内部
docker attach container2
ping -w 4 container3 # 可访问
ping -w 4 container1 # 不可访问
ping -w 4 172.17.0.2 # 可访问container1的IP
# Ctrl+P+Q退出容器,让container2以守护进程运行
登入後複製

四、預設網路與自訂bridge網路在容器連接的差別

在預設網路中使用link(legency link),有以下功能:

- 使用容器名作为hostname 
- link容器时指定alias: --link=<Container-Name>:<Alias> 
- 配合--icc=false隔离性,实现容器间的安全连接 
- 环境变量注入
登入後複製

自定義網路中使用docker net提供以下功能: 

- 使用DNS实现自动化的名称解析 
- 一个网络提供容器的安全隔离环境 
- 动态地attach与detach到多个网络 
- 支持与--link选项一起使用,为链接的容器提供别名(可以是尚不存在链接容器,与默认容器中–link使用的最大差别)
登入後複製

預設網路中的link是靜態的,不允許連結容器重啟,而自訂網路下的link是動態的,支援連結容器重啟(以及IP變更) 
因此,使用--link時連結的容器,在預設網路中必須事先建立好,而自訂網路下不必預先建置。

使用docker network connetct將容器連接到新網路時,用參數--link連結相同的容器時,可以指定不同的別名,它們是針對不同網路的。

# 运行容器使用自定义网络,同时使用--link链接尚不存在的container5容器
docker run --net=mynet -itd --name=container4 --link container5:c5 busybox
# 创建容器container5
docker run --net=mynet -itd --name=container5 --link container4:c4 busybox
# 虽然是相同容器,但是在不同的网络环境连接中可以不同的alias链接
docker network connect --link container5:foo local_alias container4
docker network connect --link container4:bar local_alias container5
登入後複製

五、指定容器在網路範圍的別名(Network-scoped alias)

Network-scoped alias就是指定容器在其他可被相同網路範圍內的容器存取的別名。 

不同於link別名的是,link別名是由連結容器的使用者提供的,只有它自己可使用; 而指定網路範圍內別名,是由容器提供給網路中其它容器使用的。

Network-scoped alias:同一網路中的多個容器可以指定相同的別名,在使用的當然只有第一個指定別名的容器才生效, 
只有當第一個容器關閉時,指定相同別名的第二個容器的別名才會開始生效。

docker run --net=mynet -itd --name=container6 --net-alias app busybox
docker network connect --alias scoped-app local_alias container6
docker run --net=isolated_nw -itd --name=container7 --net-alias app busybox
docker network connect --alias scoped-app local_alias container7
# 在container4中
docker attach container4
ping app # 访问container6的IP
# 从container4中以守护进程运行退出:Ctrl+P+Q
docker stop container6
docker attach container4
ping app # 访问的container7的IP
登入後複製

六、斷開網路與移除網路

# 容器从mynet网络中断开(它将无法再网络中的容器container3通讯)
docker network disconnect mynet container2
# 测试与容器container3失败
docker attach container2
ping contianer3 # 访问失败
登入後複製

在多主機的網路環境中,在將容器以已移除的容器名稱連接到網路中時會出現container already connected to network的錯誤, 
這時需要強制新容器移除docker rm -f,重新運作並連接到網路中。

移除網路要求網路中所有的容器關閉或中斷與此網路的連線時,才能夠使用移除指令:

# 断开最后一个连接到mynet网络的容器
docker network disconnet mynet container3
# 移除网络
docker network rm mynet
登入後複製

以上是docker network指令詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板