1. 程式人生 > >docker(4)docker的網絡,自定義網橋

docker(4)docker的網絡,自定義網橋

docker0 後端 strong 互操作 變量共享 targe 謝謝 ocs info

Docker 的網絡

運行 ifconfig 找到 docker0 : 虛擬網卡默認網卡名稱為docker0

  技術分享圖片

查看docker 的網橋:

我這裏默認們沒有進行安裝 網橋管理設備:進行安裝一下;

yum install bridge-utils

  技術分享圖片

命令:查看網橋crctl show:
  技術分享圖片

註意上圖中的interfaces 這裏為空,我們啟動一個新的容器如下:

命令: docker run -d -it --name centos6 centos

  技術分享圖片

我們進入容器中查看該容器的ip 地址

我這裏的容器是最小化的centos,一般情況我都會安裝一下幾個

yum install net-tools

yum install vim

yum install telnet

  技術分享圖片

我看查看容器中的IP地址:

Docker 默認已經給我們分配了地址

  技術分享圖片

退出後在查看我們本機的網橋:這裏註意 interfaces 發生了變化

  技術分享圖片

這是docker0: 在容器創建時,為連接容器創建的網絡接口。

我們運行容器的時候也可以查看該網絡接口:

  技術分享圖片

修改docker0 的ip地址: 使用超級管理員權限
sudo ifconfig docker0 192.168.254.0 netmask 255.255.255.0

  技術分享圖片

自定義網橋:

  • 用戶定義的橋接器可在容器化應用程序之間提供更好的隔離和互操作性

連接到同一用戶定義的網橋的容器會自動將所有端口相互暴露,並且不會向外界顯示任何端口。這使得容器化應用程序可以輕松地相互通信,而不會意外地打開對外界的訪問。

想象一下具有Web前端和數據庫後端的應用程序。外部世界需要訪問Web前端(可能在端口80上),但只有後端本身需要訪問數據庫主機和端口。使用用戶定義的網橋,只需要打開Web端口,並且數據庫應用程序不需要打開任何端口,因為Web前端可以通過用戶定義的網橋訪問它。

如果在默認網橋上運行相同的應用程序堆棧,則需要打開Web端口和數據庫端口,並使用 每個的標記-p--publish標記。這意味著Docker主機需要通過其他方式阻止對數據庫端口的訪問。

  • 用戶定義的橋接器在容器之間提供自動DNS解析

默認網橋上的容器只能通過IP地址相互訪問,除非您使用被認為是遺留的--link選項。在用戶定義的橋接網絡上,容器可以通過名稱或別名相互解析。

想象一下與前一點相同的應用程序,具有Web前端和數據庫後端。如果你打電話給你的容器webdb,Web容器可以在連接到數據庫容器db,無論哪個碼頭工人托管應用程序堆棧上運行。

如果在默認橋接網絡上運行相同的應用程序堆棧,則需要在容器之間手動創建鏈接(使用舊--link 標誌)。這些鏈接需要在兩個方向上創建,因此您可以看到這對於需要通信的兩個以上容器而言變得復雜。或者,您可以操作/etc/hosts容器中的文件,但這會產生難以調試的問題。

  • 容器可以在運行中與用戶定義的網絡連接和分離

在容器的生命周期中,您可以動態地將其與用戶定義的網絡連接或斷開連接。要從默認橋接網絡中刪除容器,您需要停止容器並使用不同的網絡選項重新創建容器。

  • 每個用戶定義的網絡都會創建一個可配置的網橋

如果容器使用默認網橋,則可以對其進行配置,但所有容器都使用相同的設置,例如MTU和iptables規則。此外,配置默認橋接網絡發生在Docker本身之外,並且需要重新啟動Docker。

使用創建和配置用戶定義的網橋 docker network create。如果不同的應用程序組具有不同的網絡要求,則可以在創建時單獨配置每個用戶定義的網橋。

  • 默認橋接網絡上的鏈接容器共享環境變量

最初,在兩個容器之間共享環境變量的唯一方法是使用--link標誌鏈接它們。用戶定義的網絡無法實現這種類型的變量共享。但是,有更好的方法來共享環境變量。一些想法:

  • 多個容器可以使用Docker卷裝入包含共享信息的文件或目錄。
  • 可以一起啟動多個容器docker-compose,並且compose文件可以定義共享變量。
  • 您可以使用swarm服務而不是獨立容器,並利用共享機密和 配置。

連接到同一用戶定義的網橋的容器有效地將所有端口相互暴露。對於可以訪問不同網絡上的容器或非Docker主機的端口,必須使用or 標誌發布該端口。-p--publish

上面是docker 文檔中的一段話:整體描述了docker 自定義網橋的用處。

開始自定義網橋

我這裏開啟了一臺新我們查看網絡信息

Ifconfig

  技術分享圖片

首先停止容器運行:

systemctl stop docker.service

  技術分享圖片

停止docker0 默認網橋

sudo ip link set dev docker0 down

  技術分享圖片

刪除docker0 網橋

sudo ip link del dev docker0

  技術分享圖片

上圖中可以看到網橋已經刪除成功:

創建新的網橋:並配置IP地址,並啟動網橋

sudo brctl addbr docker1

sudo ip addr add 192.168.100.1/24 dev docker1

sudo ip link set dev docker1 up

  技術分享圖片

配置使用自定義網橋:保存退出

vi /etc/docker/daemon.json

  技術分享圖片

啟動並運行一個容器:

systemctl start docker.service

docker run -d -it --name centos1 centos

進入容器中:

docker inspect -f {{.State.Pid}} centos1

nsenter --target 19745 --ipc --uts --mount --pid --net

  技術分享圖片

安裝ifconfig 命令並查看 容器IP

yum install net-tools

  技術分享圖片

  查看網絡

  技術分享圖片

有不足之處 希望大家指出相互學習,

本文原創:轉載請註明出處 謝謝!

docker(4)docker的網絡,自定義網橋