Docker-您可以在没有服务的情况下在集群中的节点上创建容器吗?

问题描述

我有一个用例,似乎一半和一半像docker swarm一样适合,而有些则不适合。

我正在尝试设置这种情况;

enter image description here

我只有两个盒子可供使用。我希望traefik将请求的负载平衡到任何一个服务。我只希望服务与数据库的热实例进行通信。在一个节点死亡的情况下,treafik的另一个实例应无缝接管。在热数据库死亡的情况下,我想立即切换到从数据库以使其成为热数据库。所有这些都是docker容器。

这适合群居吗?起初,我以为我可以将两个具有所有全局服务的管理器节点组成一个集群,但是数据库配置将是唯一的。如果我添加了第三个节点或N个节点,则我不希望traefik自动扩展到第三个节点。另外,数据库将永远无法扩展,我只希望这两个数据库都具有唯一的配置。真的,我只需要由群提供的覆盖网络并按比例缩放1服务。

所以问题是,我是否可以让盒子作为集群中的一个节点参与,但是在集群外部以唯一的配置托管单个容器,而一切都共享相同的覆盖网络?

解决方法

Docker swarm不会限制您。您可以定义服务实例的数量,它们的位置和网络设置。示例场景:

version: '3.8'

services:
  traefik:
    hostname: 'traefik'
    image: traefik
    deploy:
      mode: replicated
      replicas: 2
      placement:
        max_replicas_per_node: 1
    networks:
      backend:
        aliases:
         - traefik      
  service1:
    hostname: 'service1'
    image: service1
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints: [node.hostname == host01]
    networks:
      backend:
        aliases:
         - service1 
  service2:
    hostname: 'service2'
    image: service2
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints: [node.hostname == host02]          
    networks:
      backend:
        aliases:
         - service2
  db_master:
    hostname: 'db_master'
    image: image_db
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints: [node.hostname == host01]    
    networks:
      backend:
        aliases:
         - db_master
  db_slave:
    hostname: 'db_slave'
    image: image_db
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints: [node.hostname == host02]          
    networks:
      backend:
        aliases:
         - db_slave
         
networks:
  backend:
    name: backend
    driver: overlay     
    attachable: true

使用参数attachable: true,您可以将容器附加到覆盖网络

docker run -itd --network=backend busybox

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...