docker從零開始網絡(七) 配置daemon和容器


啟用IPv6支持

在Docker容器或swarm服務中使用IPv6之前,需要在Docker守護程序中啟用IPv6支持。之后,您可以選擇將IPv4或IPv6(或兩者)與任何容器,服務或網絡一起使用。

注意:僅在Linux主機上運行的Docker守護程序上支持IPv6網絡。

  1. 編輯/etc/docker/daemon.json並將ipv6設置true

    {
      "ipv6": true
    }

     

    保存文件。

  2. 重新加載Docker配置文件。

    $ systemctl reload docker

     

您現在可以使用該--ipv6標志創建網絡,並使用該--ip6標志分配容器IPv6地址

Docker和iptables

在Linux上,Docker操縱iptables規則以提供網絡隔離。這是一個實現細節,您不應該修改Docker插入iptables策略的規則

在Docker規則之前添加iptables策略

Docker的所有iptables規則都被添加到DOCKER鏈中。不要手動操作此表。如果您需要添加在Docker規則之前加載的規則,請將它們添加到DOCKER-USER鏈中。在Docker自動創建任何規則之前加載這些規則。

限制與Docker守護程序的連接

默認情況下,允許所有外部源IP連接到Docker守護程序。要僅允許特定IP或網絡訪問容器,請在DOCKER過濾器鏈的頂部插入否定規則。例如,以下規則限制對除192.168.1.1之外的所有IP地址的外部訪問:

$ iptables -I DOCKER-USER -i ext_if ! -s 192.168.1.1 -j DROP

您可以改為允許來自源子網的連接。以下規則僅允許從子網192.168.1.0/24進行訪問:

$ iptables -I DOCKER-USER -i ext_if ! -s 192.168.1.0/24 -j DROP

最后,您可以指定要接受的IP地址范圍--src-range (記住還要-m iprange在使用時添加--src-range--dst-range):

$ iptables -I DOCKER-USER -m iprange -i ext_if ! --src-range 192.168.1.1-192.168.1.3 -j DROP

 

iptables復雜,更復雜的規則超出了本主題的范圍。有關 更多信息,請參見Netfilter.org HOWTO

要防止Docker完全操作iptables策略,請將iptables設置 false /etc/docker/daemon.json這對大多數用戶來說是不合適的,因為這些iptables策略需要手動管理。

 

集裝箱網絡

容器使用的網絡類型(無論是網橋, 覆蓋macvlan網絡還是自定義網絡插件)在容器內是透明的。從容器的角度來看,它具有網絡接口,包括IP地址,網關,路由表,DNS服務和其他網絡詳細信息(假設容器未使用none網絡驅動程序)。本主題是從容器的角度來看網絡問題。

發布的端口

默認情況下,當您創建容器時,它不會將其任何端口發布到外部世界。要使端口可用於Docker之外的服務,或者未連接到容器網絡的Docker容器,請使用 --publish-p標記。這將創建一個防火牆規則,將容器端口映射到Docker主機上的端口。這里有些例子。

標志值 描述
-p 8080:80 將容器中的TCP端口80映射到Docker主機上的端口8080。
-p 192.168.1.100:8080:80 將容器中的TCP端口80映射到Docker主機上的端口8080,以連接到主機IP 192.168.1.100。
-p 8080:80/udp 將容器中的UDP端口80映射到Docker主機上的端口8080。
-p 8080:80/tcp -p 8080:80/udp 將容器中的TCP端口80映射到Docker主機上的TCP端口8080,並將容器中的UDP端口80映射到Docker主機上的UDP端口8080。

IP地址和主機名

默認情況下,為容器分配連接到的每個Docker網絡的IP地址。IP地址是從分配網絡的池中分配的,因此Docker守護進程實際上充當每個容器的DHCP服務器。每個網絡還具有默認子網掩碼和網關。

當容器啟動時,它只能使用連接到單個網絡 --network但是,您可以使用運行容器連接到多個網絡docker network connect

使用時將現有容器連接到其他網絡時 docker network connect,可以使用該命令上--ip--ip6標志來指定其他網絡上容器的IP地址。

同樣,容器的主機名默認為Docker中容器的名稱。您可以使用覆蓋主機名--hostname使用時連接到現有網絡時docker network connect,可以使用該--alias 標志為該網絡上的容器指定其他網絡別名。

DNS服務

默認情況下,容器繼承Docker守護程序的DNS設置,包括/etc/hosts/etc/resolv.conf。您可以基於每個容器覆蓋這些設置。

描述
--dns DNS服務器的IP地址。要指定多個DNS服務器,請使用多個--dns標志。如果容器無法訪問您指定的任何IP地址,8.8.8.8則會添加Google的公共DNS服務器,以便您的容器可以解析Internet域。
--dns-search 用於搜索非完全限定主機名的DNS搜索域。要指定多個DNS搜索前綴,請使用多個--dns-search標志。
--dns-opt 表示DNS選項及其值的鍵值對。有關resolv.conf有效選項,請參閱操作系統的文檔
--hostname 容器用於自身的主機名。如果未指定,則默認為容器的名稱。

配置Docker以使用代理服務器

如果您的容器需要使用HTTP,HTTPS或FTP代理服務器,則可以通過不同方式對其進行配置:

  • 在Docker 17.07及更高版本中,您可以 將Docker客戶端配置為自動將代理信息傳遞給容器。

  • 在Docker 17.06及更低版本中,您必須 在容器中設置適當的環境變量您可以在構建映像時(這使圖像不那么便攜)或創建或運行容器時執行此操作。

配置Docker客戶端

  1. 在Docker客戶端上,~/.docker/config.json在啟動容器的用戶的主目錄中創建或編輯該文件添加如下所示的JSON,用httpsProxyftpProxy在必要時替換代理類型,並替換代理服務器的地址和端口。您可以同時配置多個代理服務器。

    您可以選擇通過將noProxy設置為一個或多個以逗號分隔的IP地址或主機來排除主機或范圍通過代理服務器*支持將該字符用作通配符,如此示例所示。

    {
     "proxies":
     {
       "default":
       {
         "httpProxy": "http://127.0.0.1:3001",
         "noProxy": "*.test.example.com,.example2.com"
       }
     }
    }

     

    保存文件。

  2. 創建或啟動新容器時,會在容器中自動設置環境變量。

使用環境變量

手動設置環境變量

在構建映像時,或在創建或運行容器時使用標志--env 時,可以將以下一個或多個變量設置為適當的值。此方法使鏡像的可移植性降低,因此如果您使用Docker 17.07或更高版本,則應該配置Docker客戶端

 

變量 Dockerfile示例 docker run 例
HTTP_PROXY ENV HTTP_PROXY "http://127.0.0.1:3001" --env HTTP_PROXY="http://127.0.0.1:3001"
HTTPS_PROXY ENV HTTPS_PROXY "https://127.0.0.1:3001" --env HTTPS_PROXY="https://127.0.0.1:3001"
FTP_PROXY ENV FTP_PROXY "ftp://127.0.0.1:3001" --env FTP_PROXY="ftp://127.0.0.1:3001"
NO_PROXY ENV NO_PROXY "*.test.example.com,.example2.com" --env NO_PROXY="*.test.example.com,.example2.com"


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM