• docker1.13新功能network关注点


    网络 

    允许 docker run 连入指定的 swarm mode 的网络 

    https://github.com/docker/docker/pull/25962

    在 Docker 1.12 发布新的 Swarm Mode 之后,很多人都问过这样的问题,怎么才能让 docker run 的容器连入 Swarm Mode 服务的 overlay 网络中去?答案是不可以,因为 swarm 的 overlay 网络是为了 swarm mode service 准备的,相对更健壮,而直接使用 docker run,会破坏了这里面的安全模型。

    但是由于大家需求很多,于是提供了一种折衷的办法。1.13 允许建立网络的时候,设定该网络为 attachable,允许之后的 docker run 的容器连接到该网络上。

    我们创建一个默认的、不允许之后 attach 的网络:

    $ docker network create -d overlay mynet1
    xmgoco2vfrtp0ggc5r0p5z4mg

    然后再创建一个允许 attach 的网络,这里会使用 1.13 新加入的 --attachable 参数:

    $ docker network create -d overlay --attachable mynet2
    yvcyhoc6ni0436jux9azc4cjt

    然后我们启动一个 web 服务,连入这两个网络:

    $ docker service create
    --name web
    --network mynet1
    --network mynet2
    nginx
    vv91wd7166y80lbl833rugl2z

    现在我们用 docker run 启动一个容器连入第一个网络:

    $ docker run -it --rm --network mynet1 busybox
    docker: Error response from daemon: Could not attach to network mynet1: rpc error: code = 7 desc = network mynet1 not manually attachable.

    由于 mynet1 不允许手动 attach 所以这里报错了。

    在 1.12 的情况下,会报告该网络无法给 docker run 使用:

    docker: Error response from daemon: swarm-scoped network (mynet1) is not compatible with `docker create` or `docker run`. This network can only be used by a docker service.
    See 'docker run --help'.

    不过,--attachable 实际上是将网络的安全模型打开了一个缺口,因此这不是默认设置,而且并不推荐使用。用户在使用这个选项建立网络的时候,一定要知道自己在做什么。

    允许 docker service create 映射宿主端口,而不是边界负载均衡网络端口 

    https://github.com/docker/docker/pull/27917
    https://github.com/docker/docker/pull/28943

    docker service create 中的 --publish 格式有进一步的变化。(在 1.13 的 RC 期间,曾经去掉 --publish,改为 --port,经过讨论后,决定保持一致性,继续使用 --publish,不使用新的 --port 选项。)

    在 1.12 中,docker service create 允许使用参数 --publish 80:80 这类形式映射边界(ingress)网络的端口,这样的映射会享受边界负载均衡,以及 routing mesh。

    从 1.13 开始,增加另一种映射模式,被称为 host 模式,也就是说,用这种模式映射的端口,只会映射于容器所运行的主机上。这就和一代 Swarm 中一样了。虽然失去了边界负载均衡,但是确定了映射点,在有的时候这种情况是需要的。

    现在 --publish 的新的参数形式和 --mount 差不多。参数值为 , 逗号分隔的键值对,键值间以 = 等号分隔。目前支持 4 项内容:

    • protocol: 支持 tcp 或者 udp
    • mode: 支持 ingress 或者 host
    • target: 容器的端口号
    • published: 映射到宿主的端口号

    比如,与 -p 8080:80 等效的 --publish 新格式选项为:

    --publish protocol=tcp,mode=ingress,published=8080,target=80

    当然我们可以继续使用 -p 8080:80,但是新的选项格式增加了更多的可能。比如,使用 1.13 开始加入的 host 映射模式:

    ubuntu@d1:~$ docker service create --name web
    --publish mode=host,published=80,target=80
    nginx

    运行成功后,查看一下服务容器运行的节点:

    ubuntu@d1:~$ docker node ls
    ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
    ntjybj51u6zp44akeawuf3i05 d2 Ready Active
    tp7icvjzvxla2n18j3nztgjz6 d3 Ready Active
    vyf3mgcj3uonrnh5xxquasp38 * d1 Ready Active Leader
    ubuntu@d1:~$ docker service ps web
    ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
    5tij5sjvfpsf web.1 nginx:latest d3 Running Running 5 minutes ago *:80->80/tcp

    我们可以看到,集群有3个节点,而服务就一个副本,跑到了 d3 上。如果这是以前的使用边界负载均衡的网络 ingress 的话,那么我们访问任意节点的 80 端口都会看到页面。

    但是,host 模式不同,它只映射容器所在宿主的端口。因此,如果我们 curl d1 的话,应该什么看不到网页,而 curl d3 的话就会看到页面:

    root@d1:~$ curl localhost
    curl: (7) Failed to connect to localhost port 80: Connection refused

    root@d3:~$ curl localhost
    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    ...
  • 相关阅读:
    OCM_第十四天课程:Section6 —》数据库性能调优_各类索引 /调优工具使用/SQL 优化建议
    OCM_第十三天课程:Section6 —》数据库性能调优 _结果缓存 /多列数据信息采集统计/采集数据信息保持游标有效
    OCM_第十二天课程:Section6 —》数据库性能调优_ 资源管理器/执行计划
    使用NuGet时的一个乌龙
    .net调用存储过程碰到的一个问题
    数据库的备份与还原
    创建link server链接服务器碰到的问题及解决办法
    如何管理好项目的DLL
    项目中Enum枚举的使用
    .NET开发知识体系
  • 原文地址:https://www.cnblogs.com/happyyftk/p/7154624.html
Copyright © 2020-2023  润新知