Docker Swarm系列——5.Swarm服务文件


在这篇文章中,大家将会了解如何通过docker-compose.yml文件的形式部署服务。从docker1.13版本开始,新的 docker compose v3引入适用于Docker Swarm模式的 stack deploy服务部署方式,所有我们就直接使用新的v3标准。

1. 创建文件

在之前的几篇文章中,我们都是通过docker CLI命令行的形式部署服务。命令行虽然方便,但如果服务的配置变动几次之后,我们还能记得每一次变动的细节吗?如果要部署多个服务,或者从开发环境转移到测试、正式环境,我们还能一字不差地把每个服务部署上去吗?版本变动导致的配置差异如何记录呢?…

此类上述的问题在于我们无法通过一个良好的形式来记录每一次编写的命令行,这就是我们为什么要引入docker-compose.yml文件的其中原因之一,同时,我们能通过配置文件的形式编辑很多命令行无法实现的细节。

还记得我们通过docker service create --name http --network httpnet --replicas 2 -p 80:80 nandy/show-host-info:v1部署的http服务吗?这次,我们通过docker-compose.yml来实现。

$ vim docker-compose.yml

version: '3'
services:
  http:
    image: nandy/show-host-info:v1
    deploy:
      replicas: 2
    networks:
      - httpnet
    ports:
      - 80:80

networks:
  httpnet:
    external: true

我们先不用马上弄明白它的语法和含义,只需要大致看一下格式,接下来通过它来部署服务。

2. 部署服务

文章的最开始提到,stack deploycompose v3引入的,先来看一下它的帮助命令:

$ docker stack --help

Usage:  docker stack COMMAND

Manage Docker stacks

Commands:
  deploy      Deploy a new stack or update an existing stack
  ls          List stacks
  ps          List the tasks in the stack
  rm          Remove one or more stacks
  services    List the services in the stack

Run 'docker stack COMMAND --help' for more information on a command.

什么是stack呢?它其实是一个或多个具有紧密关系的服务的集合。举个例子,我们部署一个网站,可能包括web, api, mysql, redis等服务,通过它们的紧密配合,网站才能正常运行起来,stack就像例子中地网站的概念。

通过docker stack deploy -c docker-compose.yml first-stack命令来部署服务:

$ docker stack ls
NAME                SERVICES
first-stack         1

$ docker stack ps first-stack
ID                  NAME                 IMAGE                     NODE                DESIRED STATE       CURRENT STATE            ERROR  PORTS
9a5un2j3gf60        first-stack_http.1   nandy/show-host-info:v1   host02              Running             Running 36 seconds ago
k73s9ycn5dyd        first-stack_http.2   nandy/show-host-info:v1   host02              Running             Running 36 seconds ago

我们可以看到,新的名为first-stack的stack和名为first-stack_http的service已经正常在运行,通过前几篇文章中介绍的docker service --help也可以查看:

$ docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE                     PORTS
te7sryp3cufn        first-stack_http    replicated          2/2                 nandy/show-host-info:v1   *:82->80/tcp
$ docker service  ps first-stack_http
ID                  NAME                 IMAGE                     NODE                DESIRED STATE       CURRENT STATE           ERRO  PORTS
9a5un2j3gf60        first-stack_http.1   nandy/show-host-info:v1   host02              Running             Running 3 minutes ago
k73s9ycn5dyd        first-stack_http.2   nandy/show-host-info:v1   host02              Running             Running 3 minutes ago

first-stack_http其实就是之前的http服务,只是这次加了名为first-stack的前缀,并通过_下划线分开,命名规则为{stack-name}_{service-name}

3. 文件说明

docker-compose.yml文件主要分为4个模块:

  • version,代表【版本】,有v1, v2, v3三个大版本以及各个小版本如v2.1, v3.4,版本意味着语法升级、新功能、不兼容等。
  • services,代表【服务】,有多少个服务就有多少个子服务,如web, api, mysql, redis等。
  • volumes,代表【存储】,这取决于服务是否需要在Swarm节点中保存数据,如示例中的http服务不需要保存,因此就没有。
  • networks,代表【网络】,有3种创建方式,提前创建、指定创建、缺省创建,每个服务都会注册到对应的网络之中。

可以看出,version, services必填,volumes, networks可以缺省,但含义不同,存储缺省代表数据不用保存,网络缺省任会创建默认网络{stack-name}_default

总结一下,docker-compose.yml文件其实是把docker CLI的命令通过yaml文件的格式组织起来,不仅方便查看、传输,还有利于版本控制。但文件和命令两种形式在部分语法上还有细微的差别,只有逐渐掌握之后才能熟练编写。

YAML文件格式,详见wiki;STACK文件语法说明,详见docker stack deploy;CLI命令创建服务,详见docker create

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值