docker的容器管理和網路模式
docker 容器操作和網路模式
目錄一: Docker 容器操作
1.1 容器建立
容器建立:就是將映象載入到容器的過程。
新建立的容器處於停止狀態,不會執行任何程式,需要在其中發起一個程序來啟動容器.
格式:
docker create [選項] 映象
常用選項:
-i: 讓容器的輸入保持開啟
-t: 讓Docker 分配一個偽終端
#建立容器。 [root@host103 ~]# docker create -it nginx:latest nginx 9fc8616471fd701f085d59f95160e2a93f71147a5eaa53ac0a62f53a3ebbd04f
1.2 檢視容器執行狀態
格式: docker ps [選項]
直接使用 docker ps ,只檢視當前正在執行的容器
選項:
- -a :顯示所有的容器,包括未執行的。
- -f :根據條件過濾顯示的內容。
- --format :指定返回值的模板檔案。
- -l :顯示最近建立的容器。
- -n :列出最近建立的n個容器。
- --no-trunc :不截斷輸出。
- -q :靜默模式,只顯示容器編號。
- -s :顯示總的檔案大小。
#檢視當前執行的容器 root@host103 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES #檢視當前所有容器 [root@host103 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9fc8616471fd nginx:latest "/docker-entrypoint.…" 9 minutes ago Created frosty_shockley #檢視當前所有容器的ID號 [root@host103 ~]# docker ps -aq 9fc8616471fd #檢視當前所有容器的大小 [root@host103 ~]# docker ps -as CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE 9fc8616471fd nginx:latest "/docker-entrypoint.…" 9 minutes ago Created frosty_shockley 0B (virtual 133MB) #檢視最後建立的2 個映象 [root@host103 ~]# docker ps -n 2 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 900f0d65f120 nginx:latest "/docker-entrypoint.¡" 53 seconds ago Created optimistic_driscoll ca4d8118fd97 nginx:latest "/docker-entrypoint.¡" 56 seconds ago Created stoic_snyde
CONTAINER ID :容器的ID號
IMAGE: 載入的映象
COMMAND: 執行的程式
CREATED: 建立時間
STATUS: 當前的狀態
PORTS : 埠對映
NAMES: 名稱,如果不自定義會隨機生成
1.3 啟動容器
格式: docker start 容器ID/名稱
[root@host103 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93efaac05479 centos:7 "bash" 19 seconds ago Created xenodochial_buck
#使用容器id 啟動容器。
[root@host103 ~]# docker start 93ef
93ef
#再次檢視狀態,status 狀態項為 up
[root@host103 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93efaac05479 centos:7 "bash" 42 seconds ago Up 4 seconds xenodochial_buck
1.4 建立並啟動容器
可以直接執行 docker run 命令, 等同於先執行 docker create 命令,再執行 docker start 命令。
注意:容器是一個與其中執行的 shell 命令共存亡的終端,命令執行容器執行, 命令結束容器退出。
當利用 docker run 來建立容器時, Docker 在後臺的標準執行過程是:
- 檢查本地是否存在指定的映象。當映象不存在時,會從公有倉庫下載;
- 利用映象建立並啟動一個容器;
- 分配一個檔案系統給容器,在只讀的映象層外面掛載一層可讀寫層;
- 從宿主主機配置的網橋介面中橋接一個虛擬機器介面到容器中;
- 分配一個地址池中的 IP 地址給容器;
- 執行使用者指定的應用程式,執行完畢後容器被終止執行。
Docker的機制是讓容器後臺執行,必須至少有一個前臺程序,容器執行的命令如果不是那些一直掛起的命令(比如執行top,tail),會自動退出
#立即停止所有容器
[root@host103 ~]# docker kill $(docker ps -aq)
aefa6d6e9db5
#刪除所有容器
[root@host103 ~]# docker rm $(docker ps -aq)
aefa6d6e9db5
#強制刪除所有映象
[root@host103 ~]# docker rmi -f $(docker images -q)
#使用centos:7 映象建立容器,如果沒有該映象則自動從公有倉庫拉取
#容器建立後執行 ls / 命令
[root@host103 ~]# docker run centos:7 bash -c "ls /"
在後臺持續執行docker run 建立的容器
需要在 docker run 命令之後新增 -d 選項讓 Docker 容器以守護形式在後臺執行。並且容器所執行的程式不能結束.
使用 itd 選項,可以建立並持續執行容器。即使進入容器後使用exit命令退出,也不會停止容器
#後臺執行容器並執行死迴圈命令
[root@host103 ~]# docker run -d centos:7 /usr/bin/bash -c "while true;do sleep 1; done"
#建立容器並持續執行容器.使用--name 指定名稱
[root@host103 ~]# docker run -itd --name system1 centos:7 /bin/bash
1.5 終止容器執行
格式: docker stop/kill 容器ID/名稱
stop: 停止容器,可以給容器一個等待時間,以防止資料的丟失。
kill: 立即強行停止一個容器(相當於linux命令 kill -9) ,不會給容器反應時間,可能會造成資料丟失
[root@host103 ~]# docker stop b401
[root@host103 ~]# docker kill system1
1.6 容器的進入
使用docker 原生方法進入容器,可以使用 docker attach 和 docker exec 命令進入。或者也可以使用docker run -it 在建立容器時就進入容器。
使用 exit 容器停止退出
使用 ctrl +p ctrl +q 容器不停止退出
1.6.1 使用 docker attch 的方法
docker attch 可以進入一個已經執行容器。然後輸入命令執行動作.
格式:
docker attch 容器ID或名稱
輸入exit 進行退出。這個會退出docker attch 程序,通常容器也會退出,處於終止狀態
輸入 ctrl +p 和 ctrl +q 或者 按住ctrl 鍵 然後依次輸入 p 鍵 q 鍵 可以退出 attach 程序而不停止容器
#使用docker attch 容器ID/名稱 進入執行的容器
[root@host103 ~]# docker attach system1
#輸入exit 退出後,容器也終止了
[root@5a51e6a3c5bf /]# exit
exit
[root@host103 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5f3b3050c107 centos:7 "bash" 13 minutes ago Exited (0) 13 minutes ago system2
5a51e6a3c5bf centos:7 "/bin/bash" About an hour ago Exited (0) 2 seconds ago system1
#啟動容器
[root@host103 ~]# docker start system1
system1
#attach 進入容器
[root@host103 ~]# docker attach system1
#使用Ctrl p 和 Ctrl q 鍵退出,不終止容器
[root@5a51e6a3c5bf /]# read escape sequence
[root@host103 ~]#
[root@host103 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5f3b3050c107 centos:7 "bash" 16 minutes ago Exited (0) 16 minutes ago system2
5a51e6a3c5bf centos:7 "/bin/bash" About an hour ago Up 2 minutes system1
1.6.2 使用docker exec 命令進入容器
docker exec [選項] 容器id/名稱 bash或/bin/bash等 [ -c ] "命令序列"
關於 docker exec 選項:
- 可以看出只用-i 時,由於沒有分配偽終端,看起來像pipe執行一樣。但是執行結果、命令
返回值都可以正確獲取。
- 使用-it時,則和我們平常操作console介面類似。而且也不會像attach方式因為退出,導致
整個容器退出。
- 如果只使用-t引數,則可以看到一個console視窗,但是執行命令會發現由於沒有獲得stdin
的輸出,無法看到命令執行情況
- 在後臺執行一個程序。可以看出,如果一個命令需要長時間程序,使用-d引數會很快返回。
程式在後臺執行。如果不使用-d引數,由於命令需要長時間執行,docker exec會卡住,一直等命令執行完成
才返回。
關於docker exec 後面的命令:
- 我們通常會使用 docker exec -it bash 進入容器並開啟一個bash環境的偽終端。也可以將bash 換成其他一條命令,讓容器執行完後,將結果輸出到螢幕
- 後面可以跟上 -c 選項 “命令序列",命令序列可以是多個命令,使用分號隔開,可以一次性執行多條命令
#單獨使用 -i 選項,則沒有命令列提示符等,但是可以正常的執行命令,且有返回結果
[root@host103 ~]# docker exec -i system1 bash
...
#使用exit 退出
exit
#如果只使用 -t, 則只分配了偽終端。無法執行命令。只能使用 ctrl +c 終止
root@host103 ~]# docker exec -t system1 bash
[root@5a51e6a3c5bf /]# ls
^C
#使用 -it 選項,則型別與正常的終端,可以正常執行命令
root@host103 ~]# docker exec -it system1 bash
[root@5a51e6a3c5bf /]# ls
.......
[root@5a51e6a3c5bf /]# touch a.txt
[root@5a51e6a3c5bf /]# ls
a.txt .....
[root@5a51e6a3c5bf /]# exit
exit
#如果只使用 -it 選項直接執行命令,當某個命令執行時間長,則終端會一直等待命令執行完畢
[root@host103 ~]# docker exec -it system1 sleep 10
#加上 -d 選項,則會將命令在後臺執行。使用 -c 選項,後面可以執行一些列命令
[root@host103 ~]# docker exec -itd system1 bash -c "sleep 10;touch text.txt;touch zww.txt"
[root@host103 ~]#
[root@host103 ~]# docker exec -it system1 ls
zww.txt text.txt var
1.7 容器和宿主機之間的檔案複製
1.7.1 從宿主機複製到容器中
docker cp 宿主機檔案路徑 容器ID或名稱:路徑
#檢視當前啟動的容器
[root@host103 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5a51e6a3c5bf centos:7 "/bin/bash" 20 hours ago Up 18 hours system1
[root@host103 ~]# touch aaa.txt
#將宿主機的 aaa.txt 檔案複製到容器5a51的 /opt目錄下
[root@host103 ~]# docker cp aaa.txt 5a51:/opt/
[root@host103 ~]# docker exec -it 5a51 ls /opt/aaa.txt
/opt/aaa.txt
1.7.2 從容器複製到宿主機
docker cp 容器ID或名稱:檔案路徑 宿主機路徑
#在容器的/opt目錄下建立 bbb.txt
[root@host103 ~]# docker exec -it 5a51 bash -c "touch /opt/bbb.txt;ls /opt/"
aaa.txt bbb.txt
#將容器的/opt/bbb.txt 檔案複製到宿主機的 /opt目錄下
[root@host103 ~]# docker cp 5a51:/opt/bbb.txt /opt/
[root@host103 ~]# ls /opt/bbb.txt
/opt/bbb.txt
1.8 容器的匯入和匯出
使用者可以將任何一個Docker 容器從一臺機器遷移到另一臺機器。在遷移過程中,可以使用 docker export
命令將已經建立好的容器匯出為檔案,無論這個容器是處於執行狀態還是停止狀態均可匯出。可將匯出檔案傳輸到其他機器,通過相應的匯入命令實現容器的遷移.
1.8.1 匯出容器
格式:
docker export 容器ID/名稱 > 檔名
[root@host103 ~]# docker export 5a51 > /opt/centos.tar
[root@host103 ~]# ls /opt/centos.tar
/opt/centos.tar
1.8.2 匯入容器
格式:
cat 檔名 | docker import - 映象名稱:標籤
匯入後會生成映象,但是不會建立容器
[root@host103 ~]# cat /opt/centos.tar | docker import - centos7:test
[root@host103 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos7 test 40938b787741 9 seconds ago 204MB
1.9 刪除容器
格式:
docker rm [-f] 容器ID/名稱
docker rm 容器ID/名稱 ------ 刪除容器(必須是處於終止狀態的容器)
docker rm -f 容器ID/名稱 -----強行刪除容器(可以刪除正在執行的容器)
docker rm [-f] $(docker ps -aq) -------批量清理停止的容器( 加 -f 選項則刪除所有
docker stop $(docker ps -aq) -------批量停止容器
批量停止容器
docker ps -a | awk 'NR >=2{print "docker stoop "$1 }' | bash
docker ps -a | awk 'NR >= {print $1}' | xargs docker stop
批量刪除所有容器
docker ps -a | awk 'NR>=2{print "docker rm " $1}' | bash
docker ps -a | awk 'NR >= {print $1}' | xargs docker rm
批量刪除映象
docker images | awk 'NR>=2{print "docker rmi " $3}' | bash
刪除none映象
docker images | grep none | awk '{print $3}' | xargs docker rmi
#刪除終止的容器,553d
[root@host103 ~]# docker rm 553d
#刪除所有已經終止的容器
[root@host103 ~]# docker rm $(docker ps -aq)
#強行刪除所有容器(包括啟動的)
[root@host103 ~]# docker rm -f $(docker ps -aq)
#刪除所有的映象
[root@host103 ~]# docker images | awk 'NR>=2{print "docker rmi " $3}' | bash
在建立容器時報錯與解決
報錯:
在使用docker create -it nginx:latest /bin/bash 命令,建立容器時,發現提示資訊
“WARNING: IPv4 forwarding is disabled. Networking will not work.”
解決:
開啟ip轉發功能,然後重啟網絡卡和docker ,然後在重新建立容器 即可.
#開啟ip轉發功能
[root@host103 ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
[root@host103 ~]# sysctl -p
net.ipv4.ip_forward = 1
#重啟網絡卡和docker 服務
[root@host103 ~]# systemctl restart network
[root@host103 ~]# systemctl restart docker
#刪除之前建立的容器,然後再重新建立
[root@host103 ~]# docker rm b040
[root@host103 ~]# docker create -it nginx:latest /bin/bash
二: docker 網路
2.1 docker網路實現原理
docker 使用linuxc 橋接,在宿主機虛擬一個docker 容器網橋(docker0) ,docker 啟動一個容器時會根據docker 網橋的網段分配給容器一個IP地址,稱為Container-IP,同時Docker 網橋是每個容器的預設閘道器。因為在同一宿主機內的容器都接入同一個網橋,這樣容器之間就能夠通過容器的Container-IP 直接通訊.
docker 網橋是宿主機虛擬出來的,並不是真實存在的網路裝置,外部網路是無法定址到的,這也意味著外部網路無法直接通過Container-IP 訪問到容器。如果容器希望外部訪問能夠訪問到,可以通過對映容器埠到宿主機(埠對映),即docker run 建立容器時候,通過 -p 或者 -P 引數來啟用。訪問容器的時候,就通過 [宿主機IP]:[容器埠]訪問容器
2.1.1 為容器建立埠對映
方法一:隨機對映埠(從32768開始)
docker run -d --name 為容器指定名稱 -P 映象
方法二: 指定對映埠
docker run -d --name 為容器指定名稱 -p 宿主機埠:容器內埠 映象
[root@host103 ~]# docker pull nginx
#使用nginx映象建立容器,名稱為web1 ,隨機對映埠
[root@host103 ~]# docker run -d --name web1 -P nginx
#使用nginx映象建立容器,名稱為web2,將容器內的80埠對映到宿主機的42399埠
[root@host103 ~]# docker run -d --name web2 -p 42399:80 nginx
[root@host103 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
94149199d007 nginx "/docker-entrypoint.…" 3 seconds ago Up 2 seconds 0.0.0.0:42399->80/tcp, :::42399->80/tcp web2
5a4c130c6952 nginx "/docker-entrypoint.…" 38 seconds ago Up 37 seconds 0.0.0.0:49153->80/tcp, :::49153->80/tcp web1
[root@host103 ~]# firefox http://192.168.23.103:42399
[root@host103 ~]# firefox http://192.168.23.103:49153
2.2 Docker 的網路模式
- Host:容器不會虛擬出自己的網絡卡,配置主機的IP等,而是使用宿主機的IP和埠
- Container: 建立的容器不會建立自己的網絡卡,配置自己的IP,而是和一個指定的容器共享IP,埠範圍
- None: 該模式關閉了容器的網路功能。
- Bridge:預設為該模式,此模式會為每一個容器分配,設定IP等,並將容器連線到一個docker0 的虛擬網橋,通過docker 0 網橋以及iptables nat 表配置與宿主機通訊。
- 自定義網路
2.2.1 檢視docker 的網路列表
在安裝Docker 時,它會自動建立三個網路,bridge(建立容器預設連線到此網路),none,host
方法一:
docker network ls
方法二:
docker network list
[root@host103 ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
17b848a78bfb bridge bridge local
1e4c6afbe445 host host local
84db6f9ab742 none null local
[root@host103 ~]# docker network list
NETWORK ID NAME DRIVER SCOPE
17b848a78bfb bridge bridge local
1e4c6afbe445 host host local
84db6f9ab742 none null local
2.2.2 指定容器網路模式
使用docker run 建立Docker 容器時,可以使用 --net或者--network 選項指定容器的網路模式
- host 模式 : 使用 --net=host 指定
- none模式:使用 --net=none指定
- container模式: 使用--net=contatiner:NAME_or_ID 指定
- bridge模式: 使用 --net=bridge指定,預設設定,可以省略
2.3 docker 網路模式詳解
2.3.1 host模式
-
host 模式 : 使用 --net=host 指定
-
相當於VMware 中的橋接模式,與宿主機在同一個網路中,但是沒有獨立IP地址
-
Docker 使用了Linux 的Namespace 技術來進行資源隔離,如PID Namespace隔離程序,Mount Namespace隔離檔案系統,Network Namespace 隔離網路等。一個Network Namespace 提供了一份獨立的網路環境,包括網絡卡,路由,iptable 規則等都與其他Network Namespace 隔離。一個Docker 容器一般會分配一個獨立的Network Namespace
-
但是如果啟動容器的時候使用host 模式,那麼這個容器將不會獲得一個獨立的Network Namespace ,而是和宿主機共用一個Network Namespace 。容器將不會虛擬出自己的網絡卡,配置自己的IP等,而是使用宿主機的IP和埠.此時容器不再擁有隔離的、獨立的網路棧。不擁有所有埠資源
#建立容器web 3,指定網路模式為 host
#因為是host模式,所有宿主機和容器共享ip和埠
[root@host103 ~]# docker run -d --name web3 --net=host nginx
#訪問宿主機的ip和80埠,則可以訪問到web3的nginx服務
[root@host103 ~]# firefox http://192.168.23.103:80
2.3.2 container模式
-
container模式: 使用--net=contatiner:NAME_or_ID 指定
-
這個模式指定新建立的容器和已經存在的一個容器共享一個Network Namespace,而不是和宿主機共享。新建立的容器不會建立自己的網絡卡,配置自己的IP,而是和一個指定的容器共享IP,埠範圍等。可以在一定程度上節省網路資源,容器內部依然不會擁有所有埠。
-
同樣,兩個容器除了網路方面,其他的如檔案系統,程序列表等還是隔離的。
-
兩個容器的程序可以通過lo網絡卡裝置通訊.
#基於映象centos:7 建立愛一個 名為test1的容器
[root@host103 ~]# docker run -itd --name test1 centos:7 /bin/bash
#檢視容器的pid號
[root@host103 ~]# docker inspect -f '{{.State.Pid}}' test1
19294
#檢視該容器的名稱空間編號
[root@host103 ~]# ls -l /proc/19294/ns
lrwxrwxrwx 1 root root 0 10ÔÂ 10 14:43 ipc -> ipc:[4026532797]
lrwxrwxrwx 1 root root 0 10ÔÂ 10 14:43 mnt -> mnt:[4026532795]
lrwxrwxrwx 1 root root 0 10ÔÂ 10 14:42 net -> net:[4026532800]
lrwxrwxrwx 1 root root 0 10ÔÂ 10 14:43 pid -> pid:[4026532798]
lrwxrwxrwx 1 root root 0 10ÔÂ 10 14:43 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0 10ÔÂ 10 14:43 uts -> uts:[4026532796]
#建立test2容器,使用container網路模式,和test1共享network Namespace
[root@host103 ~]# docker run -itd --name test2 --net=container:test1 centos:7 /bin/bash
#檢視test2容器的pid
[root@host103 ~]# docker inspect -f '{{.State.Pid}}' test2
19463
#檢視該容器的名稱空間編號
[root@host103 ~]# ls -l /proc/19463/ns/
lrwxrwxrwx 1 root root 0 10月 10 14:44 ipc -> ipc:[4026532893]
lrwxrwxrwx 1 root root 0 10月 10 14:44 mnt -> mnt:[4026532891]
lrwxrwxrwx 1 root root 0 10月 10 14:44 net -> net:[4026532800]
lrwxrwxrwx 1 root root 0 10月 10 14:44 pid -> pid:[4026532894]
lrwxrwxrwx 1 root root 0 10月 10 14:44 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0 10月 10 14:44 uts -> uts:[4026532892]
2.3.3 none 模式
-
none模式:使用 --net=none指定
-
使用none 模式,docker 容器有自己的network Namespace ,但是並不為Docker 容器進行任何網路配置。也就是說,這個Docker 容器沒有網絡卡,ip, 路由等資訊。
-
這種網路模式下,容器只有lo 迴環網路,沒有其他網絡卡。
-
這種型別沒有辦法聯網,封閉的網路能很好的保證容器的安全性
-
該容器將完全獨立於網路,使用者可以根據需要為容器新增網絡卡。此模式擁有所有埠。(none網路模式配置網路)
#基於busybox映象建立網路模式為 none 的容器
[root@host103 ~]# docker run -it --name test3 --net=none busybox
#在容器內使用ip a 檢視網絡卡,發現只有 lo迴環網絡卡,其他網絡卡需要自己配置
/ # ip a
1: lo:........
/ # exit
#檢視容器test3 的網路模式
[root@host103 ~]# docker inspect test3 | grep -i 'networkmode'
"NetworkMode": "none",
2.3.4 bridge 模式
bridge模式是docker的預設網路模式,不寫 -- net引數,就是bridge模式。
相當於Vmware中的 nat 模式,容器使用獨立network Namespace,並連線到docker0虛擬網絡卡。通過docker0網橋以及iptables nat表配置與宿主機通訊,此模式會為每一個容器分配Network Namespace、設定IP等,並將一個主機上的 Docker 容器連線到一個虛擬網橋上。
- 當Docker程序啟動時,會在主機上建立一個名為docker0的虛擬網橋,此主機上啟動的Docker容器會連線到這個虛擬網橋上。虛擬網橋的工作方式和物理交換機類似,這樣主機上的所有容器就通過交換機連在了一個二層網路中。
- 從docker0子網中分配一個IP給容器使用,並設定docker0的IP地址為容器的預設閘道器。在主機上建立一對虛擬網絡卡veth pair裝置。veth裝置總是成對出現的,它們組成了一個數據的通道,資料從一個裝置進入,就會從另一個裝置出來。因此,veth裝置常用來連線兩個網路裝置。
- Docker將veth pair 裝置的一端放在新建立的容器中,並命名為eth0(容器的網絡卡),另一端放在主機中, 以veth*這樣類似的名字命名,並將這個網路裝置加入到docker0網橋中。可以通過 brctl show 命令檢視。
- 使用 docker run -p 時,docker實際是在iptables做了DNAT規則,實現埠轉發功能。可以使用iptables -t nat -vnL 檢視。
[root@host103 ~]# docker run -itd --name test4 centos:7 /bin/bash
[root@host103 ~]# docker inspect test4 | grep -i 'networkmode'
"NetworkMode": "default",
2.3.5 自定義網路模式
直接使用bridge 模式,還是無法指定IP執行docker 的,可以先自定義網路,在指定IP執行docker
如:
docker network create --subnet=172.18.0.0/16 --opt "com.docker.network.bridge.name"="docker1" mynetwork
------ docker 1 為 執行ifconfig -a 命令時顯示的網絡卡名,如果不適用 --opt 引數指定此名稱,使用 ifconfig -a 檢視網絡卡的網路資訊時,看到的將會是類似 br-110....... 這樣的名字
----- mynetwork 為執行 docker network list 命令時 顯示的 bridge 網路模式名稱
#直接執行此命令,則報錯
[root@host103 ~]# docker run -itd --name test6 --network bridge --ip 172.17.0.10 centos:7 /bin/bash
#先自定義網路,設定網絡卡地址池,網絡卡名,網路模式名
[root@host103 ~]# docker network create --subnet=172.18.0.0/16 --opt "com.docker.network.bridge.name"="docker1" mynetwork
#再使用網路建立自定義網路的容器
[root@host103 ~]# docker run -itd --name test7 --net mynetwork --ip 172.18.0.10 centos:7 /bin/bash