Docker入門(七) 高階網路

2021-08-31 16:30:42 字數 3272 閱讀 4825

title: docker入門(七)—高階網路

tags: docker

本文搬運的《docker技術入門與實戰》,有興趣的同學可以看看。

docker啟動時會在主機上自動建立乙個 docker0虛擬網橋,實際上是乙個 linux網橋,可以理解為乙個軟體交換機。它會在掛載其上的接- 之間進行**。

同時, docker隨機分配乙個本地未占用的私有網段(在rfc1918中定義)中的乙個位址給 docker0接- 。比如典型的172.17.42.1,掩碼為255.255.0.0。此後啟動的容器內的網- 也會自動分配乙個同一網段(172.17.0.0/16)的位址。

當建立乙個 docker容器的時候,同時會建立了一對 veth pair接- (當資料報傳送到乙個接- 時,另外乙個接- 也可以收到相同的資料報)。這對接- 一端在容器內,即eth0;另一端在本地並被掛載到 docker0網橋,名稱以veth開頭(例如 vethaqi2qt)。通過這種方式,主機可以跟容器通訊,容器之間也可以相互通訊。如此一來, docker就建立了在主機和所有容器之間乙個虛擬共享網路。

下面是跟 docker網路相關的命令引數。其中有些命令選項只有在 docker服務啟動的時候才能配置,而且不能馬上生效.

–bip=cidr 定製 docker0的掩碼。

–icc= true|false 是否支援容器之間進行通訊。

–ip- forward=true|false 啟用 net. ipv4. ip forward,即開啟**功能。

– iptables=true|false 禁止 docker新增 iptables規則。

–mtu= bytes 容器網路中的mtu。

下面兩個命令選項既可以在啟動服務時指定,也可以 docker容器啟動( docker run)時候指定。在 docker服務啟動的時候指定則會成為預設值,後續執行 docker run時可以覆蓋設定的預設值:

最後這些選項只能在docker run執行時使用,因為它是針對容器的特性內容:

–link=container name: alias 新增到另乙個容器的連線。

–net= bridge i none i container: name or id|host 配置容器的橋接模式。

-p or – publish-all=true|false 對映容器所有端- 到宿主主機。

實際上,容器中主機名和dns配置資訊都是通過三個系統配置檔案來維護的:/etc/resolv.conf、/etc/ hostname和/etc/ hosts 。其中, /etc/ resolv.conf檔案在建立容器時候,缺省會與宿主機/etc/resolv.conf檔案內容保持一致。

etc/ hosts檔案中預設只記錄了容器自身的一些位址和名稱:

root@7 5dbd6685305: / cat /etc/hosts

172.17.0.2 75dbd6685305

localhost ip6-localhost ip6-loopback

fe00::0 ip6-localnet

ff00::0 ip6-mcastprefix

ff02::1 ip6-allnodes

ff02::2 ip6-allrouters

127.0.0.1 localhost

/etc/ hostname檔案則記錄了容器的主機名

root@75dbd6685305: / cat /etc/hostname 75dbd6685305
但是這些修改是臨時的,只在執行的容器中保留,容器終止或重啟後並不會被儲存下來。也不會被 docker commit提交。

如果使用者想要自定義容器的配置,可以在建立或啟動容器時利用下面的引數指定:

在宿主機 linux系統中,檢查**是否開啟:

sysctl net.ipv4.ip_forward net.ipv4.ip_forward=1

如果為0,說明沒有開啟**,則需要手動開啟:

sysctl -w net.ipv4.ip_forward=1

更簡單的,在啟動 docker服務的時候設定-ip- forward=true, docker服務會自動開啟宿主機系統的**服務。

訪問所有埠

當啟動 docker服務時候,缺省會新增一條「允許」**策略到 iptables的forward鏈上。通過配置--icc= true|false(預設值為true)引數可以控制預設的策略。

為了安全考慮,可以在/etc/default/docker檔案中配置docker opts=--icc=fase來預設禁止容器之間的相互訪問。

同時,如果啟動 docker服務時手動指定-- iptables= false引數則不會修改宿主機系統上的 iptables規則。

訪問指定埠

在通過-icc= false禁止容器間相互訪問後,仍可以通過--link=container_name:alias選項來允許訪問指定容器的開放埠。

除了預設的 docker0網橋,使用者也可以指定網橋來連線各個容器。

在啟動 docker服務的時候,使用- b bridge或-- bridge=bridge來指定使用的網橋。

如果服務已經執行,那需要先停止服務,並刪除舊的網橋:

service docker stop

ip link set dev docker0 down

brctl delbr docker0

然後建立乙個網橋 bridge0:

sudo brctl addr bridge0

sudo ip addr add 192 168.5.1/24 dev bridge0

ip link set dev bridge0 up

檢視確認網橋建立並啟動:

ip addr show bridge0
配置 docker服務,預設橋接到建立的網橋上:

echo 'docker opts="-b=bridgeo"1>>/etc/default/docker

service docker start

啟動 docker服務。新建乙個容器,可以看到它已經橋接到了 bridge0上。

可以繼續用 brctl show命令檢視橋接的資訊。另外,在容器中可以使用 ip addr和 ip route命令來檢視ip位址配置和路由資訊。

Docker入門(新手高階)

入門簡單需要掌握三個部分 容器資料卷 dockfile docker網路。容器資料卷 volume 解釋兩個專業名詞 具名掛載 匿名掛載 匿名掛載 不指定容器卷名 示例如下 具名掛載 指定容器卷名 檢視卷的一些資訊,檢視docker卷的位置。docker volume inspect redis也可...

(七)Docker網路配置

如不懂docker的網路模式,請檢視docker四種網路模式 預設網路 當安裝docker後,它會自動建立3個網路,可以通過docker network命令來檢視,如下圖所示 docker使用docker network命令對網路進行配置 1.幫助命令 2.檢視docker預設三種網路 docker...

docker高階網路配置

當 docker 啟動時,會自動在主機上建立乙個 docker0 虛擬網橋,實際上是 linux 的乙個 bridge,可以理 解為乙個軟體交換機。它會在掛載到它的網口之間進行 當建立乙個 docker 容器的時候,同時會建立了一對 veth pair 介面 當資料報傳送到乙個介面時,另外 乙個介面...