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
查看網絡
想學習的直接聯系我,掃微信二維碼即可,如下