zoukankan      html  css  js  c++  java
  • 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"

  • 相关阅读:
    shell进行mysql统计
    java I/O总结
    Hbase源码分析:Hbase UI中Requests Per Second的具体含义
    ASP.NET Session State Overview
    What is an ISAPI Extension?
    innerxml and outerxml
    postman
    FileZilla文件下载的目录
    how to use webpart container in kentico
    Consider using EXISTS instead of IN
  • 原文地址:https://www.cnblogs.com/benjamin77/p/9510026.html
Copyright © 2011-2022 走看看