云南省建设执业注册管理中心网站,有专门做预算的网站没,移动网站排名怎么做,怎么把代码添加网站1、Docker Stack简介
Docker Stack(堆栈) 是在 Swarm 上管理服务堆栈的工具。而在以前文章docker swarm集群搭建 介绍的 Docker Swarm 只能实现对单个服务的简单部署#xff0c;于是就引出了Docker Stack。
上面我们介绍到
docker-compose#xff1a;可以在一台机器上使用…1、Docker Stack简介
Docker Stack(堆栈) 是在 Swarm 上管理服务堆栈的工具。而在以前文章docker swarm集群搭建 介绍的 Docker Swarm 只能实现对单个服务的简单部署于是就引出了Docker Stack。
上面我们介绍到
docker-compose可以在一台机器上使用docker-compose.yml轻松部署多个服务如nginx,php,mysqldocker swarm将一个服务部署至多台机器如nginx部署到机器1机器2机器3
那Docker Stack(堆栈) 是将docker-compose和docker swarm结合起来在多台服务器集群部署多个服务。Docker Stack 使用与 Docker Compose 相同的 YAML 文件格式来定义服务堆栈。
2、Docker Stack部署应用
同样以部署nginx为例子用YAML文件格式编排来部署应用。
2.1、编写YAML文件
创建文件夹在此文件夹进行工作
mkdir stack-web
cd stack-web编辑docker-compose.yml
vim docker-compose.yml内容如下
version: 3.6
services:nginx:image: nginx:latestenvironment:- TZAsia/Shanghaideploy:replicas: 2restart_policy:condition: on-failureupdate_config: parallelism: 2delay: 10smonitor: 30smax_failure_ratio: 0.1order: start-firstports:- 80:80- 443:443networks:- nginx_netnetworks:nginx_net:external: true在 Swarm 中你可以使用相同的 Compose 文件来部署这个应用。但有些参数是 Swarm 特有的配置比如副本数量和部署模式如deploy标签下是针对堆栈我们在原有 Compose 文件里增加的内容。
上面关于deploy的参数说明
restart_policy
配置容器的重新启动代替 restart
condition值可以为 none 、on-failure 以及 any(默认)
delay尝试重启的等待时间默认为 0
max_attempts在放弃之前尝试重新启动容器次数默认从不放弃。如果重新启动在配置中没有成功 window则此尝试不计入配置 max_attempts 值。例如如果 max_attempts 值为 2并且第一次尝试重新启动失败则可能会尝试重新启动两次以上。windows在决定重新启动是否成功之前的等时间指定为持续时间默认值立即决定。
update_config
配置更新服务用于无缝更新应用rolling update)
parallelism一次性更新的容器数量
delay更新一组容器之间的等待时间。
failure_action如果更新失败可以执行的的是 continue、rollback 或 pause 默认
monitor每次任务更新后监视失败的时间(ns|us|ms|s|m|h)默认为 0
max_failure_ratio在更新期间能接受的失败率
order更新次序设置top-first旧的任务在开始新任务之前停止、start-first新的任务首先启动并且正在运行的任务短暂重叠默认 stop-first
2.2、部署堆栈
接下来用以下命令运行部署堆栈
sudo docker stack deploy -c docker-compose.yml nginx-stack这个命令会创建一个名为 nginx-stack 的堆栈并根据 Compose 文件中的定义创建服务。 参数说明 –bundle-file【实验阶段】分布式应用程序包文件的路径 -c --compose-file Stack File 路径 –prune删除不再被引用的服务 –resolve-image 查询 Registry 以解决镜像摘要和支持的平台可选值always(默认)、changed、never –with-registry-auth向 Swarm 代理发送 Registry 认证详细信息
部署完成后可以用docker stack ls 和 docker stack ps 查看服务节点。 也可以用上面的swarm命令查看服务docker service ls 和docker service ps。
运行结果如下显示部署完成。
ubuntuubuntu:~/stack-web$ sudo docker stack deploy -c docker-compose.yml nginx-stack
Since --detachfalse was not specified, tasks will be created in the background.
In a future release, --detachfalse will become the default.
Creating service nginx-stack_nginxubuntuubuntu:~/stack-web$ sudo docker stack ls
NAME SERVICES
nginx-stack 1ubuntuubuntu:~/stack-web$ sudo docker stack ps nginx-stack
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
wexhzl04qrr0 nginx-stack_nginx.1 nginx:latest ubuntu Running Running 7 minutes ago
wxt7ovydh38t nginx-stack_nginx.2 nginx:latest ubuntu Running Running 7 minutes ago ubuntuubuntu:~/stack-web$ sudo docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
qme9n3kq0zxu nginx-stack_nginx replicated 2/2 nginx:latest *:80-80/tcp, *:443-443/tcpubuntuubuntu:~/stack-web$ sudo docker service ps nginx-stack_nginx
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
wexhzl04qrr0 nginx-stack_nginx.1 nginx:latest ubuntu Running Running 31 seconds ago
wxt7ovydh38t nginx-stack_nginx.2 nginx:latest ubuntu Running Running 31 seconds ago 浏览器输入IP访问测试部署完成。 常用命令
docker stack deploy 部署新的堆栈或更新现有堆栈
docker stack ls 列出现有堆栈
docker stack ps 列出堆栈中的任务
docker stack rm 删除一个或多个堆栈
docker stack services 列出堆栈中的服务docker stack和docker service 命令有点类似实际上Docker Stack是建立在Docker Service之上的一种更高级的抽象。
使用Docker Service时可以单独管理每个服务并对其进行伸缩、更新和删除。而使用Docker Stack时可以将一组相关的服务捆绑在一起并通过编排文件定义它们之间的关系和依赖性方便一次性部署和管理整个应用程序。根据您的需求选择合适的工具单个服务使用Docker Service复杂应用程序使用Docker Stack。
3、Docker Stack部署多服务应用
上面我们部署了单服务nginx应用有点简单为了实现stack更大的左右我们可以同时部署多服务应用。
示例同时部署wordpress和mysql服务
编辑YAML文件
vim docker-compose.yml内容如下
version: 3.8services:wordpress:image: wordpress:latestports:- 80:80environment:WORDPRESS_DB_HOST: dbWORDPRESS_DB_NAME: wordpressWORDPRESS_DB_USER: wordpressWORDPRESS_DB_PASSWORD: qwe12345networks:- web-networkdeploy:replicas: 2restart_policy:condition: on-failuredelay: 5smax_attempts: 3update_config:parallelism: 1delay: 10sdb:image: mysql:latestenvironment:MYSQL_ROOT_PASSWORD: exampleMYSQL_DATABASE: wordpressMYSQL_USER: wordpressMYSQL_PASSWORD: qwe12345volumes:- ./mysql-data:/var/lib/mysql#设置网络networks:- web-networkdeploy:#当前容器的扩展类型 replicated可扩展global不可扩展mode: globalplacement:constraints:# 指定容器部署节点manager- node.role managernetworks:web-network:driver: overlay以上mysql的deploy有所不同因为这里考虑mysql只需要一个就行不需要多个服务器所以部署在管理节点即可根据使用情况调整。
由于上面mysql挂载了文件夹存储数据所以在当前创建文件夹否则会因找不到文件夹mysql启动失败。
mkdir mysql-data启动部署编排
sudo docker stack deploy -c docker-compose.yml wordpress-stack用docker stack ls 和docker stack ps wordpress-stack查看启动服务信息
ubuntuubuntu:~/stack-web$ sudo docker stack ls
NAME SERVICES
wordpress-stack 2ubuntuubuntu:~/stack-web$ sudo docker stack ps wordpress-stack
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
9e8ustjfy021 wordpress-stack_db.xcpn4el8vvs2hymojpbay8m6q mysql:latest ubuntu Running Running 7 seconds ago
pzxcwpxoupmw wordpress-stack_wordpress.1 wordpress:latest ubuntu Running Running 12 seconds ago
jjdn4s2a53e8 wordpress-stack_wordpress.2 wordpress:latest ubuntu Running Running 12 seconds ago 也可以用swarm的命令 service查看每个服务对于的node节点信息如下显示。 wordpress已经分配2个副本db按要求只有一个节点。
ubuntuubuntu:~/stack-web$ sudo docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
ubgozw57txda wordpress-stack_db global 1/1 mysql:latest
060g92r8f8ys wordpress-stack_wordpress replicated 2/2 wordpress:latest *:80-80/tcp
ubuntuubuntu:~/stack-web$ sudo docker service ps 060g92r8f8ys
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
pzxcwpxoupmw wordpress-stack_wordpress.1 wordpress:latest ubuntu Running Running 8 minutes ago
jjdn4s2a53e8 wordpress-stack_wordpress.2 wordpress:latest ubuntu Running Running 8 minutes ago ubuntuubuntu:~/stack-web$ sudo docker service ps ubgozw57txda
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
9e8ustjfy021 wordpress-stack_db.xcpn4el8vvs2hymojpbay8m6q mysql:latest ubuntu Running Running 8 minutes ago 浏览器IP访问测试两个IP都可以正常访问。 这里集群多服务部署就完成了。