docker網絡配置

查看docker網絡

[root@i zhizhu]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
94669184dd23        backend             bridge              local
57de7f32064e        bridge              bridge              local
4b44a5340d6e        host                host                local
1d49ba42e213        lijiacai            bridge              local
ac8e8ffe243f        none                null                local

 

1.docker單主機容器通信

1.docker網絡有五種模式

none:docker容器內不使用任何網絡,相當於與宿主是隔絕的

host:這個網絡表示容器與宿主機共享網絡,也就是宿主機內的ip與容器內是一致的

bridge:docker默認的網絡模式,爲容器創建獨立的網絡,容器具有獨立的網卡等所有單獨的網絡棧,ip也將任意分配

容器模式:這種模式是將兩個容器的網絡進行共享,與host類似

用戶自定義:這種模式網絡會依附於bridge上,當然本身網絡是隔離開的,網段不一樣

 

2.整體圖

 

3.模式理解

host

優勢:

a) 直接使用宿主機ip進行通信,若宿主機具有公網ip,那麼該容器一樣具有公網ip

b) 性能上需要在bridge等方式轉發數據包

劣勢:

a) 不再擁有隔離網絡棧

b) 容器內的所有端口資源不在享有,而要與宿主機保持一致

這樣的劣勢就代表你無法同時啓動兩個mysql服務的3306端口

bridge

優勢:

a) 獨立網卡,獨立ip,通過docker0網橋仍然可以與宿主機通信

b) 容器內部可以使用所有端口號資源

 

劣勢:

a) 與外界通信時,由於轉發數據,影響性能

b) 容器內的ip任意分配的,不方便把握

none

不包含任何網絡配置,只具有lo這個loopback網卡用於進程通信

其他容器模式

在這個模式下的容器,會使用其他容器的網絡命名空間,其網絡隔離性會處於bridge橋接模式與host模式之間

 

2.容器訪問控制

1.容器的訪問控制,主要通過 Linux 上的 iptables 防火牆來進行管理和實現。

2.容器訪問外部網絡

    a) 查看本地系統的轉發是否打開

[root@i ~]# sysctl net.ipv4.ip_forward net.ipv4.ip_forward = 1

b) 如果爲 0,說明沒有開啓轉發,則需要手動打開

[root@i ~]# sysctl -w net.ipv4.ip_forward=1

 

3.訪問所有端口

1.當啓動docker服務的時候,默認會添加一條轉發策略到本地主機 iptables 的 FORWARD 鏈上

2.策略爲通過(ACCEPT)還是禁止(DROP)取決於配置--icc=true(缺省值)還是 --icc=false

3.如果手動指定 --iptables=false 則不會添加 iptables 規則

 

總結:

可見,默認情況下,不同容器之間是允許網絡互通的。如果爲了安全考慮,可以在 /etc/docker/daemon.json 文件中配置 {"icc": false} 來禁止它(Ubuntu 14.04 等使用 upstart 的系統在文件 /etc/default/docker 中配置 DOCKER_OPTS=--icc=false)。

 

4.訪問指定端口

在通過 -icc=false 關閉網絡訪問後,還可以通過 --link=CONTAINER_NAME:ALIAS 選項來訪問容器的開放端口。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章