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

相关推荐
就叫飞六吧2 小时前
K8s 端口暴露:集群统一暴露 vs 单 Pod 暴露
云原生·容器·kubernetes
执笔为剑2 小时前
docker环境升级数据库
数据库·docker·容器
于眠牧北3 小时前
ubuntu22.04安装docker以及安装过程中报错解决方法
运维·docker·容器
FriendshipT3 小时前
算法部署知识点:TensorRT、Tensorflow、Flask、Docker、TFLite
算法·docker·flask·tensorflow
摇滚侠5 小时前
虚拟机部署龙虾 OpenClaw,VMware 安装 Linux CentOS 虚拟机操作系统,部署 Docker,部署 OpenClaw
linux·docker·centos
SuniaWang5 小时前
Vue 项目 Docker 多阶段构建部署指南(阿里云)
vue.js·阿里云·docker
returnthem5 小时前
Docker学习笔记
云原生·eureka
AI成长日志6 小时前
【agent专栏】Agent服务化与性能优化——Docker容器化、并发处理、成本控制
docker·容器·性能优化
indexsunny6 小时前
互联网大厂Java面试实战:微服务与Spring Boot在电商场景下的应用解析
java·spring boot·redis·docker·微服务·kubernetes·oauth2
minstbe6 小时前
IC 设计私有化 AI 助手实战:基于 Docker + OpenCode + Ollama 的数字前端综合增强方案(实战篇)
人工智能·python·docker·ai