

如果你还没玩过Docker Stack管理服务,你已经out了,(送Portainer集群管理教程)
source link: https://blog.51cto.com/boxuegu/5658975
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

如果你还没玩过Docker Stack管理服务,你已经out了,(送Portainer集群管理教程)
精选 原创
我们上面使用
swarm
部署服务,单个服务还好,如果很多个服务怎么来解决呢,这里就用到了Docker Stack
管理服务。
在上面我们学会了如何配置一个swarm集群,并且知道如何在swarm集群上部署应用,现在,我们开始了解Docker层级关系中的最高一个层级——stack。一个stack就是一组有关联的服务的组合,可以编排在一起,一起管理。
单机模式下,我们可以使用 Docker-Compose来编排多个服务,而 Docker Swarm 只能实现对单个服务的简单部署。于是就引出了本文的主角 Docker Stack ,通过 Docker Stack 我们只需对已有的 docker-compose.yml 配置文件稍加改造就可以完成 Docker 集群环境下的多服务编排。
集群搭建案例
应用部署情况
服务名称 | 数量 |
---|---|
mysql | 1 |
nacos | 1 |
learn-docker-gateway | 1 |
learn-docker-web | 2 |
learn-docker-storage | 2 |
创建docker-compose.yml
首先创建一个 docker-compose.yml 文件,使用 Docker Compose v3 语法
我们把我们原来单机版的
docker-compose.yml
改造以下
version: '3.9'
services:
mysql:
image: mysql:5.7.33
networks:
- learn-docker-network
volumes:
- "/tmp/etc/mysql:/etc/mysql/mysql.conf.d/"
- "/tmp/data/mysql:/var/lib/mysql"
environment:
MYSQL_ROOT_PASSWORD: 'root'
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- 'node.labels.role == data'
restart_policy:
condition: on-failure
delay: 5s
nacos:
image: nacos/nacos-server
ports:
- "8848:8848"
networks:
- learn-docker-network
environment:
MODE: 'standalone'
JVM_XMS: '128m'
JVM_XMX: '128m'
deploy:
mode: replicated
replicas: 1
restart_policy:
condition: on-failure
delay: 5s
learn-docker-web:
image: manager-hongbaoyu-java.itheima.net:8443/library/learn-docker-web:1.0-SNAPSHOT
networks:
- learn-docker-network
depends_on:
- nacos
- mysql
deploy:
mode: replicated
replicas: 2
restart_policy:
condition: on-failure
delay: 5s
learn-docker-storage:
image: manager-hongbaoyu-java.itheima.net:8443/library/learn-docker-storage:1.0-SNAPSHOT
networks:
- learn-docker-network
depends_on:
- nacos
- mysql
deploy:
mode: replicated
replicas: 2
restart_policy:
condition: on-failure
delay: 5s
learn-docker-gateway:
image: manager-hongbaoyu-java.itheima.net:8443/library/learn-docker-gateway:1.0-SNAPSHOT
ports:
- "8888:8888"
networks:
- learn-docker-network
depends_on:
- nacos
- mysql
deploy:
mode: replicated
replicas: 1
restart_policy:
condition: on-failure
delay: 5s
visualizer:
image: dockersamples/visualizer
ports:
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
mode: replicated
replicas: 1
restart_policy:
condition: on-failure
delay: 5s
networks:
learn-docker-network:
driver: overlay
Stack文件就是Docker Compose文件。唯一的要求就是version:一项需要是3.0或者更高的值。在Docker根据某个Stack文件部署应用的时候,首先会检查并创建networks:关键字对应网络。如果网络不存在,Docker会进行创建。下面我们详细看下这几个模块。
overlay网络
这里定义了1个网络,默认情况下网络都是使用overlay驱动,新建对应的覆盖类型的网络。
networks:
learn-docker-network:
driver: overlay
部署节点副本数
接下来我们进一步了解deploy关键字新增的内容
deploy:
mode: replicated
replicas: 2
restart_policy:
condition: on-failure
delay: 5s
- replicas: 2 设置了期望服务的副本数量为2,默认为1.如果服务正在运行,需要调整副本数。可以调整stack文件中的 replicas 的数值,然后重新部署stack。重新部署stack并不会影响那些没有改动的服务。
- restart_policy: 定义了Swarm针对容器异常退出的重启策略。当前服务的重启策略是:如果某个副本以非0返回值退出,会立即重启当前副本。重启最多尝试3次,每次都是等待之多120s来检测是否成功。每次重启的间隔是5s。
因为我们的数据库节点只能部署在数据节点,因为需要挂载本地的数据文件以及数据库文件,所有需要使用标签进行节点约束
mysql:
image: mysql:5.7.33
networks:
- learn-docker-network
volumes:
- "/tmp/etc/mysql:/etc/mysql/mysql.conf.d/"
- "/tmp/data/mysql:/var/lib/mysql"
environment:
MYSQL_ROOT_PASSWORD: 'root'
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- 'node.labels.role == data'
restart_policy:
condition: on-failure
delay: 5s
这里的
'node.labels.role == data
含义就是将当前mysql节点约束在标签名字是role,并且值是data的数据节点,更多操作请参考下文
使用docker stack deploy 命令部署
docker stack deploy -c docker-compose.yml learn-docker-test
这里我们指定了docker-compose文件,并把stack命名为 learn-docker-test。
查看部署情况
可以通过
docker stack ls
命令查看集群部署情况,会列出 Swarm 集群中的全部 Stack,包括每个 Stack 拥有多少服务
服务部署情况
查看nacos节点信息
访问nacos服务,发现我们的服务都已经注册

测试访问服务
访问服务接口测试
curl http://192.168.64.153:8888/employeapi/find/10001| python -m json.tool

docker service upadte
可以对swarm服务进行升级
-
–force 强制更新重启服务,无论是否配置或镜像改变都更新
-
–image <image:tag> 制定更新的镜像
-
–with-registry-auth 向 Swarm 代理发送 Registry 认证详细信息,私有仓库需要携带该参数
#查看服务详情
docker service ls
# 更新服务
docker service update --image manager-hongbaoyu-java.itheima.net:8443/library/learn-docker-storage:1.0-SNAPSHOT learn-docker-test_learn-docker-storage

查看部署集群
docker stack ls
可以查看部署的服务列表
docker stack rm stack名称
命令会删除整个stack集群,注意移除操作执行前并不会进行二次确认。
docker stack rm learn-docker-test

相关命令(手册)
docker stack 常用命令
命令 | 说明 |
---|---|
docker stack deploy | 部署新的堆栈或更新现有堆栈 |
docker stack ls | 列出现有堆栈 |
docker stack ps | 列出堆栈中的任务 |
docker stack rm | 删除堆栈 |
docker stack services | 列出堆栈中的服务 |
docker stack down | 移除某个堆栈(不会删除数据) |
docker service 常用命令
命令 | 说明 |
---|---|
docker service create | 部署服务 |
docker service inspect | 查看服务详情 |
docker service logs | 产看某个服务日志 |
docker service ls | 查看所有服务详情 |
docker service rm | 删除某个服务(-f 强制删除) |
docker service scale | 设置某个服务个数 |
docker service update | 更新某个服务 |
docker node 常用命令
命令 | 说明 |
---|---|
docker node ls | 查看所有集群节点 |
docker node rm | 删除某个节点(-f 强制删除) |
docker node inspect | 查看节点详情 |
docker node demote | 节点降级,由管理节点降级为工作节点 |
docker node promote | 节点升级,由工作节点升级为管理节点 |
docker node update | 更新节点 |
docker node ps | 查看节点中的 Task 任务 |
docker swarm 常用命令
命令 | 说明 |
---|---|
docker swarm init | 初始化集群 |
docker swarm join-token worker | 查看工作节点的 token |
docker swarm join-token manager | 查看管理节点的 token |
docker swarm join | 加入集群中 |
portainer集群管理(扩展)
Portainer介绍
Portainer是一个可视化的容器镜像的图形管理工具,利用Portainer可以轻松构建,管理和维护Docker环境。 而且完全免费,基于容器化的安装方式,方便高效部署。
Portainer 的目的是部署和使用一样简单。它由一个可以在任何 Docker 引擎上运行的单一容器组成(可以部署为Linux容器或Windows本地容器,也支持其他平台)。Portainer允许你管理所有的Docker资源(容器、镜像、卷、网络等等)。它与独立的Docker引擎和Docker Swarm模式兼容。
swarm集群安装Portainer
使用swarm集群安装Portainer,用Portainer来管理swarm集群
# 下载部署配置文件
curl -L https://downloads.portainer.io/portainer-agent-stack.yml -o portainer-agent-stack.yml
# 部署节点
docker stack deploy -c portainer-agent-stack.yml portainer
注意:此方法将自动部署Portainer服务器的单个实例,并将Portainer代理作为全局服务部署到集群中的每个节点上。

portainer使用
默认访问接口是9000端口,可以通过浏览器进行访问,首次登陆需要注册用户,给admin用户设置密码

查看管理服务
点击home节点,当前这个节点就是我们的swarm集群

点进去就可以看到我们能操作的菜单了

查看swarm节点
点击swarm菜单就可以看到swarm节点了

管理微服务
服务部署情况
我们要将我们的服务交给portainer管理
服务名称 | 数量 |
---|---|
mysql | 1 |
nacos | 1 |
learn-docker-gateway | 1 |
learn-docker-web | 2 |
learn-docker-storage | 2 |
管理节点标签
我们MySQL需要部署在数据节点,我们添加节点标签

在swarm管理节点,点击节点信息进入下面详情页面进行配置标签

添加网络信息
因为我们的节点需要一个共有的
overlay
网络,我们需要配置下,在network节点点击添加

在添加页面选择
overlay
网络类型,名字叫做learn-docker-network

然后点击创建就可以
创建仓库配置
因为我们的微服务需要从我们自己的harbor镜像仓库拉取,需要将我们的仓库配置

在仓库节点填写我们的镜像地址就可以
https://manager-hongbaoyu-java.itheima.net:8443

创建stack任务
在stack界面点击stack菜单进行添加stck任务

在stack管理界面将我们的
docker-compose.yml
复制进我们的stack界面

点击创建节点信息就可以,等待部署就可以

稍等下节点就部署完成了

点击进去就可以单到节点详情了

查看节点部署情况
进入swarm管理界面

点击
Go to cluster visualizer
查看服务部署情况

本文由育博学谷狂野架构师发布
如果本文对您有帮助,欢迎关注和点赞;如果您有任何建议也可留言评论或私信,您的支持是我坚持创作的动力
转载请注明出处!
- 赞
- 收藏
- 评论
- 分享
- 举报
Recommend
-
98
介绍docker图形化管理提供了很多工具,有Portainer、DockerUI、Shipyard等等,本文主要介绍Portainer。 Portainer是一个开源、轻量级Docker管理用户界面,基于DockerAPI,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下...
-
37
1 前言 从没想到 Docker 也有可视化的工具,因为它的命令还是非常清晰简单的。无聊搜了一下,原来已经有很多 Docker 可视化工具了。如 DockerUI 、 Shipyard 、 R...
-
10
docker图形化管理工具之Portainer 177 次查看 What is Portainer? Portainer是一款轻量级的图形化管理工具,通过它我们可以轻松管理不同的docker环境。Portai...
-
5
最近在使用rancher2.5.5部署Redis主从复制的时候,发现rancher会产生很多iptables的规则,这些规则导致我们在部署了rancher的机器上无法使用Redis的主从复制功能,因为我对rancher和k8s的了解也仅限于了解网络架构和使用,对底层并不深入,短期内无法解决这个网...
-
11
Reset docker portainer container password. 2021-03-21 好记性不如烂笔头~好久没碰机器上的 docker,上次整理了下 Chrome 的密码,把一些密码转移到了 1Password,还有些删除了,以为没啥用,然后今...
-
8
吊炸天的 Docker 图形化工具 Portainer,必须推荐给你 (查看原文) 之前操作Docker的时候,一直使用的是命令行的形式。命令行虽说...
-
13
Portainer 使用 TLS 加密连接远端节点上的 Docker 2021-06-26 其实这东西本身不是一件麻烦事,但是 MacOS 硬是给搞成了麻烦事。Docker 环境分布:Mac 上一个 Docker,树莓派上一个 Docker。需求...
-
11
Install Best Docker UI ManagerHave you been looking for an open source Docker UI management tool?. Here I’ll introduce you to Portainer, which a Simple management UI for Docker containers, images, services e.t.c.Portainer is a lightwei...
-
19
什么是Portainer Portainer是Docker的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管...
-
4
还没玩过《原神》,真的好玩吗?30 个回答小马来到了小河边,可是河上没有桥,想要自己淌过去却又不知道河水有多深?犹豫中的小马一...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK