docker stack常用命令

1、Docker Stac k介绍

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

  • 服务集合:Docker Stack允许你在一个配置文件中定义应用的多个服务。这个配置文件通常是一个 docker-compose.yml 文件,定义了应用的服务、网络和卷。
  • 简化部署:通过使用 docker stack deploy 命令,你可以一次性部署整个应用的所有服务。
  • 配置管理:Docker Stack 允许你使用单个配置文件来管理多个服务的配置,这使得部署和更新变得更加一致和方便。
  • 服务编排:它提供了高级的服务编排功能,如服务间的网络配置和卷挂载。
  • 适用于生产环境:Docker Stack 被设计用于在生产环境中的 Docker Swarm 集群,提供了额外的可靠性和扩展性。
  • 集群范围内的资源分配:Docker Stack 可以在集群的所有节点上分配和管理服务。

官方参考:docker stack | Docker Docs

2、Docker Stac k常用命令

2.1 Docker堆栈配置

  • 描述:合并和插值后输出最终配置文件
  • 用法:docker stack config [OPTIONS]

|----------------------|------------|-------------------------------|
| 选项 | 默认 | 描述 |
| -c, --compose-file | | 指定compose文件的路径,或者-从stdin读取的路径 |
| --skip-interpolation | | 跳过插值并仅输出合并的配置 |

--输出两个Compose文件的合并和插值的结果

docker stack config -c docker-compose.yml -c docker-compose.prod.yml

--Compose文件也可以作为标准输入提供--compose-file -

cat docker-compose.yml | docker stack config --compose-file -

---跳过插值kip-interpolation

在某些情况下,跳过环境变量的插值可能会很有用。例如,当你想将此命令的输出通过管道传回时stack deploy。如果您的网络服务器的环境变量中有一个重定向路由的正则表达式,那么您将使用两个符号来防止stack deploy插入{1}。

service: webserver

environment:

REDIRECT_REGEX=http://host/redirect/$${1}

使用插值时,stack config命令将用替换Compose文件中的环境变量REDIRECT_REGEX=http://host/redirect/${1},但当将其通过管道传回stack deploy命令时,它将再次被插值并导致未定义的行为。这就是为什么在将输出通过管道传回时,stack deploy应该始终选择--skip-interpolation选项。

docker stack config --compose-file web.yml --compose-file web.prod.yml --skip-interpolation | docker stack deploy --compose-file -

2.2 D ocker堆栈部署

  • 描述:部署新堆栈或更新现有堆栈,集群管理命令,必须在Swarm管理器节点上执行。
  • 用法:docker stack deploy [OPTIONS] STACK
  • 别名:docker stack up
  • 该deploy命令支持Compose文件版本3.0及以上。

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------|----------------------------------------------------|
| 选项 | 默认 | 描述 |
| [-c, --compose-file](#选项 默认 描述 -c, --compose-file API 1.25+ Compose 文件的路径,或-从 stdin 读取 -d, --detach true 立即退出,而不是等待堆栈服务收敛 --prune API 1.27+ 修剪不再引用的服务 -q, --quiet 抑制进度输出 --resolve-image always API 1.30+ 查询注册表以解析图像摘要和支持的平台(always,changed,never) --with-registry-auth 将注册表身份验证详细信息发送到 Swarm 代理) | | API 1.25+ Compose 文件的路径,或-从 stdin 读取 |
| -d, --detach | true | 立即退出,而不是等待堆栈服务收敛 |
| --prune | | API 1.27+ 修剪不再引用的服务 |
| -q, --quiet | | 抑制进度输出 |
| --resolve-image | always | API 1.30+ 查询注册表以解析图像摘要和支持的平台(always,changed,never) |
| --with-registry-auth | | 将注册表身份验证详细信息发送到 Swarm 代理 |

撰写文件(--compose-file)使deploy命令进行堆栈vossibility部署。

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

Ignoring unsupported options: links

Creating network vossibility_vossibility

Creating network vossibility_default

Creating service vossibility_nsqd

Creating service vossibility_logstash

Creating service vossibility_elasticsearch

Creating service vossibility_kibana

Creating service vossibility_ghollector

Creating service vossibility_lookupd

Compose文件也可以作为标准输入提供--compose-file -:

cat docker-compose.yml | docker stack deploy --compose-file - vossibility

Ignoring unsupported options: links

Creating network vossibility_vossibility

Creating network vossibility_default

Creating service vossibility_nsqd

Creating service vossibility_logstash

Creating service vossibility_elasticsearch

Creating service vossibility_kibana

Creating service vossibility_ghollector

Creating service vossibility_lookupd

如果您的配置分为多个Compose文件,例如基本配置和特定于环境的覆盖,则可以提供多个--compose-file标志。

docker stack deploy --compose-file docker-compose.yml -c docker-compose.prod.yml vossibility

Ignoring unsupported options: links

Creating network vossibility_vossibility

Creating network vossibility_default

Creating service vossibility_nsqd

Creating service vossibility_logstash

Creating service vossibility_elasticsearch

Creating service vossibility_kibana

Creating service vossibility_ghollector

Creating service vossibility_lookupd

您可以验证服务是否已正确创建

docker service ls

2.3 D ocker stack ls列出堆栈

  • 描述:列出堆栈
  • 用法:docker stack ls [OPTIONS]
  • 别名:docker stack list
  • 这是一个集群管理命令,必须在Swarm管理器节点上执行。

|----------|----|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 选项 | 默认 | 描述 |
| --format | | 使用自定义模板格式化输出: 'table':以带有列标题的表格格式打印输出(默认) 'table TEMPLATE':使用给定的 Go 模板以表格格式打印输出 'json':以 JSON 格式打印 'TEMPLATE':使用给定的 Go 模板打印输出。有关使用模板格式化输出的更多信息,请参阅https://docs.docker.com/go/formatting/ |

  • 显示所有堆栈信息

docker stack ls

ID SERVICES ORCHESTRATOR

myapp 2 Kubernetes

vossibility-stack 6 Swarm

  • 格式化输出(--format)

格式化选项(--format)使用Go模板漂亮地打印堆栈。

Go模板的有效占位符如下所列:

|---------------|------------|
| 占位符 | 描述 |
| .Name | 堆栈名称 |
| .Services | 服务数量 |
| .Orchestrator | 协调器名称 |
| .Namespace | 命名空间 |

当使用该--format选项时,stack ls命令要么完全按照模板声明的方式输出数据,要么当使用该table指令时,同时包含列标题。

以下示例使用没有标题的模板并输出 所有堆栈的用冒号 ( ) 分隔的Name和条目:Services:

docker stack ls --format "{{.Name}}: {{.Services}}"

web-server: 1

web-cache: 4

要以 JSON 格式列出所有堆栈,请使用以下json指令:

docker stack ls --format json

{"Name":"myapp","Namespace":"","Orchestrator":"Swarm","Services":"3"}

2.4列出堆栈中的任务(容器)

  • 描述:列出作为指定堆栈的一部分运行的任务。
  • 用法:docker stack ps [OPTIONS] STACK
  • 这是一个集群管理命令,必须在Swarm管理器节点上执行。

|--------------|----|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 选项 | 默认 | 描述 |
| -f, --filter | | 根据提供的条件过滤输出 |
| -format | | 使用自定义模板格式化输出: 'table':以带有列标题的表格格式打印输出(默认) 'table TEMPLATE':使用给定的 Go 模板以表格格式打印输出 'json':以 JSON 格式打印 'TEMPLATE':使用给定的 Go 模板打印输出。有关使用模板格式化输出的更多信息,请参阅 https://docs.docker.com/go/formatting/ |
| --no-resolve | | 不要将 ID 映射到名称 |
| --no-resolve | | 不要将 ID 映射到名称 |
| -q, --quiet | | 仅显示任务ID |
| | | |

命令显示堆栈中的所有任务voting

docker stack ps voting

过滤(--filter)

过滤标志(-f或--filter)格式为一key=value对。如果有多个过滤器,则传递多个标志(例如--filter "foo=bar" --filter "bif=baz")。多个过滤标志组合为一个OR过滤器。例如, -f name=redis.1 -f name=redis.7返回redis.1和redis.7任务。

目前支持的过滤器有:

  • ID
  • 姓名
  • 节点
  • 期望状态过滤id器与任务ID的全部或前缀匹配

docker stack ps -f "id=t" voting

过滤器name与任务名称匹配

docker stack ps -f "name=voting_redis" voting

  1. 过滤node器与节点名称或节点 ID 匹配。

docker stack ps -f "node=node1" voting

  • 过滤器可以采用desired-state值running、shutdown或ready。accepted
  • 格式化输出(--format)

格式化选项(--format)使用 Go 模板漂亮地打印任务输出。

Go 模板的有效占位符如下所列:

|---------------|----|------------------------------------|
| 占位符 | 描述 | 占位符 |
| .ID | | 任务编号 |
| .Name | | 任务名称 |
| .Image | | 任务形象 |
| .Node | | 节点 ID |
| .DesiredState | | 任务的期望状态(running、shutdown或accepted) |
| .CurrentState | | 任务的当前状态 |
| .Error | | 错误 |
| .Ports | | 任务发布端口 |

当使用该--format选项时,stack ps命令将完全按照模板声明的方式输出数据,或者当使用该table指令时,还包括列标题。

使用没有标题的模板并输出 所有任务的用冒号 ( ) 分隔的Name和条目:Image:

docker stack ps --format "{{.Name}}: {{.Image}}" voting

以JSON格式列出所有任务,请使用以下json指令

docker stack ps --format json myapp

{"CurrentState":"Preparing 23 seconds ago","DesiredState":"Running","Error":"","ID":"2ufjubh79tn0","Image":"localstack/localstack:latest","Name":"myapp_localstack.1","Node":"docker-desktop","Ports":""}

不将ID映射到名称(--no-resolve)

该--no-resolve选项显示任务名称的 ID,但不将 ID 映射到名称。

docker stack ps --no-resolve voting

不截断输出(--no-trunc)

部署服务时,docker会解析服务镜像的摘要,并将服务固定到该摘要。默认情况下不显示摘要,但如果--no-trunc使用,则会打印。该--no-trunc选项还显示未截断的任务 ID 和错误消息,如下所示:

docker stack ps --no-trunc voting

仅显示任务 ID (-q, --quiet)

-q或选项--quiet仅显示堆栈中的任务 ID。此示例输出voting堆栈的所有任务 ID:

docker stack ps -q voting

此选项可用于执行批处理操作。例如,您可以使用任务 ID 作为其他命令的输入,例如docker inspect。以下示例检查voting堆栈的所有任务:

docker inspect $(docker stack ps -q voting)

{ "ID": "xim5bcqtgk1b1gk0krq1", "Version": { \<...\> ****2.5删除一个或多个堆栈**** * 描述:删除一个或多个堆栈 * 用法:docker stack rm \[OPTIONS\] STACK \[STACK...

  • 别:docker stack remove和docker stack down
  • 这是一个集群管理命令,必须在 Swarm 管理器节点上执行。

|--------------|------|----------|
| 选项 | 默认 | 描述 |
| -d, --detach | true | 不要等待堆栈移除 |

移除堆栈

这将删除名为myapp的堆栈,与堆栈相关的服务、网络和机密将被删除。

docker stack rm myapp

Removing service myapp_redis

Removing service myapp_web

Removing service myapp_lb

Removing network myapp_default

Removing network myapp_frontend

移除多个堆栈

这将删除所有指定myapp和vossibility的堆栈。与所有指定堆栈关联的服务、网络和机密都将被删除。

docker stack rm myapp vossibility

Removing service myapp_redis

Removing service myapp_web

Removing service myapp_lb

Removing network myapp_default

Removing network myapp_frontend

Removing service vossibility_ghollector

Removing service vossibility_lookupd

Removing network vossibility_default

Removing network vossibility_vossibility

2.6列出堆栈中的服务

  • 描述:列出作为指定堆栈的一部分运行的服务。
  • 用法:docker stack services [OPTIONS] STACK
  • 这是一个集群管理命令,必须在 Swarm 管理器节点上执行。

|--------------|----|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 选项 | 默认 | 描述 |
| -f, --filter | | 根据提供的条件过滤输出 |
| --format | | 使用自定义模板格式化输出: 'table':以带有列标题的表格格式打印输出(默认) 'table TEMPLATE':使用给定的 Go 模板以表格格式打印输出 'json':以 JSON 格式打印 'TEMPLATE':使用给定的 Go 模板打印输出。有关使用模板格式化输出的更多信息,请参阅 https://docs.docker.com/go/formatting/ |
| -q, --quiet | | 仅显示 ID |

显示myapp堆栈中的所有服务:

docker stack services myapp

过滤(--filter)

过滤标志(-f或--filter)格式为key=value一对,如果有多个过滤器,则传递多个标志(例如--filter "foo=bar" --filter "bif=baz"),多个过滤标志组合为一个OR过滤器。

以下命令显示web和db服务:

docker stack services --filter name=myapp_web --filter name=myapp_db myapp

目前支持的过滤器有:

  • id / ID(--filter id=7be5ei6sqeye,或--filter ID=7be5ei6sqeye)
  • 标签 (--filter label=key=value)
  • 模式(--filter mode=replicated, 或--filter mode=global)

Swarm:不支持

  • 姓名 (--filter name=myapp_web)
  • 节点 ( --filter node=mynode)

Swarm:不支持

  • 服务 (--filter service=web)

Swarm:不支持

  1. 格式化输出(--format)

格式化选项(--format)使用 Go 模板漂亮地打印服务输出。

Go 模板的有效占位符如下所列:

|-----------|-------------|
| 占位符 | 描述 |
| .ID | 服务 ID |
| .Name | 服务名称 |
| .Mode | 服务模式(复制、全局) |
| .Replicas | 服务副本 |
| .Image | 服务形象 |

当使用该--format选项时,stack services命令将完全按照模板声明的方式输出数据,或者当使用该 table指令时,还包括列标题。

使用没有标题的模板,并输出所有服务的ID、Mode和Replicas以冒号 ( :) 分隔的条目:

docker stack services --format "{{.ID}}: {{.Mode}} {{.Replicas}}"

0zmvwuiu3vue: replicated 10/10

fm6uf97exkul: global 5/5

要以 JSON 格式列出所有服务,请使用以下json指令:

docker stack services ls --format json

{"ID":"0axqbl293vwm","Image":"localstack/localstack:latest","Mode":"replicated","Name":"myapp_localstack","Ports":"*:4566-\u003e4566/tcp, *:8080-\u003e8080/tcp","Replicas":"0/1"}

{"ID":"384xvtzigz3p","Image":"redis:6.0.9-alpine3.12","Mode":"replicated","Name":"myapp_redis","Ports":"*:6379-\u003e6379/tcp","Replicas":"1/1"}

{"ID":"hyujct8cnjkk","Image":"postgres:13.2-alpine","Mode":"replicated","Name":"myapp_repos-db","Ports":"*:5432-\u003e5432/tcp","Replicas":"0/1"}

相关推荐
qq_3643717219 小时前
基于 Docker 容器化环境配置
运维·docker·容器
GentleDevin20 小时前
Docker 运维常用命令大全
docker·容器·运维命令
运维全栈笔记20 小时前
基于Docker的MinIO单机部署与功能测试指南
运维·docker·容器
心机之蛙qee21 小时前
docker的安装(RHEL9)
运维·docker·容器
炸炸鱼.21 小时前
Docker 高级管理 —— 容器通信技术与数据持久化
docker
乐hh21 小时前
DM8配置SSL
数据库·docker·ssl
Cat_Rocky1 天前
kubernetes ingress粗浅学习
学习·容器·kubernetes
极客先躯1 天前
高级java每日一道面试题-2025年12月05日-实战篇[Dockerj]-Docker 安装后的默认存储路径是什么?如何修改?
java·docker·默认存储路径在不同系统上的区别·linux overlay2·修改存储路径的理论方法·修改流程中的关键理论点
凤舞飘伶1 天前
windows安装docker-desk
windows·docker·容器
运维全栈笔记1 天前
Docker一键部署Immich:自建私有云相册,照片视频备份无忧
linux·服务器·网络·docker·容器