Docker Swarm 服务部署条件约束

简介: Docker Swarm 服务部署条件约束

Docker Swarm 服务部署条件约束可以匹配 node 标签和 engine 标签, engine.labels 适用于 Docker Engine 标签,如操作系统,驱动程序等, node.labels 适用于人为添加到节点的标签,详情参考笔记:Docker Swarm 节点标签


示例:

  • Service 方式
$ docker service create \
  --name nginx_2 \
  --constraint 'node.labels.role == gateway' \
  nginx点击复制复制失败已复制


  • Stack 方式
version: '3.6'
services:
    mycat:
         image: nginx
         ports:
           - target: 8080
             published: 8080
             protocol: tcp
             mode: ingress
         deploy:
           mode: global
           placement:
              constraints:                      # 添加条件约束
                - node.labels.role==gateway
           restart_policy:
             condition: on-failure
             max_attempts: 3点击复制复制失败已复制


条件约束汇总如下:

类别 属性 示例
node.id ID node.id==sxkwoaik9bbj2oihxqrxxjxtc
node.hostname Description. Hostname node.hostname!=node1
node.role Spec. Role node.role==manager
node.labels 自定义标签,Spec. Lables中键值对 node.labels.role==gateway
engine.labels Docker 引擎自带标签 engine.labels.operatingsystem==ubuntu 20.04


附:节点信息示例

{
    "ID": "sxkwoaik9bbj2oihxqrxxjxtc",
    "Version": {
        "Index": 34
    },
    "CreatedAt": "2020-12-25T11:58:21.941243809Z",
    "UpdatedAt": "2020-12-25T13:12:03.62858601Z",
    "Spec": {
        "Labels": {
            "role": "gateway"
        },
        "Role": "manager",
        "Availability": "active"
    },
    "Description": {
        "Hostname": "node1",
        "Platform": {
            "Architecture": "x86_64",
            "OS": "linux"
        },
        "Resources": {
            "NanoCPUs": 2000000000,
            "MemoryBytes": 4127367168
        },
        "Engine": {
            "EngineVersion": "19.03.8",
            "Plugins": [
                {
                    "Type": "Log",
                    "Name": "awslogs"
                },
                {
                    "Type": "Log",
                    "Name": "fluentd"
                },
                {
                    "Type": "Log",
                    "Name": "gcplogs"
                },
                {
                    "Type": "Log",
                    "Name": "gelf"
                },
                {
                    "Type": "Log",
                    "Name": "journald"
                },
                {
                    "Type": "Log",
                    "Name": "json-file"
                },
                {
                    "Type": "Log",
                    "Name": "local"
                },
                {
                    "Type": "Log",
                    "Name": "logentries"
                },
                {
                    "Type": "Log",
                    "Name": "splunk"
                },
                {
                    "Type": "Log",
                    "Name": "syslog"
                },
                {
                    "Type": "Network",
                    "Name": "bridge"
                },
                {
                    "Type": "Network",
                    "Name": "host"
                },
                {
                    "Type": "Network",
                    "Name": "ipvlan"
                },
                {
                    "Type": "Network",
                    "Name": "macvlan"
                },
                {
                    "Type": "Network",
                    "Name": "null"
                },
                {
                    "Type": "Network",
                    "Name": "overlay"
                },
                {
                    "Type": "Volume",
                    "Name": "local"
                }
            ]
        },
        "TLSInfo": {
            "TrustRoot": "******",
            "CertIssuerSubject": "******",
            "CertIssuerPublicKey": "********"
        }
    },
    "Status": {
        "State": "ready",
        "Addr": "10.87.23.111"
    },
    "ManagerStatus": {
        "Leader": true,
        "Reachability": "reachable",
        "Addr": "10.87.23.1"
    }
}
Iric
+关注
目录
打赏
0
0
0
0
12
分享
相关文章
Docker部署RocketMQ5.2.0集群
本文详细介绍了如何使用Docker和Docker Compose部署RocketMQ 5.2.0集群。通过创建配置文件、启动集群和验证容器状态,您可以快速搭建起一个RocketMQ集群环境。希望本文能够帮助您更好地理解和应用RocketMQ,提高消息中间件的部署和管理效率。
250 91
Docker 部署 Redis
在使用 Docker 部署 Redis 时,为实现数据持久化,需正确挂载容器内的数据目录到宿主机。推荐命令如下: ``` docker run -d --name redis -v /mnt/data/redis:/data -p 6379:6379 redis ``` 该命令将宿主机的 `/mnt/data/redis` 目录挂载到容器的 `/data` 目录,确保 Redis 数据持久化。此路径更通用,适合大多数场景。避免使用不匹配的挂载路径,如 `/var/lib/redis` 或 `/mnt/data/redis` 到非默认目录,以防止数据无法正确持久化。
美团面试:MySQL为什么 不用 Docker部署?
45岁老架构师尼恩在读者交流群中分享了关于“MySQL为什么不推荐使用Docker部署”的深入分析。通过系统化的梳理,尼恩帮助读者理解为何大型MySQL数据库通常不使用Docker部署,主要涉及性能、管理复杂度和稳定性等方面的考量。文章详细解释了有状态容器的特点、Docker的资源隔离问题以及磁盘IO性能损耗,并提供了小型MySQL使用Docker的最佳实践。此外,尼恩还介绍了Share Nothing架构的优势及其应用场景,强调了配置管理和数据持久化的挑战。最后,尼恩建议读者参考《尼恩Java面试宝典PDF》以提升技术能力,更好地应对面试中的难题。
|
2天前
|
在Docker上部署Ollama+AnythingLLM完成本地LLM Agent部署
通过以上步骤,您可以成功在Docker上部署Ollama和AnythingLLM,实现本地LLM Agent的功能。在部署过程中,确保环境和配置正确,以避免不必要的问题。希望本文能够帮助您顺利完成部署,并在本地环境中高效地使用LLM模型。
91 8
Stirling-PDF:51.4K Star!用Docker部署私有PDF工作站,支持50多种PDF操作,从此告别在线工具
Stirling-PDF 是一款基于 Docker 的本地化 PDF 编辑工具,支持 50 多种 PDF 操作,包括合并、拆分、转换、压缩等,同时提供多语言支持和企业级功能,满足个人和企业用户的多样化需求。
94 6
Stirling-PDF:51.4K Star!用Docker部署私有PDF工作站,支持50多种PDF操作,从此告别在线工具
如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
通过这些步骤,可以确保您的Next.js应用在多核服务器上高效运行,并且在Docker环境中实现高效的容器化管理。
193 44
docker快速部署OS web中间件 数据库 编程应用
通过Docker,可以轻松地部署操作系统、Web中间件、数据库和编程应用。本文详细介绍了使用Docker部署这些组件的基本步骤和命令,展示了如何通过Docker Compose编排多容器应用。希望本文能帮助开发者更高效地使用Docker进行应用部署和管理。
56 19
Linux服务器部署docker windows
在当今软件开发中,Docker成为流行的虚拟化技术,支持在Linux服务器上运行Windows容器。流程包括:1) 安装Docker;2) 配置支持Windows容器;3) 获取Windows镜像;4) 运行Windows容器;5) 验证容器状态。通过这些步骤,你可以在Linux环境中顺利部署和管理Windows应用,提高开发和运维效率。
74 1
使用 docker 快速搭建开发环境的 mongodb 服务
本指南介绍如何使用 Docker 和 Docker Compose 部署 MongoDB 和 Mongo Express。首先,通过 Docker 命令分别启动 MongoDB(镜像 `mongo:7.0.14`)和 Mongo Express(镜像 `mongo-express:1.0.2-20-alpine3.19`),并配置环境变量确保两者能正确连接。接着,提供了一个 `docker-compose.yaml` 文件示例,包含 MongoDB 数据卷、健康检查及服务依赖配置,简化多容器管理。
147 1
Docker——阿里云服务器使用Docker部署python项目全程小记
本文记录了我在阿里云服务器上使用Docker部署python项目(flask为例)的全过程,在这里记录和分享一下,希望可以给大家提供一些参考。