1. 程式人生 > 其它 >docker的容器管理和網路模式

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 在後臺的標準執行過程是:

  1. 檢查本地是否存在指定的映象。當映象不存在時,會從公有倉庫下載;
  2. 利用映象建立並啟動一個容器;
  3. 分配一個檔案系統給容器,在只讀的映象層外面掛載一層可讀寫層;
  4. 從宿主主機配置的網橋介面中橋接一個虛擬機器介面到容器中;
  5. 分配一個地址池中的 IP 地址給容器;
  6. 執行使用者指定的應用程式,執行完畢後容器被終止執行。

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 容器連線到一個虛擬網橋上。

  1. 當Docker程序啟動時,會在主機上建立一個名為docker0的虛擬網橋,此主機上啟動的Docker容器會連線到這個虛擬網橋上。虛擬網橋的工作方式和物理交換機類似,這樣主機上的所有容器就通過交換機連在了一個二層網路中。
  2. 從docker0子網中分配一個IP給容器使用,並設定docker0的IP地址為容器的預設閘道器。在主機上建立一對虛擬網絡卡veth pair裝置。veth裝置總是成對出現的,它們組成了一個數據的通道,資料從一個裝置進入,就會從另一個裝置出來。因此,veth裝置常用來連線兩個網路裝置。
  3. Docker將veth pair 裝置的一端放在新建立的容器中,並命名為eth0(容器的網絡卡),另一端放在主機中, 以veth*這樣類似的名字命名,並將這個網路裝置加入到docker0網橋中。可以通過 brctl show 命令檢視。
  4. 使用 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