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"}

相关推荐
butiehua02021 小时前
Docker 命令大全:从入门到精通
docker·云原生·eureka
猿小猴子4 小时前
在 Ubuntu24.04 LTS 上 Docker Compose 部署基于 Dify 重构二开的开源项目 Dify-Plus
docker·重构·开源
rocksun5 小时前
使用Docker Scout和Python自动化容器安全审计
python·ci/cd·docker
逐光猴5 小时前
docker 配置harbor 非https访问(http server give HTTP response to HTTPS client)
linux·docker·容器
写代码的小王吧6 小时前
【网络安全】 防火墙技术
java·python·安全·web安全·网络安全·docker
树下一少年7 小时前
通过ansible+docker-compose快速安装一主两从redis+三sentinel
redis·docker·ansible·sentinel·docker-compose
可乐加.糖8 小时前
腾讯云K8s容器部署SpringBoot项目实现方案
java·spring boot·容器·kubernetes·k8s·腾讯云
橘右溪8 小时前
Windows 系统下安装 Docker
docker
运维博客团9 小时前
搭建K8S-1.23
云原生·容器·kubernetes
陈苏同学9 小时前
Docker 从入门到进阶 (Win 环境) + Docker 常用命令
linux·运维·docker·容器