Docker 的網路 運行 ifconfig 找到 docker0 : 虛擬網卡預設網卡名稱為docker0 查看docker 的網橋: 我這裡預設們沒有進行安裝 網橋管理設備:進行安裝一下; yum install bridge-utils 命令:查看網橋crctl show: 註意上圖中的int ...
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前端和資料庫後端。如果你打電話給你的容器web
和db
,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
查看網路
有不足之處 希望大家指出相互學習,
本文原創:轉載請註明出處 謝謝!