精华内容
下载资源
问答
  • 本篇文章主要介绍了Docker 配置网络使用 bridge 网络的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • ovs-docker配置网络 docker和openvswitch的环境搭建教程参考: 【docker+openvswitch系列一】在ubuntu下搭建docker环境 【docker+openvswitch系列二】在ubuntu下搭建openvswitch环境 本文参考:...

    ovs-docker配置网络

    docker和openvswitch的环境搭建教程参考:
    【docker+openvswitch系列一】在ubuntu下搭建docker环境
    【docker+openvswitch系列二】在ubuntu下搭建openvswitch环境

    本文参考:https://www.cnblogs.com/whych/p/9601889.html
    首先搬来了实验结构图:
    在这里插入图片描述

    正题:

    一、辅助工作:
    1. 安装openvswitch项目提供的支持Docker容器的辅助脚本ovs-docker:
    wget https://github.com/openvswitch/ovs/raw/master/utilities/ovs-docker
    chmod a+x ovs-docker
    

    ps:该链接时好时坏,作者没有找到更好的下载方法,如果不成功多试几次

    2. 安装Docker的辅助镜像,方便在容器里面使用linux命令:
    service docker start  开启docker服务
    docker pull busybox:latest  下载busybox镜像  
    

    准备工作做好了我们开始正式搭建网络,嘿嘿嘿

    二、正式开始
    1. 搭建网桥和docker容器:
    ovs-vsctl add-br br0 
    ovs-vsctl add-br br1 
    ovs-vsctl show 查看已经搭建好的网桥信息,创建网桥时默认创建同名的网卡
    ip link set br0 up 和创建的网卡设配相连
    ip link set br1 up
    
    加载两个无网络的docker容器:
    注意:每创建完一个按ctrl+p,再按ctrl+q,这样就可以后台运行容器了!!!
    docker run -it --privileged=true --net=none --name box1 busybox:latest /bin/sh
    docker run -it --privileged=true --net=none --name box2 busybox:latest /bin/sh
    这样就运行了两个容器box1和box2
    
    2. 将网桥br0的一端和两个容器关联起来,并设置它们的ip、网关和vlan
    ps:网关相当于后面要配置的netns,地址要相匹配
    
    ./ovs-docker add-port br0 eth0 box1 --ipaddress=10.0.0.1/24 --gateway=10.0.0.253
    对应的参数依次是网桥、容器内的新接口名、对应容器,增加ip地址和网关
    ./ovs-docker set-vlan br0 eth0 box1 5 设置vlan号,实现vlan隔离
    ./ovs-docker add-port br0 eth0 box2 –ipaddress=10.0.0.2/24 –gateway=10.0.0.253 
    ./ovs-docker set-vlan br0 eth0 box2 5 
    
    3. 将两个容器配置在了一个vlan下,测试两个容器的互通性
    docker exec -it box1 /bin/sh  调出box1运行,在容器box1内pingbox2
    ping 10.0.0.2
    检查是否可以看到包的信息,如果失败检查一下自己的上述步骤,box2操作同上,但box1通了的话原理上box2pingbox1也是可以的
    

    我们现在完成了网络结构图左上方的内容,下面我们需要和vlan外部通信了哦

    4. 创建网络名称空间netns(相当于网关),实现网络隔离,并创建veth0和veth1网卡对来实现互连。
    创建netns名称空间r1:
    ip netns add r1   
    
    创建网卡对:
    ip link add veth0.0 type veth peer name veth0.1 
    ip link add veth1.0 type veth peer name veth1.1 
    
    将网卡对的一端与netns互连,添加netns端的两个接口veth0.0和veth1.0:
    ip link set veth0.0 netns r1        	
    ip link set veth1.0 netns r1 
    
    在netns里启动两个接口:
    ip netns exec r1 ip link set veth0.0 up
    ip netns exec r1 ip link set veth1.0 up
    
    给两个接口设置ip:
    ip netns exec r1 ip addr add 192.168.2.221/24 dev veth0.0
    给veth1.0配置两个浮动ip:
    ip netns exec r1 ifconfig veth1.0:1 192.168.1.223/24 up
    ip netns exec r1 ifconfig veth1.0:2 192.168.1.224/24 up
    
    5. 将网卡对的另一边连接网桥,相当于配置网关
    将网卡对的另外一端连接网桥:
    ovs-vsctl add-port br0 veth0.1 
    ovs-vsctl add-port br1 veth1.1 
    ip link set veth0.1 up 
    ip link set veth1.1 up
    
    配置veth0.1,地址要和之前设置的网网关地址相对应:
    ip netns exec r1 ip addr add 10.0.0.253/24 dev veth0.1
    
    设置veth0.1的vlan,保持和box1和box2的一致,即在同一个vlan里:
    ovs-vsctl set port veth0.1 tag=5
    
    到这个位置左边和下面就连通了,可以测试一下它们之间的联通性了。
    进入容器box1或者box2,以1为例:
    docker exec -it box1 /bin/sh
    
    ping网关veth0.1:
    ping 10.0.0.253   同一个vlan下可以ping通
    
    pingveth0.0:
    ping 192.168.1.221   不在一个vlan,原理上不可以Ping通,从而实现网络隔离
    
    6. 配置br1
    ifconfig br1 192.168.1.122
    
    给br1配置本机的物理网卡ens33:
    ovs-vsctl add-port br1 ens33 
    
    增加SNAT和DNAT规则是的容器和外网可以互相访问:
    SNAT:使得box1(10.0.0.1)和box2(10.0.0.2)可以访问外网192.168.2.223、192.168.2.224(veth1.0)
    ip netns exec r1 iptables –t nat –A POSTROUTING –s 10.0.0.1/32 –j SNAT –-to-source 192.168.2.223 
    ip netns exec r1 iptables –t nat –A POSTROUTING –s 10.0.0.2/32 –j SNAT –-to-source 192.168.2.224 
    DNAT:使得外网可以访问容器指定ip
    ip netns exec r1 iptables –t nat –A PREROUTING –d 192.168.2.223/32 –j DNAT –-to-destination 10.0.0.1 
    ip netns exec r1 iptables –t nat –A PREROUTING –d 192.168.2.224/32 –j DNAT -–to-destination 10.0.0.2
    

    整个网络架构基本完成,在br1这边也可以增加其他的vlan,从而实现网络隔离,下面可以测试整个网络的通信。

    7. 测试
    在容器box1:
    可以ping通:
    10.0.0.2(box2) 10.0.0.253(br0-veth0.1) 
    192.168.1.223(veth1.0)  192.168.1.224(veth1.0)
    不可以ping通:
    192.168.1.221(veth0.0)  192.168.1.122(br1)  
    以及本机ip
    
    在本机:
    可以ping通:
    本机ip、192.168.1.122(br1)
    192.168.1.223(veth1.0)  192.168.1.224(veth1.0)
    192.168.1.221(veth0.0)
    在br0所在vlan网里的都不行。
    

    路很漫长,大家继续加油!!!

    展开全文
  • Docker 配置网络 - 使用 bridge 网络

    千次阅读 2018-02-25 22:14:00
    Docker 而言,桥接网络使用允许容器连接到同一个桥接网络来通信的软件网桥,同时提供与未连接到该桥接网络的容器的隔离。Docker bridge 驱动程序自动在主机中安装规则使不同桥接网络上的容器不能直接相互通信。...

    原文地址

    就网络而言,桥接网络(bridge network,也叫网桥)是一种链路层设备,用于转发网段之间的流量。 bridge 可以是硬件设备或在主机内核中运行的软件设备。

    对 Docker 而言,桥接网络使用允许容器连接到同一个桥接网络来通信的软件网桥,同时提供与未连接到该桥接网络的容器的隔离。Docker bridge 驱动程序自动在主机中安装规则使不同桥接网络上的容器不能直接相互通信。

    桥接网络用于在同一个 Docker 守护进程上运行的容器通信。对于不同 Docker 守护进程的容器,可以在操作系统层级管理路由或使用 overlay 网络来实现通信。

    启动 Docker 时,会自动创建默认的桥接网络,新启动的容器如果没有特别指定都会连接到这个默认桥接网络。也可以创建用户自定义的桥接网络,且用户自定义的桥接网络比默认的优先级要高。

    1. 用户自定义 bridge 和默认 bridge 的差别

    1.1 用户定义网桥提供更好的隔离和容器化应用之间的互操作性

    连接到同一个用户自定义网桥的容器会自动互相暴露所有端口,并且不会暴露到外部。这会让容器化应用之间的通信更方便,而不会意外开放进入外部世界。

    假设一个应用包含 web 前端和数据库后端。外部需要访问前端(可能是 80 端口),但是只有前端需要访问数据库后端。使用用户自定义网桥,只需要将前端的端口暴露到外部,数据库应用不需要开启任何端口,因为 web 前端可以通过用户自定义网桥直接访问到。

    如果在默认网桥上运行同一个应用堆栈,需要同时打开 web 前端和数据库后端的端口,每次都需要使用 -p--publish 标志。在意味着 Docker 主机需要通过其他方式来限制对数据库后端端口的访问。

    1.2 用户自定义 bridge 提供容器间自动 DNS 解析(automatic DNS resolution)

    默认网桥上的容器只能通过 IP 地址互相访问,除非你使用 --link 选项,这被认为是遗留的。在用户自定义网桥中,容器之间可以通过名字会别名互相访问。

    这里还是用上面的例子分析,web 前端和数据库后端。如果容器称为 web 和 db,web 容器可以连接到 db 上的 db 容器(the web container can connect to the db container at db),不管这个应用堆栈运行在哪个 Docker 主机上。

    如果在默认网桥上运行相同应用堆栈,需要人工创建容器之间的连接(使用遗留的 --link)标志。这些连接需要双向创建,所以当需要通信的容器个数大于 2 个时复杂度会呈指数增长。或者,你可以编辑容器内的 /etc/hosts 文件,但这会产生难以调试的问题。

    1.3 容器可以在运行中与用户自定义网络连接和断开

    在一个容器的生命周期中,可以在容器运行中将容器与用户自定义网络连接和断开。要从默认网桥中移除容器,需要停止容器并且通过不同的网络选项重新创建。

    1.4 每个用户自定义网络创建一个可配置的桥

    如果你的容器使用默认网桥,你可以配置它,但是所有容器都使用了相同设置,例如 MTU 和 iptables 规则。此外,对默认网桥的配置发生在 Docker 之外,需要重启 Docker。

    用户自定义网桥通过 docker network create 来创建和配置。如果应用程序的不同分组有不同的网络需求,可以独立配置每个用户自定义网桥,就像独立创建一样。

    1.5 默认网桥中连接的容器共享环境变量

    最初,在两个容器之间共享环境变量的唯一方法是使用 --link 标志连接它们。用户自定义网络中无法使用这种类型的变量共享方式。然而,共享环境变量有更好的方式。一些想法:

    • 多个容器可以使用 Docker volume 卷挂载用于共享信息的同一个文件或目录。

    • 可以通过 docker-compose 同时启动多个容器,compose 文件可以定义共享变量。

    • 可以使用 swarm 服务代替独立的容器,可以利用 swarm 的共享的 secretsconfigs

    连接到同一个用户自定义网桥的容器可以有效地将所有端口暴露给对方。 要使不同网络上的容器或非 Docker 主机访问到容器的端口,该端口必须使用 -p--publish 标志来发布。

    2. 管理用户自定义网桥

    通过 docker network create 命令创建用户自定义网桥:

    $ docker network create my-net

    可以指定子网 subnet,IP 地址段,网关和其他选项。查看 docker network create 命令参考手册 或通过 docker network create --help 命令查看详情。

    通过 docker network rm 命令删除用户自定义的网桥。如果容器仍然连接到网络,需要先断开连接才能删除这个网桥。

    $ docker network rm my-net

    到达发生了什么?
    当你创建或删除用户自定义网桥,或将容器从用户自定义网桥连接或断开,Docker 使用特定于操作系统的工具来管理底层网络架构(例如增删网桥设备或配置 Linux 上的 iptables 规则)。这些是具体的实现细节。让 Docker 替你管理你的用户自定义网桥就好了。

    3. 连接容器到用户自定义网桥

    创建新容器时可以指定一个或多个 --network 标志。下面的例子将 Nginx 容器连接到 my-net 网络。同时还将容器的 80 端口发布到 Docker 主机的 8080 端口,这样外部的客户端就可以访问这个端口了。任何其他连接到 my-net 的网络的容器都可以访问这个网络中其他容器的所有端口,反之亦然。

    $ docker create --name my-nginx \
      --network my-net \
      --publish 8080:80 \
      nginx:latest

    使用 docker network connect 命令将运行中的容器连接到已经存在的用户自定义网桥。下面的命令将运行中的 my-nginx 容器连接到已经存在的 my-net 网络:

    $ docker network connect my-net my-nginx

    4. 断开容器到用户自定义网络的连接

    使用 docker network disconnect 命令断开运行中的容器到一个用户自定义网桥的连接。下面的命令将会断开 my-nginx 容器到 my-net 网络的连接:

    $ docker network disconnect my-net my-nginx

    5. 使用 IPv6

    如果需要 Docker 容器支持 IPv6,则需要在创建任何 IPv6 网络或为容器分配 IPv6 地址之前,在 Docker 守护进程中 开启选项 并重新加载配置。

    创建网络时指定 --ipv6 标志可以开启 IPv6。默认网桥上不能有选择地禁用 IPv6。

    6. 开启容器到外部的访问

    默认情况下,从容器发送到默认网桥的流量,并不会被转发到外部。要开启转发,需要改变两个设置。这些不是 Docker 命令,并且它们会影响 Docker 主机的内核。

    • 配置 Linux 内核来允许 IP 转发
    $ sysctl net.ipv4.conf.all.forwarding=1
    • 改变 iptables 的政策,FORWARD 政策从 DROP 变为 ACCEPT
    $ sudo iptables -P FORWARD ACCEPT

    这些设置在重新启动时失效,因此可能需要将它们添加到启动脚本中。

    7. 使用默认网桥

    默认桥接网络被视为 Docker 的遗留细节,不建议用于生产用途。配置默认网桥是一个手动操作,并且它有技术上的缺点。

    7.1 将容器连接到默认网桥

    如果没有通过 --network 标志声明网络,并且指定了网络驱动程序,则默认情况下容器已连接到默认网桥。连接到默认桥接网络的容器可以进行通信,但只能通过 IP 地址进行通信,除非它们使用遗留标志 --link 进行链接。

    7.2 配置默认网桥

    要配置默认网桥,需要在 daemon.json 配置文件中指定选项。下面的例子声明了几个选项。只需要在文件中指定需要自定义的设置。

    {
      "bip": "192.168.1.5/24",
      "fixed-cidr": "192.168.1.5/25",
      "fixed-cidr-v6": "2001:db8::/64",
      "mtu": 1500,
      "default-gateway": "10.20.1.1",
      "default-gateway-v6": "2001:db8:abcd::89",
      "dns": ["10.20.1.2","10.20.1.3"]
    }

    重启 Docker 使变更生效。

    7.3 通过默认网桥使用 IPv6

    如果 Docker 被配置为支持 IPv6(查看 使用 IPv6),则默认网桥会被自动配置为支持 IPv6。不像用户自定义网桥,不能在默认网桥中选择性的关闭 IPv6。

    8. 后续步骤

    展开全文
  • Docker 配置网络 - 使用 host 网络

    千次阅读 2018-03-05 21:31:25
    原文地址如果你为容器使用 host 网络驱动程序,则该容器的网络堆栈不与 Docker 主机隔离。例如,如果运行绑定到端口 80 的容器并使用 host 网络,则可以直接通过宿主机 IP 地址的端口 80 使用该容器的应用程序。在...

    原文地址

    如果你为容器使用 host 网络驱动程序,则该容器的网络堆栈不与 Docker 主机隔离。例如,如果运行绑定到端口 80 的容器并使用 host 网络,则可以直接通过宿主机 IP 地址的端口 80 使用该容器的应用程序。

    在Docker 17.06 及更高版本中,通过将 --network host 传递给 docker container create 命令,还可以为 swarm 服务使用 host 网络。在这种情况下,控制流量(与管理 swarm 和服务相关的流量)仍然通过 overlay 网络发送,但各个 swarm 服务容器使用 Docker 守护进程的 host 网络和端口发送数据。这会产生一些额外的限制。例如,如果服务容器绑定到端口 80,则只有一个服务容器可以在给定的 swarm 节点上运行。

    如果您的容器或服务没有发布端口,则 host 网络不起作用。

    展开全文
  • Docker 配置网络 - 使用 overlay 网络

    万次阅读 2018-02-28 23:03:35
    overlay 网络驱动程序在多个 Docker 守护进程主机之间创建一个分布式网络。这个网络在允许容器连接并进行安全通信的主机专用网络之上(overlay 覆盖在上面)。Docker 透明地处理每个 Docker 守护进程与目标容器之间...

    原文地址

    overlay 网络驱动程序在多个 Docker 守护进程主机之间创建一个分布式网络。这个网络在允许容器连接并进行安全通信的主机专用网络之上(overlay 覆盖在上面)。Docker 透明地处理每个 Docker 守护进程与目标容器之间的数据包的路由。

    当初始化 swarm 集群或将一个 Docker 主机加入已经存在的 swarm 集群时,Docker 主机上会创建两个新网络:
    - 一个称为 ingress 的 overlay 网络,用来处理与 swarm 服务相关的控制和数据流。当创建的 swarm 服务没有连接到用户自定义的 overlay 网络时,这个服务会默认连接到 ingress 网络。
    - 一个称为 docker_gwbridge 的bridge 网络,用来将单个的 Docker 守护进程连接到 swarm 中的其他守护进程。

    可以使用 docker network create 命令创建用户定义的 overlay 网络,就像可以创建用户定义的 bridge 网络一样。服务或容器一次可以连接到多个网络。服务或容器只能通过它们各自连接的网络进行通信。

    尽管可以将 swarm 服务和独立容器连接到同一个 overlay 网络,但默认行为和配置规则不同。因此,本主题分为几个部分:适用于所有 overlay 网络的操作、适用于 swarm 服务网络的操作和适用于独立容器的 overlay 网络的操作。

    1. 适用于所有 overlay 网络的操作

    1.1 创建 overlay 网络

    先决条件:

    • Docker 守护进程的防火墙规则使用 overlay 网络
      需要打开下面的端口才能访问 overlay 网络上的每个主机:

      • TCP 端口 2377:用于集群管理通信
      • TCP 和 UDP 端口 7946:用于节点之间通信
      • UDP 端口 4789:overlay 网络流量
    • 在可以创建 overlay 网络之前,需要通过 docker swarm init 命令将你的 Docker 守护进程初始化为 swarm manager 或使用 docker swarm join 命令将其加入一个已经存在的 swarm。即使你不打算使用 swarm 服务,你也得这么干。这两种方式都会创建默认提供给 swarm 服务使用的 ingress overlay 网络。之后,可以创建其他用户自定义的 overlay 网络。

    要通过创建 overlay 网络来使用 swarm 服务,可以用这样的命令:

    $ docker network create -d overlay my-overlay

    要创建可以用于 swarm 服务和独立容器跟其他 Docker 守护进程中运行的独立容器通信的 overlay 网络,添加 --attachable 标志:

    $ docker network create -d overlay --attachable my-attachable-overlay

    可以指定 IP 地址范围、子网、网关和其他选项。详情可以查看 docker network create --help 命令。

    1.2 加密 overlay 网络上的流量

    所有的 swarm 服务管理流量默认使用 AES 算法 GCM 模式加密。swarm 中的 manager 节点每 12 小时旋转一次用于加密八卦数据(gossip data)的密钥。

    如果要加密应用数据,需要在创建 overlay 网络时添加 --opt encrypted。这会在 vxlan 层级开启 IPSEC 加密。这种加密技术会带来不可忽视的性能损失,因此应该在生产中使用该选项之前对其进行测试。

    添加 overlay 加密后,Docker 在所有的节点间创建 IPSEC 通道,这些节点上为连接到 overlay 网络的服务调度任务。这些通道也使用 AES 算法 GCM 模式加密,manager 节点每 12 小时自动旋转一次密钥。

    不要将 Windows 节点连接到加密过的 overlay 网络.
    Windows 不支持 Overlay 网络的加密。如果一个 Windows 节点试图连接到加密过的 overlay 网络,不会报错但是节点无法通信。

    SWARM 模式 OVERLAY 网络和独立容器
    可以同时使用 --opt encrypted--attachable 选项来使用 overlay 网络,并将非托管容器连接到这个网络:(You can use the overlay network feature with both –opt encrypted –attachable and attach unmanaged containers to that network)

    $ docker network create --opt encrypted --driver overlay --attachable my-attachable-multi-host-network

    1.3 配置默认的 ingress 网络

    1.3.1 概述

    大部分用户不需要配置 ingress 网络,但是 Docker 17.05 及更高版本支持配置功能。如果自动选择的子网和网络上已经存在的子网发生冲突,或需要配置其他的底层网络选项例如 MTU 时,这个配置功能就很有用了。

    配置 ingress 网络涉及到删除和重新创建这个网络。这通常在你在 swarm 中创建任何服务之前完成。如果已经存在暴露端口的服务,需要删除那些服务后才可以移除 ingress 网络。

    在没有 ingress 网络工作期间,已经存在的那些不需要暴露端口的服务会继续工作但不会被负载均衡。这会影响到那些暴露端口的服务,比如暴露 80 端口的 WordPress 服务。

    1.3.2 步骤

    1. 停止服务

    使用 docker network inspect ingress 检查 ingress,并删除容器连接到的 这个 ingress 的所有服务。这些是暴露端口的服务,例如暴露端口 80 的 WordPress 服务。如果这些服务未停止,则下一步将失败。

    2. 删除已经存在的 ingress 网络:

    $ docker network rm ingress
    
    WARNING! Before removing the routing-mesh network, make sure all the nodes
    in your swarm run the same docker engine version. Otherwise, removal may not
    be effective and functionality of newly created ingress networks will be
    impaired.
    Are you sure you want to continue? [y/N]
    

    3. 创建新的 overlay 网络

    使用 --ingress 标志创建新的 overlay 网络,可以使用其他你想设置的选项。下面例子设置 MTU 为 1200,子网为 10.11.0.0/16, 网关为 10.11.0.2

    $ docker network create \
      --driver overlay \
      --ingress \
      --subnet=10.11.0.0/16 \
      --gateway=10.11.0.2 \
      --opt com.docker.network.mtu=1200 \
      my-ingress

    注意:可以给你创建的 ingress 网络命名,不一定是 ingress,但是只能有一个名字。

    4. 重启步骤一中停止的服务

    1.4 配置 docker_gwbridge 接口

    1.4.1 概述

    docker_gwbridge 是用于连接 overlay 网络(包括 ingress 网络)和独立 Docker 守护进程的物理网络的虚拟桥梁。Docker 会在初始化 swarm 或将一个 Docker 主机加入 swarm 时自动创建他,但它并不是 Docker 设备。它存在于 Docker 主机的内核中。如果需要自定义其设置,则必须在将 Docker 主机加入 swarm 之前或临时从 swarm 中暂时删除之后才能执行此操作。

    1.4.2 步骤

    1. 停止 Docker

    2. 删除已经存在的 docker_gwbridge 接口

    $ sudo ip link set docker_gwbridge down
    
    $ sudo ip link del name docker_gwbridge

    3. 开启 Docker,不要加入或初始化 swarm

    4. 创建 docker_gwbridge

    通过 docker network create 命令使用自定义配置手动创建或手动重新创建 docker_gwbridge。下面的例子使用子网 10.11.0.0/16。完整的配置选项可以参考 Bridge 驱动程序选项

    $ docker network create \
    --subnet 10.11.0.0/16 \
    --opt com.docker.network.bridge.name=docker_gwbridge \
    --opt com.docker.network.bridge.enable_icc=false \
    --opt com.docker.network.bridge.enable_ip_masquerade=true \
    docker_gwbridge

    5. 加入或初始化 swarm

    由于该桥已经存在,因此Docker不会使用自动设置来创建它。

    2. 适用于 swarm 服务网络的操作

    2.1 开放 overlay 网络上的接口

    连接到同一 overlay 网络的 swarm 服务可以有效地将所有端口暴露给对方。要使端口可以在服务之外访问,必须在 docker service createdocker service update 命令中使用 -p--publish 标志发布该端口。支持传统的以冒号分隔的语法和较新的逗号分隔值语法。较长的语法是首选,因为它可以自我注释。

    Flag value描述
    -p 8080:80 或
    -p published=8080,target=80
    将服务的 80 端口映射到路由网格的 8080(都是 TCP)
    -p 8080:80/udp 或
    -p published=8080,target=80,protocol=udp
    将服务的 80 端口映射到路由网格的 8080(都是 UDP)
    -p 8080:80/tcp -p 8080:80/udp 或
    -p published=8080,target=80,protocol=tcp -p published=8080,target=80,protocol=udp
    将服务的 80 端口映射到路由网格的 8080(TCP 和 UDP 都分别映射)

    2.2 绕过 swarm 服务的路由网格

    默认情况下,发布端口的 swarm 服务使用路由网格(routing mesh)来完成。当连接到任何 swarm 节点上的已发布端口(无论是否运行给定服务)时,都会透明地将连接重定向到正在运行该服务的 worker 节点。实际上,Docker 充当了 swarm 服务的负载平衡器。基于路由网格的服务以虚拟 IP(VIP)模式运行。即使在每个节点上运行的服务(通过 --global 标志)也使用路由网格。使用路由网格时,不能预知哪个 Docker 节点会服务客户端请求。

    要绕过路由网格,可以使用 DNS Round Robin(DNSRR)模式启动服务,方法是将 --endpoint-mode 标志设置为 dnsrr。必须在服务前运行自己的负载均衡器。对运行在 Docker 主机上的服务名称的 DNS 查询会返回运行该服务的节点的 IP 地址列表。配置负载均衡器使用此列表并平衡各节点间的流量。

    2.3 分离控制流量和数据流量

    默认情况下,尽管 swarm 控制流量是加密的,但 swarm 的控制流量和应用程序之间的控制流量运行在同一网络上。可以将 Docker 配置为使用单独的网络接口来处理两种不同类型的流量。初始化或加入 swarm 时,分别指定 --advertise-addr--datapath-addr。必须为加入 swarm 的每个节点执行此操作。

    3. 适用于独立容器的 overlay 网络的操作

    3.1 将独立容器附加到 overlay 网络

    不使用 --attachable 标志时创建的是 ingress 网络,这意味着只有 swarm 服务可以使用它,而独立容器则不可以。可以将独立容器连接到用户自定义的使用 --attachable 标志创建的 overlay 网络。这使得在不同 Docker 守护进程上运行的独立容器可以通信,而无需在各个 Docker 守护进程主机上设置路由。

    3.2 发布端口

    Flag value描述
    -p 8080:80将容器的 80 端口映射到 overlay 网络的 8080 端口(TCP)
    -p 8080:80/udp将容器的 80 端口映射到 overlay 网络的 8080 端口(UDP)
    -p 8080:80/tcp -p 8080:80/udp将容器的 80 端口映射到 overlay 网络的 8080 端口(TCP 和 UDP)

    4. 下一步

    展开全文
  • Docker 配置网络教程 - overlay 网络

    千次阅读 2018-03-07 21:49:00
    原文地址 ...如何使用在初始化或加入 swarm 时 Docker 自动为你设置的默认 overlay 网络。这个网络并不是生产系统的最佳选择。 如何创建并使用自定义 overlay 网络来连接服务。生产环境中的服务...
  • Docker 配置网络教程 - host 网络

    千次阅读 2018-03-06 22:03:30
    这部分教程中,独立容器直接连接到 Docker 主机的网络,没有网络隔离。 1. 目标 这个教程的目的是启动一个直接绑定到 Docker 主机的 80 端口的 Nginx 容器。从网络角度来看,这跟 Nginx 进程直接运行在 Docker ...
  • Docker 配置网络 - 使用 Macvlan 网络

    千次阅读 2018-03-05 22:06:48
    原文地址有些应用程序,尤其是遗留的或用于监控网络流量的...此时,需要指定 Docker 主机上的物理接口用于 Macvlan,以及 Macvlan 的子网和网关。甚至可以使用不同的物理网络接口来隔离你的 Macvlan 网络。记住以下几
  • Docker 配置网络教程 - macvlan 网络

    千次阅读 2018-03-07 22:25:08
    原文地址 本教程基于连接到 macvlan ...本教程的目标是设置一个桥接的 macvlan 网络并将一个容器连接到该网络,然后设置一个 802.1q trunked macvlan 网络并将一个容器连接到该网络。 2. 先决条件 大多数云...
  • Docker 配置网络 - 关闭容器的网络

    千次阅读 2018-03-05 22:15:14
    如果想要完全关闭容器中的网络堆栈,可以在启动容器的时候使用 --network none 标志。在容器中只会创建回环(loopback)设备。下面例子演示了这一点: 1. 创建容器: $ docker run --rm -dit \ --network none ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 111,966
精华内容 44,786
关键字:

docker配置网络