當 Docker 啟動時,會自動在主機上創(chuàng)建一個 docker0 虛擬網橋,實際上是 Linux 的一個 bridge,可以理解為一個軟件交換機。它會在掛載到它的網口之間進行轉發(fā)。
同時,Docker 隨機分配一個本地未占用的私有網段(在 RFC1918 中定義)中的一個地址給 docker0 接口。比如典型的 172.17.42.1,掩碼為 255.255.0.0。此后啟動的容器內的網口也會自動分配一個同一網段(172.17.0.0/16)的地址。
當創(chuàng)建一個 Docker 容器的時候,同時會創(chuàng)建了一對 veth pair 接口(當數據包發(fā)送到一個接口時,另外一個接口也可以收到相同的數據包)。這對接口一端在容器內,即 eth0;另一端在本地并被掛載到 docker0 網橋,名稱以 veth 開頭(例如 vethAQI2QT)。通過這種方式,主機可以跟容器通信,容器之間也可以相互通信。Docker 就創(chuàng)建了在主機和所有容器之間一個虛擬共享網絡。
http://wiki.jikexueyuan.com/project/docker-technology-and-combat/images/network.png" alt="Docker 網絡" />
接下來的部分將介紹在一些場景中,Docker 所有的網絡定制配置。以及通過 Linux 命令來調整、補充、甚至替換 Docker 默認的網絡配置。
下面是一個跟 Docker 網絡相關的命令列表。
其中有些命令選項只有在 Docker 服務啟動的時候才能配置,而且不能馬上生效。
-b BRIDGE or --bridge=BRIDGE --指定容器掛載的網橋--bip=CIDR --定制 docker0 的掩碼-H SOCKET... or --host=SOCKET... --Docker 服務端接收命令的通道--icc=true|false --是否支持容器之間進行通信--ip-forward=true|false --請看下文容器之間的通信--iptables=true|false --禁止 Docker 添加 iptables 規(guī)則--mtu=BYTES --容器網絡中的 MTU下面2個命令選項既可以在啟動服務時指定,也可以 Docker 容器啟動(docker run)時候指定。在 Docker 服務啟動的時候指定則會成為默認值,后面執(zhí)行 docker run 時可以覆蓋設置的默認值。
--dns=IP_ADDRESS... --使用指定的DNS服務器--dns-search=DOMAIN... --指定DNS搜索域最后這些選項只有在 docker run 執(zhí)行時使用,因為它是針對容器的特性內容。
-h HOSTNAME or --hostname=HOSTNAME --配置容器主機名--link=CONTAINER_NAME:ALIAS --添加到另一個容器的連接--net=bridge|none|container:NAME_or_ID|host --配置容器的橋接模式-p SPEC or --publish=SPEC --映射容器端口到宿主主機-P or --publish-all=true|false --映射容器所有端口到宿主主機