1. 程式人生 > >Docker學習(六): 網絡使用與配置

Docker學習(六): 網絡使用與配置

sock AR -i 回顧 覆蓋 htm 參考 ble dock

特別聲明:

  博文主要是學習過程中的知識整理,以便之後的查閱回顧。部分內容來源於網絡(如有摘錄未標註請指出)。內容如有差錯,也歡迎指正!

=============系列文章=============

1. Docker學習(一): 基本概念

2. Docker學習(二): 鏡像的使用與構建

3. Docker學習(三): Dockerfile指令介紹

4. Docker學習(四): 操作容器

5. Docker學習(五): 倉庫與數據管理

6. Docker學習(六): 網絡使用與配置

=================================

一、端口映射

  -p 或 -P 參數來指定端口映射,當-P標記時,Docker會隨機映射一個49000~49900的端口內部容器開放的網絡端口。

  -p:可以指定要映射的端口,並且在一個指定端口上只可以綁定一個容器。

    格式:ip:hosrtPort:containerPort | ip::containerPort | hostPort:containerPort

  映射所有接口地址:默認綁定本地所有接口上的所有地址

    docker run -d -p 5000:5000 IMAGE COMMAND

  映射到指定地址的知道端口

    docker run -d -p 127.0.0.1:5000:5000 IMAGE COMMAND

  映射到指定地址的任意端口

    docker run -d -p 127.0.0.1::5000 IAMGE COMMAND

  查看映射端口配置

    docker port nostalgic_morse 5000

二·、容器互聯

  容器的連接系統是除了端口映射外,另一種跟容器中應用交互的方式。該系統會在源和接收容器之間創建一個隧道,接收容器可以看到源容器指定的信息。

  --link name:alias(name是要鏈接容器的名稱,alias是這個連接的別名)

    docker run -d -P --name web --link db:db IAMGE COMMAND

  Docker在兩個互聯的容器之間創建了一個安全隧道,而且不用映射它們的端口到宿主機上。Docker通過2中方式為容器公開連接信息:

    1.環境變量,用env命令查看

      docker run --rm --name web2 --link db:db IMAGE env

    2.更新/etc/hosts文件  

      docker run -it --rm --link db:db IMAGE /bin/bash

      cat /etc/hosts  #查看主機配置包含了連接的兩個容器

三、網絡配置選項

  指定容器掛在的網橋:-b BRIDGE 或 --bridge=BRIDGE

  定制docker0的掩碼:--bip=CIDR

  Docker服務端接收命令的通道:-H SOCKET... 或 --host=SOCKET...

  是否支持容器之間進行通信:--icc=true|false

  容器間通信:--ip-forward=true|false

  是否允許添加iptables規則:--iptables=true|false

  容器網絡中的MTU:--mtu=BYTES

  

  以下2個選項既可以在啟動服務時指定,也可以Docker容器啟動時候指定。在Docker服務啟動的時候指定則會成為默認值,後面執行docker run時可以覆蓋設置的默認值。

  指定DNS服務器:--dns=IP_ADDRESS...

  指定DNS搜索域:--dns-search=DOMAIN...

  以下選項只有在docker run執行時使用,針對容器的特性內容。

  配置容器主機名:-h HOSTNAME 或 --hostname=HOSTNAME

  添加到另一個容器的連接:--link=CONTAINER_NAME:ALIAS

  配置容器的橋接模式:--net=bridge|none|container:NAME_or_ID|host

  映射容器端口到宿主主機:-p SPEC 或 --publish=SPEC

  映射容器所有端口到宿主主機:-P 或 --publish-all=true|false

  

四、容器訪問控制(iptables防火墻來實現)

  容器訪問外部網路:需要本地系統的轉發支持。

    sysctl net.ipv4.ip_forward  #檢查轉發是否打開

    net.ipv4.ip_forward = 1  #如果為0,說明沒有開啟

    sysctl -w net.ipv4.ip_forward=1  #開啟轉發

  在啟動Docker服務的時候設定--ip-forward=true,Docker就會自動開啟轉發。

  容器之間訪問:容器的網絡拓撲是否已經互聯。默認情況下,所有容器都會被連接到docker0網橋上;本地系統的防火墻iptables是否允許通過。

  訪問所有端口:當啟動Docker服務時候,默認會添加一條轉發策略到iptables的FORWARD鏈上。策略為通過(ACCEPT)還是禁止(DROP)取決於配置--icc=true(缺省值)還是--icc=false。如果收到指定--iptables=false則不會添加iptables規則。默認情況下,不同容器之間是允許網絡互通的。如果為了安全考慮,可以在/etc/default/docker文件中配置DOCKER_OPTS=--icc=false來禁止。

  

    

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

參考:

1.《docker_practice》

Docker學習(六): 網絡使用與配置