Docker網(wǎng)絡

當我們在系統(tǒng)中安裝docker后,系統(tǒng)網(wǎng)絡中會有docker0的網(wǎng)橋,是這樣的:


docker0

這是用來宿主機和docker內部通訊的,而 docker內部,也有自己的網(wǎng)絡,可以查看:


docker內部

可以看到docker內部默認是3大網(wǎng)絡模式:bridge、host、none

1. docker網(wǎng)絡命令

docker網(wǎng)絡命令不是很多,可以一一查看:

zrb@zrb-PC:/home/soft$ docker network --help

Usage:  docker network COMMAND

Manage networks

Commands:
  connect     Connect a container to a network
  create      Create a network
  disconnect  Disconnect a container from a network
  inspect     Display detailed information on one or more networks
  ls          List networks
  prune       Remove all unused networks
  rm          Remove one or more networks

Run 'docker network COMMAND --help' for more information on a command.
zrb@zrb-PC:/home/soft$ 
  • docker network ls 查看網(wǎng)絡列表
  • docker network create XXX 創(chuàng)建網(wǎng)絡
  • docker network inspect XXX 查看該網(wǎng)絡的情況,及使用該網(wǎng)絡的容器
  • docker network rm XXX 刪除網(wǎng)絡

2. docker網(wǎng)絡模式

網(wǎng)絡模式

docker自帶了3種網(wǎng)絡模式(使用自帶的不能指定IP):

    1. bridge模式:使用--network bridge指定,默認使用這個,一般ip為172.17.0.XXX
      Docker 服務默認會創(chuàng)建一個 docker0 網(wǎng)橋(其上有一個 docker0 內部接口),該橋接網(wǎng)絡的名稱為docker0,它在內核層連通了其他的物理或虛擬網(wǎng)卡,這就將所有容器和本地主機都放到同一個物理網(wǎng)絡。Docker 默認指定了 docker0 接口 的 IP 地址和子網(wǎng)掩碼,讓主機和容器之間可以通過網(wǎng)橋相互通信。
    • 1.1 Docker使用Linux橋接,在宿主機虛擬一個Docker容器網(wǎng)橋(docker0),Docker啟動一個容器時會根據(jù)Docker網(wǎng)橋的網(wǎng)段分配給容器一個IP地址,稱為Container-IP,同時Docker網(wǎng)橋是每個容器的默認網(wǎng)關。因為在同一宿主機內的容器都接入同一個網(wǎng)橋,這樣容器之間就能夠通過容器的Container-IP直接通信。
    • 1.2 docker run 的時候,沒有指定network的話默認使用的網(wǎng)橋模式就是bridge,使用的就是docker0。在宿主機ifconfig,就可以看到docker0和自己create的network(后面講)eth0,eth1,eth2……代表網(wǎng)卡一,網(wǎng)卡二,網(wǎng)卡三……,lo代表127.0.0.1,即localhost,inet addr用來表示網(wǎng)卡的IP地址。
    • 1.3 網(wǎng)橋docker0創(chuàng)建一對對等虛擬設備接口一個叫veth,另一個叫eth0,成對匹配。整個宿主機的網(wǎng)橋模式都是docker0,類似一個交換機有一堆接口,每個接口叫veth,在本地主機和容器內分別創(chuàng)建一個虛擬接口,并讓他們彼此聯(lián)通(這樣一對接口叫veth pair);每個容器實例內部也有一塊網(wǎng)卡,每個接口叫eth0;docker0上面的每個veth匹配某個容器實例內部的eth0,兩兩配對,一一匹配。
      bridge模式

      通過上述,將宿主機上的所有容器都連接到這個內部網(wǎng)絡上,兩個容器在同一個網(wǎng)絡下,會從這個網(wǎng)關下各自拿到分配的ip,此時兩個容器的網(wǎng)絡是互通的。
    1. host模式:使用--network host指定。直接使用宿主機的 IP 地址與外界進行通信,不再需要額外進行NAT 轉換。
      容器將不會獲得一個獨立的Network Namespace, 而是和宿主機共用一個Network Namespace。容器將不會虛擬出自己的網(wǎng)卡而是使用宿主機的IP和端口。
      host模式

      注意:當使用--network host時,就不能指定端口了
    1. none模式:使用--network none指定
      在none模式下,并不為Docker容器進行任何網(wǎng)絡配置。 相當于禁用網(wǎng)絡功能。
      也就是說,這個Docker容器沒有網(wǎng)卡、IP、路由等信息,只有一個lo標識:就是127.0.0.1。
      需要我們自己為Docker容器添加網(wǎng)卡、配置IP等。

3. 自定義網(wǎng)絡

首先明確一點,自定義網(wǎng)絡使用的是bridge網(wǎng)絡模式

  • 創(chuàng)建網(wǎng)絡
    sudo docker network create --subnet=192.168.20.0/24 網(wǎng)絡名稱
  • 使用網(wǎng)絡,并指定IP
sudo docker run -d -p 8089:80 --net zrb_network --ip 192.168.20.10 --name nginx nginx
  • 訪問測試


    宿主機

    nginx容器

注意:使用自定義網(wǎng)絡時,IP可以指定,項目中可以用IP訪問。同時 也可以使用 容器 host 訪問,未指定就是 容器name來訪問

4. Docker整體

從其架構和運行流程來看,Docker 是一個 C/S 模式的架構,后端是一個松耦合架構,眾多模塊各司其職。
Docker 運行的基本流程為:

  1. 用戶是使用 Docker Client 與 Docker Daemon 建立通信,并發(fā)送請求給后者。
  2. Docker Daemon 作為 Docker 架構中的主體部分,首先提供 Docker Server 的功能使其可以接受 Docker Client 的請求。
  3. Docker Engine 執(zhí)行 Docker 內部的一系列工作,每一項工作都是以一個 Job 的形式的存在。
  4. Job 的運行過程中,當需要容器鏡像時,則從 Docker Registry 中下載鏡像,并通過鏡像管理驅動 Graph driver將下載鏡像以Graph的形式存儲。
  5. 當需要為 Docker 創(chuàng)建網(wǎng)絡環(huán)境時,通過網(wǎng)絡管理驅動 Network driver 創(chuàng)建并配置 Docker 容器網(wǎng)絡環(huán)境。
  6. 當需要限制 Docker 容器運行資源或執(zhí)行用戶指令等操作時,則通過 Execdriver 來完成。
  7. Libcontainer是一項獨立的容器管理包,Network driver以及Exec driver都是通過Libcontainer來實現(xiàn)具體對容器進行的操作。
    下面有一張圖片,我也沒看太懂
整體
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容