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"

  • 相关阅读:
    tomcat的一些知识
    WebHttpBinding的流传输模式让我头大了
    实体类编程的最佳伴侣——高效的实体类复制
    MySQL导入导出CSV
    WPF下的事件延迟触发
    WCF使用Json传输的一个BUG
    WCF大文件断点下载示例
    比较DataTable和实体类
    WPF下的右键菜单隐藏
    MySql Workbench中的BUG
  • 原文地址:https://www.cnblogs.com/benjamin77/p/9510026.html
Copyright © 2011-2022 走看看