解读 1.13.1 | 探究 Docker Stack 和可对接网络 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dataman
V2EX    Docker

解读 1.13.1 | 探究 Docker Stack 和可对接网络

  •  
  •   dataman 2017-02-24 11:33:50 +08:00 5131 次点击
    这是一个创建于 3220 天前的主题,其中的信息可能已经有所发展或是发生改变。

    二月初 docker 1.13.1 版本发布,其中有几个令人兴奋的新特性:涉密管理, stack , docker-compose v3 和可对接网络( attachable network )。 在本文中我们会探究创建可对接网络的各种方式,以及一些潜在的应用案例,并且向大家演示如何使用新的 docker stack 命令。

    创建一个可对接网络

    Docker 网络可以通过 Docker CLI 、 API 或者在 Docker Compose 文件里定义的方式创建。

    Docker CLI

    Docker CLI 有几个管理网络的命令例如 create , ls , rm 和 inspect 。可对接网络是 swarm overlay 网络的类型:

    $ docker network create --driver=overlay --attachable core-infra zhxv6ymxhf2u0983x132hvzxf $ docker network ls NETWORK ID NAME DRIVER SCOPE d1b84196c831 bridge bridge local zhxv6ymxhf2u core-infra overlay swarm 

    Scope 列表明可对接网络只对在 swarm 的 Docker 主机可用。它可以是一个单节点 swarm 或者大规模 swarm 集群,因为 attackable 是 overlay 网络的一个类型。

    现在可以创建一个 Swarm 服务并指定网络:

    $ docker service create --publish 80:80 --network=core-infra --name nginx nginx ufs0fhipmxgh4w8wdf04sbkz3 

    这和通常情况下在默认 ingress 网络创建服务一样。可对接选项很有用因为它意味着可以在这个新网络范围内使用 docker run 来创建容器。

    所以让我们使用 docker run 来创建一个 Alpine Linux 容器,安装 curl 来检测 nginx 实例:

    docker run --network=core-infra -ti alpine:latest sh / # apk add --update curl fetch http://dl-cdn.alpinelinux.org/alpine/v3.3/main/x86_64/APKINDEX.tar.gz fetch http://dl- cdn.alpinelinux.org/alpine/v3.3/community/x86_64/APKINDEX.tar.gz (1/4) Installing openssl (1.0.2k-r0) (2/4) Installing ca-certificates (20161130-r0) (3/4) Installing libssh2 (1.6.0-r1) (4/4) Installing curl (7.52.1-r0) Executing busybox-1.24.1-r7.trigger Executing ca-certificates-20161130-r0.trigger OK: 7 MiB in 15 packages / # curl -v nginx * Rebuilt URL to: nginx/ * Trying 10.0.1.2... * TCP_NODELAY set * Connected to nginx (10.0.1.2) port 80 (#0) > GET / HTTP/1.1 > Host: nginx > User-Agent: curl/7.52.1 > Accept: */* > < HTTP/1.1 200 OK < Server: nginx/1.11.10 < Date: Thu, 16 Feb 2017 08:37:40 GMT 

    我们可以通过名称访问 nginx 服务,这在主机是无法完成的;还可以访问 swarm 上没有 published 的部分,非常方便进行调试。

    一旦创建了容器, docker network inspect core-infra 会展示网络的 Subnet 和其他特征信息。

    Compose / (docker stack)

    在 swarm 模式下如果运行 docker-compose up , Docker Compose 会报错,但是在 1.13Docker 核心项目加入了一个名叫 stack 的新功能。 stack 使用已经实践测试过的 Docker Compose 格式在 swarm 上部署服务。

    docker stack deploy 命令相当于 Docker Compose (一个 Python 应用)用 Golang 重写。

    这是一个部署 compose 文件作为 stack 的例子:

    $ docker stack deploy webtier --compose-file=./docker-compose.yml 
    • 第一个声明的是 stack 的名称,即 webtier
    • stack 文件通过--compose-file 来指定
    • v3 compose 格式引入了新的选项

    stack 命令不能创建新的可对接网络。为了能够让可对接网络使用 stack ,必须通过 docker network create 提早定义它,然后把网络指定为 external :

    version: "3" services: nginx: image: nginx networks: - core-infra networks: core-infra: external: true 

    $ docker stack deploy webtier --compose-file=./docker-compose.yml Creating service webtier_nginx $ docker stack ls NAME SERVICES webtier 1 $ docker stack ps ex1 ID NAME IMAGE NODE DESIRED STATE sxj04xh2z29j webtier_nginx.1 nginx:latest moby Running 

    stack 的小技巧

    stack 包括一系列被标签分组到一起的 Swarm 服务,可以通过 stack 文件创建的服务上运行 docker inspect 命令看到:

    $ docker inspect webtier_nginx --format="{{.Spec.Labels}}" map[com.docker.stack.namespace:webtier] 

    要更新一个已经使用的 stack ,只需要再次输入 docker stack deploy 。

    使用案例

    现在来看几个如何使用可对接网络的例子。

    Privileged 容器 /设备的创建

    总有各种理由让人们想要创建一个 Privileged 容器。

    • 用 Raspberry Pi / IoT 管理硬件
    • 创建 VPN
    • 为 Docker 主机设置管理策略

    管理硬件的例子目前来说我还没有想到让它对 Swarm 服务可用的方法。

    可对接网络提供了从 swarm 服务中分离并调度 Privileged 容器的能力,并且可以让它们保持通信。

    与已有的解决方案共存

    可对接网络帮助 Docker Swarm 服务与以前称为 Swarm 的编排版本进行交互操作。这一点对用户来说很重要,因为他们已经用 Docker 数据中心更早期的版本建立了一套解决方案。

    老的 Swarm 和 Swarm 服务的关键不同在于前者允许容器以一种苛刻的规则方式被调度。声明式 swarm 服务允许定义一个我们想要实现的最终状态,之后 swarm 会进行应用并维持这个状态。

    这意味着团队可以开始接受并向 Swarm 服务转移,享受声明式服务在完全 ad-hoc 容器上的各种好处。

    无服务 /Ad-hoc 任务 /调试

    无服务 framework

    无服务和基于功能的 framework 可以利用一系列声明式服务,同时调度 ad-hoc 容器按需执行无服务的功能。

    Ad-hoc 任务 /调试

    如果不直接使用 Docker API , Ad-hoc 任务很难通过 Swarm 服务来调度。这种交互操作允许我们进行维护和诊断的工作。

    这有几个例子:

    • 灾难复原
    • 数据迁移
    • 调试连接

    以上是正文部分,小数提一下数人云开源容器管理面板 Crane 即基于最新的 Swarm 技术,欢迎大家尝试哦! https://github.com/Dataman-Cloud/crane

    作者: Alex Ellis 文章来源: http://blog.alexellis.io/docker-stacks-attachable-networks/

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     966 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 37ms UTC 18:46 PVG 02:46 LAX 10:46 JFK 13:46
    Do have faith in what youre doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86