我们上面用swarm部署服务,单个服务还好,如果服务很多怎么解决,这里我们使用到DockerStack管理服务。上面我们学习了如何配置swarm集群,知道了如何在swarm集群上部署应用。现在,我们开始了解Docker层次结构中的最高层——堆栈。堆栈是相关服务的组合,可以一起编排和管理。在单机模式下,我们可以使用Docker-Compose来编排多个服务,而DockerSwarm只能实现单个服务的简单部署。因此,引入本文的主角DockerStack。通过DockerStack,我们只需要修改已有的docker-compose.yml配置文件,即可完成Docker集群环境下的多服务编排。集群搭建案例应用部署数量服务名称mysql1nacos1learn-docker-gateway1learn-docker-web2learn-docker-storage2创建docker-compose.yml首先创建一个docker-compose.yml文件,使用DockerComposev3的语法我们把我们原来的单机版本docker-compose.yml转换以下版本:'3.9'services:mysql:image:mysql:5.7.33networks:-learn-docker-networkvolumes:-"/tmp/etc/mysql:/etc/mysql/mysql.conf.d/"-"/tmp/data/mysql:/var/lib/mysql"环境:MYSQL_ROOT_PASSWORD:'root'deploy:mode:replicatedreplicas:1placement:constraints:-'node.labels.role==data'restart_policy:condition:on-failuredelay:5snacos:image:nacos/nacos-serverports:-"8848:8848"networks:-learn-docker-network环境:MODE:'stand单独'JVM_XMS:'128m'JVM_XMX:'128m'deploy:mode:replicatedreplicas:1restart_policy:condition:on-failuredelay:5slearn-docker-web:image:manager-hongbaoyu-java.itheima.net:8443/library/learn-docker-web:1.0-SNAPSHOTnetworks:-learn-docker-networkdepends_on:-nacos-mysqldeploy:mode:replicatedreplicas:2restart_policy:condition:on-failuredelay:5s学习-docker-storage:image:manager-hongbaoyu-java.itheima.net:8443/library/learn-docker-storage:1.0-SNAPSHOTnetworks:-learn-docker-networkdepends_on:-nacos-mysqldeploy:mode:replicatedreplicas:2restart_policy:条件:失败延迟:5slearn-docker-gateway:image:manager-hongbaoyu-java.itheima.net:8443/library/learn-docker-gateway:1.0-SNAPSHOT端口:-“8888:8888”网络:-learn-docker-networkdepends_on:-nacos-mysqldeploy:mode:replicatedreplicas:1restart_policy:condition:on-failuredelay:5svisualizer:image:dockersamples/visualizerports:-"8080:8080"volumes:-"/var/run/docker.sock:/var/run/docker.sock"deploy:mode:replicatedreplicas:1restart_policy:condition:on-failuredelay:5snetworks:learn-docker-network:driver:overlay配置介绍Stack文件就是Docker组合文件唯一的要求是版本:一个项目需要是3.0或更高版本。Docker基于Stack文件部署应用时,首先检查并创建networks:关键字对应network。如果网络不存在,Docker将创建它。让我们仔细看看这些模块。overlaynetwork这里定义了一个网络。默认情况下,网络使用覆盖驱动程序,并创建相应覆盖类型的新网络。networks:learn-docker-network:driver:overlay部署节点replicas数量接下来我们详细了解一下deploy关键字的新内容deploy:mode:replicatedreplicas:2restart_policy:condition:on-failuredelay:5sreplicas:2设置期望服务的副本数为2,默认为1,如果服务正在运行,需要调整副本数。您可以在堆栈文件中调整副本的值,然后重新部署堆栈。重新部署堆栈不会影响未更改的服务。restart_policy:定义Swarm对容器异常退出的重启策略。当前服务的重启策略是:如果一个副本以非零返回值退出,则立即重启当前副本。最多尝试重启3次,每次最多等待120s检查是否成功。每次重启间隔5s。节点约束因为我们的数据库节点只能部署在数据节点上,因为需要挂载本地数据文件和数据库文件,所以都需要使用标签进行节点约束mysql:image:mysql:5.7.33networks:-learn-docker-网络卷:-“/tmp/etc/mysql:/etc/mysql/mysql.conf.d/”-“/tmp/data/mysql:/var/lib/mysql”环境:MYSQL_ROOT_PASSWORD:'root'deploy:mode:Replicatedreplicas:1placement:constraints:-'node.labels.role==data'restart_policy:condition:on-failuredelay:5s'node.labels.role==data这里的意思是约束当前mysql节点以标签名称为角色,值为数据的数据节点。更多操作请参考下方部署服务部署应用。使用dockerstackdeploy命令部署dockerstackdeploy-cdocker-compose.ymllearn-docker-test这里我们指定docker-compose文件,并将stack命名为learn-docker-test。查看部署状态,可以通过dockerstackls命令查看集群部署状态,该命令会列出Swarm集群中所有的Stack,包括每个Stack有多少服务。查看nacos节点信息访问nacos服务,发现我们的服务已经注册测试Access服务访问服务接口测试curlhttp://192.168.64.153:8888/employeapi/find/10001|python-mjson.tool集群管理更新服务dockerserviceupadte可升级swarm服务参数详解--forceforceupdaterestart服务,无论配置或镜像改变都更新--image\
