Docker Swarm模式下Docker Stack部署应用

【docker】Docker Stack 详细使用及注意事项 Docker Stack 是 Docker Swarm 环境中用于管理一组相关服务的工具。它使得在 Swarm 集群中部署、管理和扩展一组相互关联的服务变得简单。主要用于定义和编排容器化应用的多个服务。Docker Stack 是 Docker Swarm 中的一个高级特性,用于在集群环境中管理复杂的多服务应用。它基于 Docker Compose 文件格式,但扩展了这种格式的功能,以适应集群和大规模部署的需求。 阅读详情

在讲解使用 Docker Stack 部署应用之前,有几个前置处理需要完成。

  • Swarm 模式:应用将采用 Docker Stack 部署,而 Stack 依赖 Swarm 模式。
  • 标签:某个 Swarm worker 节点需要自定义标签。
  • 密钥:应用所需的密钥需要在部署前创建完成。

搭建应用实验环境

接下来的讲解中会完成基于 Linux 的三节点 Swarm 集群搭建,同时能满足上面应用的全部前置依赖。完成之后,实验环境如下图所示。
 

实例环境


接下来内容分为 3 个步骤。

  • 创建新的 Swarm。
  • 添加节点标签。
  • 创建密钥。


首先创建新的三节点 Swarm 集群。

1) 初始化 Swarm

在任意 Swarm 管理节点的机器上,运行下面的命令。

$ docker swarm init
Swarm initialized: current node (lhma...w4nn) is now a manager.
<Snip>

2) 添加工作节点

复制前面输出中出现的 docker swarm join 命令。将复制内容粘贴到工作节点上并运行。

//Worker 1 (wrk-1)
wrk-1$ docker swarm join --token SWMTKN-1-2hl6...-...3lqg 172.31.40.192:2377
This node joined a swarm as a worker.

//Worker 2 (wrk-2)
wrk-2$ docker swarm join --token SWMTKN-1-2hl6...-...3lqg 172.31.40.192:2377
This node joined a swarm as a worker.

3) 确认当前 Swarm 由一个管理节点和两个工作节点构成

在管理节点中运行下面的命令。

$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
lhm...4nn * mgr-1 Ready Active Leader
b74...gz3 wrk-1 Ready Active
o9x...um8 wrk-2 Ready Active

Swarm 集群目前就绪。payment_gateway 服务配置了部署约束,限制该服务只能运行在有 pcidss=yes 标签的工作节点之上。本步骤中将在 wrk-1 上添加该节点标签。

在实际操作中,添加该标签之前必须将某个 Docker 节点按 PCI 规范进行标准化。但是,这只是一个实验环境,所以就暂且跳过这一过程,直接将标签添加到 wrk-1 节点。

在 Swarm 管理节点运行下面的命令。

1) 添加节点标签到 wrk-1

$ docker node update --label-add pcidss=yes wrk-1

Node 标签只在 Swarm 集群之内生效。

2) 确认节点标签

$ docker node inspect wrk-1
[
    {
    "ID": "b74rzajmrimfv7hood6l4lgz3",
    "Version": {
        "Index": 27
    },
    "CreatedAt": "2018-01-25T10:35:18.146831621Z",
    "UpdatedAt": "2018-01-25T10:47:57.189021202Z",
    "Spec": {
        "Labels": {
            "pcidss": "yes"

        },
<Snip>

wrk-1 工作节点现在已经配置完成,所以该节点可以运行 payment_gateway 服务副本了。

应用定义了 4 个密钥,这些都需要在应用部署前创建。

postgress_password。
staging_token。
revprox_cert。
revprox_key。

在管理节点运行下面的命令,来创建这些密钥。

1) 创建新的键值对

密钥中有 3 个是需要加密 key 的。在本步骤中会创建加密 key,下一步会将加密 key 放到 Docker 密钥文件当中。

$ openssl req -newkey rsa:4096 -nodes -sha256 \
-keyout domain.key -x509 -days 365 -out domain.crt

2) 创建 revprox_cert、revprox_key 以及 postgress_password 密钥

$ docker secret create revprox_cert domain.crt
cqblzfpyv5cxb5wbvtrbpvrrj

$ docker secret create revprox_key domain.key
jqd1ramk2x7g0s2e9ynhdyl4p

$ docker secret create postgres_password domain.key
njpdklhjcg8noy64aileyod6l

3) 创建 stage_token 密钥

$ echo staging | docker secret create staging_token -
sqy21qep9w17h04k3600o6qsj

4) 列出所有密钥

$ docker secret ls
ID NAME CREATED UPDATED
njp...d6l postgres_password 47 seconds ago 47 seconds ago
cqb...rrj revprox_cert About a minute ago About a minute ago
jqd...l4p revprox_key About a minute ago About a minute ago
sqy...qsj staging_token 23 seconds ago 23 seconds ago

上面已经完成了全部的前置准备。是时候开始部署应用了!

部署示例应用

如果还没有代码,请先复制应用的 GitHub 仓库到 Swarm 管理节点。

$ git clone https://github.com/dockersamples/atsea-sample-shop-app.git
Cloning into 'atsea-sample-shop-app'...
remote: Counting objects: 636, done.
Receiving objects: 100% (636/636), 7.23 MiB | 3.30 MiB/s, done. remote:
Total 636 (delta 0), reused 0 (delta 0), pack-reused 636 Resolving
deltas: 100% (197/197), done.
Checking connectivity... done.

$ cd atsea-sample-shop-app

现在已经拥有了源码,可以开始部署应用了。

Stack 通过 docker stack deploy 命令完成部署。基础格式下,该命令允许传入两个参数。

  • Stack 文件的名称。
  • Stack 的名称。


应用的 GitHub 仓库中包含一个名为 docker-stack.yml 的 Stack 文件。这里会使用该文件。这里为 Stack 起名 seastack。

在 Swarm 管理节点的 atsea-sample-shop-app 目录下运行下面的命令。

$ docker stack deploy -c docker-stack.yml seastack
Creating network seastack_default
Creating network seastack_back-tier
Creating network seastack_front-tier
Creating network seastack_payment
Creating service seastack_database
Creating service seastack_appserver
Creating service seastack_visualizer
Creating service seastack_payment_gateway
Creating service seastack_reverse_proxy

可以运行 docker network ls 以及 docker service ls 命令来查看应用的网络和服务情况。

下面是命令输出中几个需要注意的地方。

网络是先于服务创建的。这是因为服务依赖于网络,所以网络需要在服务启动前创建。

Docker 将 Stack 名称附加到由他创建的任何资源名称前作为前缀。在本例中,Stack 名为 seastack,所以所有资源名称的格式都如:seastack_<resource>。例如,payment 网络的名称是 seastack_payment。而在部署之前创建的资源则没有被重命名,比如密钥。

另一个需要注意的点是出现了新的名为 seastack_default 的网络。该网络并未在Stack文件中定义,那为什么会创建呢?每个服务都需要连接到网络,但是 visualizer 服务并没有指定具体的网络。因此,Docker 创建了名为 seastack_default 的网络,并将 visualizer 连接到该网络。

可以通过两个命令来确认当前 Stack 的状态。docker stack ls 列出了系统中全部 Stack,包括每个 Stack 下面包含多少服务。docker stack ps <stack-name> 针对某个指定 Stack 展示了更详细的信息,例如期望状态以及当前状态。下面一起来了解下这两条命令。

$ docker stack ls
NAME SERVICES
Seastack 5

$ docker stack ps seastack
NAME NODE DESIRED STATE CURRENT STATE
seastack_reverse_proxy.1 wrk-2 Running Running 7 minutes ago
seastack_payment_gateway.1 wrk-1 Running Running 7 minutes ago
seastack_visualizer.1 mgr-1 Running Running 7 minutes ago
seastack_appserver.1 wrk-2 Running Running 7 minutes ago
seastack_database.1 wrk-2 Running Running 7 minutes ago
seastack_appserver.2 wrk-1 Running Running 7 minutes ago

在服务启动失败时,docker stack ps 命令是首选的问题定位方式。该命令展示了 Stack 中每个服务的概况,包括服务副本所在节点、当前状态、期望状态以及异常信息。从下面的输出信息中能看出 reverse_proxy 服务在 wrk-2 节点上两次尝试启动副本失败。

$ docker stack ps seastack
NAME NODE DESIRED CURRENT ERROR
STATE STATE
reverse_proxy.1 wrk-2 Shutdown Failed "task: non-zero exit (1)"
\_reverse_proxy.1 wrk-2 Shutdown Failed "task: non-zero exit (1)"

如果想查看具体某个服务的详细信息,可以使用 docker service logs 命令。读者需要将服务名称 /ID 或者副本 ID 作为参数传入。如果传入服务名称或 ID,可以看到所有服务副本的日志信息。如果传入的是副本 ID,则只会看到对应副本的日志信息。

下面的 docker service logs 命令展示了 seastack_reverse_proxy 服务的全部副本日志,其中包含了前面输出中的两次副本启动失败的日志。

#1host not found#1host not found

输出内容为了适应页面展示,已经经过裁剪,但是还是可以看到全部 3 个服务副本的日志(两个启动失败,1 个正在运行)。每行的开始都是副本的名称,包括服务名称、副本序号、副本 ID 以及副本所在主机的名称。接下来是具体的日志输出。

提示:大家可能已经注意到前面日志中全部副本的序号都是 1。这是因为 Docker 每次只创建一个副本,并且只有当前面的副本启动失败时才会创建新的。

因为输出内容经过裁剪,所以具体原因很难明确,但看起来前两次副本启动失败原因是其依赖的某个服务仍然在启动中(一种启动时服务间依赖导致的竞争条件)。

可以继续跟踪日志(--follow),查看日志尾部内容(--tail),或者获取额外的详细信息(--details)。

Docker Stack(堆栈) 部署多服务集群,多服务编排 Docker Stack(堆栈) 是在 Swarm 上管理服务堆栈的工具。而在以前文章介绍的 Docker Swarm 只能实现对单个服务的简单部署,于是就引出了Docker Stack。上面我们介绍到那Docker Stack(堆栈) 是将docker-compose和docker swarm结合起来,在多台服务器集群,部署多个服务。Docker Stack 使用与 Docker Compose 相同的 YAML 文件格式来定义服务堆栈。 阅读详情

相关推荐

docker stack常用命令

Docker Stack管理swarm堆栈与Swarm协调器配合使用,是Docker Swarm环境中用于管理一组相关服务的工具。它使得在Swarm集群中部署、管理和扩展一组相互关联的服务变得简单。主要用于定义和编排容器化应用的多个服务。

beck_li的博客 1544

容器技术—docker stack

在之前的几篇文章中,我们介绍了Docker Compose,它是用来进行一个完整的应用程序相互依赖的多个容器的编排的,但是缺点是不能在分布式多机器上使用;我们也介绍了Docker swarm,它构建了docker集群,并且可以通过docker service在不同集群节点上运行容器服务,但是缺点是不能同时编排多个服务。但是在实际的生产开发中,我们一个完整的应用需要的服务往往不止一个,通过docker service 命令来部署的话会很麻烦,所以这里要讲一下 Docker Stack,它用于向swarm集群部

weixin_37648525的博客 9950

LDA模型参数优化实战:从auto设置到passes调优

本文深入探讨了LDA主题模型的参数优化实战,重点解析了如何通过设置alpha='auto'与eta='auto'让模型自适应语料,并详细阐述了passes参数对训练效果的核心影响。文章提供了系统的调优方法与评估策略,旨在帮助用户从“能用”到“用好”LDA,产出清晰、可解释的主题分析结果。

weixin_29163797的博客 118

Docker Stack部署应用详解+Tomcat项目部署详细实战

Docker Stack部署应用详解,Tomcat+Mysql项目详解部署过程

m0_58833554的博客 1345

手把手教你用LIO-SAM搞定激光雷达和IMU联合标定(附避坑指南)

本文详细介绍了使用LIO-SAM进行激光雷达与IMU联合标定的全流程,包括标定原理、工具选型、硬件配置、数据采集、LI_calib标定步骤及LIO-SAM集成验证。特别提供了避坑指南和参数优化技巧,帮助开发者高效完成传感器标定,提升自动驾驶和机器人定位精度。

hadoop5ranger的博客 995

STM32 ST-LINK Utility固件烧录全流程详解与实战技巧

本文详细解析了使用STM32 ST-LINK Utility进行固件烧录的全流程与实战技巧。从硬件连接、软件安装、核心三步操作(连接、擦除、烧录)到进阶的选项字节配置与批量脚本烧录,提供了完整的避坑指南和问题排查方案,帮助开发者高效完成STM32程序下载。

lambda的博客 768

swarm部署mysql_Docker Swarm模式下Docker Stack部署应用

在讲解使用 Docker Stack 部署应用之前,有几个前置处理需要完成。Swarm 模式:应用将采用 Docker Stack 部署,而 Stack 依赖 Swarm 模式。标签:某个 Swarm worker 节点需要自定义标签。密钥:应用所需的密钥需要在部署前创建完成。搭建应用实验环境接下来的讲解中会完成基于 Linux 的三节点 Swarm 集群搭建,同时能满足上面应用的全部前置依赖。完...

weixin_31891047的博客 598

深度学习环境搭建:CUDA、Anaconda、PyTorch 完整安装与验证教程

步骤操作验证命令1安装 CUDA 工具包nvcc -V2安装 Anaconda3创建 yolo 环境4安装 PyTorch5验证 GPU。

qq_37606844的博客 320

30、Docker Stack

Stack 能够在单个声明文件中定义复杂的多服务应用。Stack 还提供了简单的方式来部署应用并管理其完整的生命周期:初始化部署 -> 健康检查 -> 扩容 -> 更新 -> 回滚,以及其他功能!在 Compose 文件中定义应用,然后通过 docker stack deploy 命令完成部署和管理。Stack 是基于 Docker Swarm 之上来完成应用的部署。安全等高级特性,其实都是来自 Swarm。Docker 适用于开发和测试。Docker Stack 则适用于大规模场景和生产环境。

乄辰__qq__2791629529 的博客 1569

WorkBench3.2 + VxWorks6.8安装教程

按照FTP连接主机和目标机,将整个VxWorks6.8的安装分为两个部分,一是在主机(win10系统,可以使用虚拟机或者实体机,推荐使用虚拟机)上安装workbench3.2,进行bootrom与VxWroks映像文件的生成,二是在虚拟机上安装VxWorks系统 19.10.10 首先很高兴文章能帮到大家,但由于本人已不做该方向良久,私信和评论的很多问题现在已经无法解答,如果大家有什么问题欢迎...

Alive的博客 3万+

使用 R 的长短期记忆 (LSTM)

在 R 中实现 LSTM 网络涉及使用 TensorFlow 和 Keras 软件包,它们为构建和训练深度学习模型提供了一个用户友好的界面。这些步骤包括准备数据、定义 LSTM 架构、编译模型、在数据上训练模型、评估其性能以及进行预测。与传统的 RNN 不同,LSTM 网络由于其独特的架构,可以在长序列上维护信息。与传统的 RNN 不同,LSTM 网络由于其独特的架构,可以在长序列上维护信息。为了在 R 中实现 LSTM 网络,我们将使用 Keras 库,该库为构建和训练神经网络提供了高级接口。

jianqimingtian的博客 1582

将Docker Compose Services部署到集群

Docker 1.13引入了新版本的Docker Compose。 该版本的主要功能是,它允许将使用Docker Compose文件定义的服务直接部署到启用了Swarm模式的Docker引擎。 这样可以简化多容器应用程序在多主机上的部署。 该博客将使用一个简单的Docker Compose文件显示如何在Docker 1.13中创建和部署服务。 这是用于启动Couchbase数据库节...

danpob13624的博客 436

GEE:基于MODIS数据计算NDVI时间序列,并使用Savatsky-Golay(SG)滤波器对其进行平滑处理

优快云@_养乐多_本文将介绍如何在 Google Earth Engine (GEE) 平台中,使用 MODIS 数据计算 NDVI 时间序列,并对该数据集应用 Savitzky-Golay 滤波器,得到了一个新的平滑后的数据集。Savitzky-Golay 滤波器可以有效地去除信号中的噪声,并平滑信号的变化。该方法可以扩展到基于 MODIS 数据计算的任何指数或者波段。

养乐多的博客 1425

Docker Swarm集群(手动搭建、拉伸、缩减、集群监控、global模式、滚动更新服务)

1.基本概念 Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目 但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具 而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合 从 Docker 1.12.0 版本开始,Docker S...

Rapig1的博客 622

python实现纵横向拉开档次法 (附完整源码)

python实现纵横向拉开档次法 (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 778

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

docker部署分布式应用_Docker服务,堆栈和分布式应用程序捆绑

docker部署分布式应用 两周前宣布了Docker 1.12的第一个发布候选版本 。 此版本计划了几个新功能。 该博客将展示如何从Docker Compose创建分布式应用程序捆绑包,并在Docker Swarm模式下将其部署为Docker Stack。 非常感谢@friism帮助我理解这些概念。 让我们先来看一下这些功能: 内置编排 :使用Docker Compose文件定义...

danpob13624的博客 389

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

从零开始学习docker(二十一)service管理

本节我们介绍如何以方便的方式管理service。 我们之前提到docker-compose,适用于本地开发,可以在本机部署,提供了很大的便利。而swarm是一个cluster,可不可以通过docker-compose来实现定义的application?答案是可以,但是不推荐。仅仅使用docker命令行就可以。我们依然可以使用docker-compose.yml文件去定义一个应用,但是我们一般不用...

vincent_duan的专栏 247

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

docker-swarm

部署集群 在群集模式下运行Docker引擎时,可以使用docker stack deploy将全部应用程序堆栈部署到群集。该deploy命令以Compose文件的形式接受堆栈描述。该docker stack deploy命令支持任何版本为“3.0”或更高版本的Compose文件。如果您的版本较旧,请参阅升级指南。1.13.0或更高版本的Docker引擎,以群集模式运行。如果您不熟悉sw...

weixin_30794851的博客 233

docker学习笔记(七)docker-swarm

目录 搭建Swarm环境 swarm基本操作 swarm实战 docker swarm服务发布模式 docker stack 官网:https://docs.docker.com/swarm/overview/ Docker Swarm is native clustering for Docker. It turns a pool of Docker hosts into a s...

qq_35448165的博客 915

第7章-Docker进阶之Docker Swarm

Docker进阶之Docker Swarm docker 安装准备 准备: 服务器集群 安装docker: xshell右键选择发送键输入到所有会话内容,能够在集群上同时安装docker docker swarm --help查看帮助信息 systemctl start docker启动docker systemctl stop docker停止docker docker swarm 集群搭建 初始化节点(Leader) #服务器1 docker swarm init --advertise-add

BetrayVirginia的博客 346

docker集群:docker-swarm

只需要对docker-compose.yml进行简单的修改即可。要求:docker-compose.yml最低版本为3,也就是version: 3。创建服务docker service create,单独拿出来,很重要但又不经常用(类似docker run)docker stack deploy命令下docker-compose.yml配置说明。在集群模式下,我们使用。docker swarm其他命令。docker node命令。ps:单机模式下,我们使用。

weixin_40225692的博客 544

docker swarm

每一个manager都有一个完整的当前集群状态的副本,可以保证manager的高可用。在Swarm初始化完成后,默认会创建一个网桥docker_gwbridge,和一个veth设备,而在docker中对应的会出现两个网络,一个名为ingress的overlay网络,一个为docker_gwbridge桥接网络。那么一个service可能会包含多个容器副本,而这些容器副本多数情况下是运行在不同的主机中,为了实现service到具体容器副本的转发,在网络模式上与之前的单机的容器网络也将有。

xwnxwn的专栏 979

docker 部署java_使用Docker堆栈部署的微服务-WildFly,Java EE和Couchbase

docker 部署java 关于微服务的资料很多,只是用谷歌搜索就可以了 ! 几年前,我在比利时的Devoxx上发表了有关将单片重构为微服务的演讲,它获得了很好的评价: 该博客将展示Docker如何简化微服务的创建和关闭。 该博客中使用的所有代码都在github.com/arun-gupta/couchbase-javaee上 。 使用撰写的微服务定义 Docker 1.13引入...

最佳 Java 编程 367

Docker服务,堆栈和分布式应用程序捆绑

两周前宣布了Docker 1.12的第一个发布候选版本 。 此版本计划了几个新功能。 该博客将展示如何从Docker Compose创建分布式应用程序捆绑包,并将其作为Docker堆栈以Docker Swarm模式部署。 非常感谢@friism帮助我理解这些概念。 让我们先来看一下这些功能: 内置编排 :典型的应用程序是使用Docker Compose文件定义的。 该定义由多个...

danpob13624的博客 271

Docker主机集群化方案 Docker Swarm

Docker Swarm 是 Docker 官方提供的轻量级集群管理工具,可将多台 Docker 主机抽象为统一资源池进行管理。本文详细介绍了 Docker Swarm 的核心概念(节点、服务、任务)、集群部署(3主2从架构)、服务管理(创建/扩展/更新/回退)、网络模式(Ingress/Host/Overlay)以及数据持久化方案(本地存储/NFS网络存储)。通过实际案例演示了服务发现、负载均衡、滚动更新等关键功能,并对比了 Docker Stack 与 Docker Compose 的差异。文章还提供了

共产主义接班人 745

Docker swarm 集群

Swarm 默认内置有加密的分布式集群存储(encrypted distributed cluster store)、加密网络(Encrypted Network)、公用TLS(Mutual TLS)、安全集群接入令牌 Secure Cluster Join Token)以及一套简化数字证书管理的 PKI(Public Key Infrastructure)。工作节点接收来自管理节点的任务并执行。swarm:集群的管理和编排、docker可以出实话一个swarm集群,其它节点可以加入。

xwnxwn的专栏 647
上一篇: Docker Stack配置文件详解
下一篇: Docker Stack管理应用
咖猫
博客等级 码龄18年 641粉丝 160原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值