DockerStack 实战

Docker Stack简介

docker stack是基于cluster集群模式,发布服务的一个功能。
docker stack 有如下几个命令
docker stack deploy 发布或者更新一个stack
docker stack list 获取所有stack
docker stack ps 列出stack中运行的task
docker stack services 列出stack中的服务
docker stack rm 移除stack

wordpress实战

基于docker stack 实现之前的wordpress功能

version: '3'

services:

  web:
    image: wordpress
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_PASSWORD: root
    networks:
      - my-network
    depends_on:
      - mysql
    deploy:
      mode: replicated
      replicas: 3
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
      update_config:
        parallelism: 1
        delay: 10s

  mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: wordpress
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - my-network
    deploy:
      mode: global
      placement:
        constraints:
          - node.role == manager

volumes:
  mysql-data:

networks:
  my-network:
    driver: overlay

简单解释下docker-compose的各个参数
services : 要运行的服务,这里填写了两个服务,web服务和mysql服务
web服务的构建方式为镜像构建,端口为80端口映射为8080端口
environment : 表示环境变量,通过environment传递给容器
networks : 两个服务都通过my-network 网络通信
deploy : 这里定义了发布规则,mode 为replicated表示这个服务可以复制很多个实例
模式为global表示之启动一个实例,不允许复制
replicas : 表示副本数量
restart_policy : 重启策略,condition为失败时,重启
delay : 多个实例重启延迟为5s
max_attempts : 表示最大尝试次数为3
update_config : 表示更新配置,parallelism表示并行更新数量
placement :设置服务运行的位置,constraints表示约束,
node.role == manager只允许该服务运行在manager节点
volumes :表示挂载的卷
networks: 设置网络driver为overlay,这样可以允许多主机互通

通过docker stack发布服务

执行如下命令

docker stack deploy  wordpress --compose-file  docker-compose.yml

可以看到创建了如下服务

Creating network wordpress_my-network
Creating service wordpress_web
Creating service wordpress_mysql

接下来我们看看运行了哪些stack

docker stack list

会展示cluster运行的stack

NAME                SERVICES            ORCHESTRATOR
wordpress           2                   Swarm

可以看到名字为wordpress的stack正在运行,其上运行了两个服务
查看wordpress上具体的服务

docker stack services wordpress

可以看到服务

ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
2soubn9aey1y        wordpress_mysql     global              1/1                 mysql:5.7           
p3h9g6tigocx        wordpress_web       replicated          3/3                 wordpress:latest    *:8080->80/tcp

有两个服务,分别是wordpress_mysql和wordpress_web。在web和mysql之前增加了wordpress这个stack的名字
接下来列出wordpress中运行的task

docker stack ps wordpress

可以看到stack上跑了三个服务

ID                  NAME                                        IMAGE               NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
gvtnr0dy5sjs        wordpress_mysql.axapk9ke3o47r3er3jeqilpgg   mysql:5.7           VM-0-9-ubuntu       Running             Running 24 minutes ago                       
q15ncnt0cx73        wordpress_web.1                             wordpress:latest    instance-6nsdfhv9   Running             Running 24 minutes ago                       
z3ivbcopqguv        wordpress_web.2                             wordpress:latest    VM-0-9-ubuntu       Running             Running 24 minutes ago                       
zmlyu8lnw78x        wordpress_web.3                             wordpress:latest    instance-6nsdfhv9   Running             Running 24 minutes ago

如果要更新服务,可以通过修改docker-compose修改配置,然后重新deploy指定修改后的docker-compose即可。

最后可以通过docker stack rm 删除stack

docker stack rm wordpress

可以看到服务被移除

Removing service wordpress_mysql
Removing service wordpress_web
Removing network wordpress_my-network

  

感谢关注我的公众号

wxgzh.jpg

posted @ 2020-12-08 12:00  恋恋风辰  阅读(404)  评论(0编辑  收藏  举报