天天看點

Docker 使用指南 (三)—— 網絡配置

本次實驗環境:騰訊雲伺服器 CentOS 6.7 x86_64

Docker 配置容器的步驟是:

1.建立一對虛拟接口 2.在主Docker主機内部給它一個唯一的名稱,比如veth65f9,綁定它到docker0或者Docker使用的任何網橋上 3.讓其他的接口通路外國網站進入新的容器(已經提供了lo接口),在容器的獨立和唯一網絡接口命名空間内,重新命名它為更漂亮的名字eth0,名稱不要和其他的實體接口沖突 4.在網橋的網絡位址通路内給容器的eth0一個新的IP位址,設定它的預設路由為Docker主機在網橋上擁有的IP位址。

這些步驟結束後,容器将立即擁有一個eth0(虛拟)網卡,并會發現它自己可以和其他的容器以及網際網路通訊。 你可以使用 –net= 這個選項來執行 docker run 啟動一個容器,這個選項有一下可選參數。

–net=bridge— 預設選項,用網橋的方式來連接配接docker容器。 –net=host— docker跳過配置容器的獨立網絡棧。 –net=container:NAME_or_ID— 告訴docker讓這個建立的容器使用已有容器的網絡配置。 –net=none— 告訴docker為建立的容器建立一個網絡棧,但不對這個網絡棧進行任何配置,是以隻能通路本地網絡,沒有外網。

這是 docker 預設的網絡模式,Docker 背景程式會建立 docker0,一個虛拟的以太網橋,用于自動轉發與之連接配接的任意網絡接口間的資料包。在bridge模式下,連在同一網橋上的容器可以互相通信。

Docker 使用指南 (三)—— 網絡配置

<code>[root@sta2 docker]# docker run -it -P --name mynginx nginx #為容器做端口映射</code>

使用橋接模式時,docker會建立一個docker0 的網橋,并将這個網絡裝置加入到docker0網橋中,可以通過brctl show指令檢視。

從docker0子網中配置設定一個IP給容器使用,并設定docker0的IP位址為容器的預設網關。

容器中的網絡配置:

Docker 使用指南 (三)—— 網絡配置

檢視映射端口配置:

<code>[root@sta2 docker]# docker ps -l</code>

Docker 使用指南 (三)—— 網絡配置

或者使用以下方法:

<code>[root@sta2 docker]# docker port mynginx 443/tcp -&gt; 0.0.0.0:32774 80/tcp -&gt; 0.0.0.0:32775</code>

當使用 -P 标記時,Docker 會随機映射一個 49000~49900 的端口到内部容器開放的網絡端口,nginx 映射的端口固定為32774 和 32775。

檢視通路日志: <code>[root@sta2 docker]# docker logs -f mynginx</code>

Docker 使用指南 (三)—— 網絡配置

使用 -p(小寫的)則可以指定要映射的端口,并且,在一個指定端口上隻可以綁定一個容器,-p 标記可以多次使用來綁定多個端口。支援的格式有 ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort 。

可以使用 hostPort:containerPort 映射所有接口位址:

<code># docker run -d -p 5000:5000 --name mydocker nginx</code>

此時預設會綁定本地所有接口上的所有位址。 可以使用 ip:hostPort:containerPort 格式指定映射使用一個特定位址,映射到指定位址的指定端口

<code># docker run -d -p 127.0.0.1:5000:5000 --name mydocker nginx</code>

使用 ip::containerPort 綁定 localhost 的任意端口到容器的 5000 端口,本地主機會自動配置設定一個端口。映射到指定位址的任意端口:

<code># docker run -d -p 127.0.0.1::5000 --name mydocker nginx</code> docker 做端口映射時會生成 iptables 規則,端口映射前的 iptables 規則:

Docker 使用指南 (三)—— 網絡配置

端口映射後的 iptables 規則:

Docker 使用指南 (三)—— 網絡配置

此模式使用主機的網絡

<code># docker run -it --name feiyu-host --net=host busybox sh</code>

Docker 使用指南 (三)—— 網絡配置

這種模式下與其他容器共享一個網絡

<code># docker run -it --name feiyu-con --net=container:feiyu busybox sh</code>

Docker 使用指南 (三)—— 網絡配置

這種模式隻能通路本地網絡,沒有外網。

Docker 使用指南 (三)—— 網絡配置