【问题标题】:Is there ability to stop and start the specific service via docker swarm or kubernetes?是否有能力通过 docker swarm 或 kubernetes 停止和启动特定服务?
【发布时间】:2019-08-09 01:25:48
【问题描述】:

我是 Docker 的新手,所以我需要你的建议。

我尝试在 docker 容器下移动我当前基于 Jboss AS 的 java 应用程序系统。我有不同的主机,有 1、2 或 3 个 jboss。我已经将此系统配置为在群模式下作为堆栈运行,其中每个 jboss 都是单独的服务。我使用具有全局模式的主机网络。我也使用 docker-compose 文件来描述所有系统。

我需要 - 停止特定服务的能力。我可以使用“docker service rm”命令停止服务,但它会完全从堆栈中删除该服务。如果我停止了一些服务,然后我只想从这些服务中启动一个,我找不到任何命令来执行此操作。 有没有使用 docker swarm 的解决方案?或者我需要看一下 Kubernetes?

在一般情况下,我希望通过单点来配置和控制我的系统。

下面是我的 docker-compose 文件示例。

version: '3.5'

x-common-deploy-config:
    &common-deploy-config
    mode: global
    restart_policy:
       condition: on-failure 


x-default-jboss:
    &default-jboss
    image: some-image

    networks:
        hostnet: {}

    command: ["./scripts/run.sh"]


x-jboss-c1:
    &jboss-c1
    << : *default-jboss

    volumes:
        - "/data/jboss-docker-test/logs/c1:/data/jboss/server/log"

    environment:
        - JBOSS_PORT_OFFSET=ports-01
        - JBOSS_SERVER_NUMBER=1

x-jboss-c2:
    &jboss-c2
    << : *default-jboss

    volumes:
        - "/data/jboss-docker-test/logs/c2:/data/jboss/server/log"

    environment:
        - JBOSS_PORT_OFFSET=ports-02
        - JBOSS_SERVER_NUMBER=2


services:

    jboss-28-c1:
        << : *jboss-c1
        env_file: host_1.28.env

        deploy:
            << : *common-deploy-config
            placement:
                constraints:
                    - node.labels.hostaddress == 192.168.1.28


    jboss-28-c2:
        << : *jboss-c2
        env_file: host_1.28.env

        deploy:
            << : *common-deploy-config
            placement:
                constraints:
                    - node.labels.hostaddress == 192.168.1.28

        command: ["./scripts/run.sh", "1"]


networks:
  hostnet:
    external: true
    name: host

【问题讨论】:

  • 删除服务有什么问题?我不是 Swarm 专家,但我可以肯定地说 Kubernetes 并不真正支持将“停止但留在原地”作为常见操作。
  • 删除服务适合我,但我无法通过我的 docker-compose 文件启动特定的已删除服务,只能启动所有已删除的服务。有时我需要手动控制某些服务的生命周期。

标签: java docker jboss kubernetes docker-swarm


【解决方案1】:

您可以使用 docker service scale 并将副本设置为 0。 docker service scale documentation

上面提到了解决办法。

【讨论】:

  • 是的,但不幸的是它不适用于全局模式,仅适用于复制模式。来自文档:“规模只能用于复制模式”
  • 这对于全局模式是正确的,它不会工作。在这种情况下,使用 docker pause container_id 的容器 id 可能是这样。
  • 我曾想过,我可以像使用 docker-compose 一样,从单个(管理器)机器以集群模式控制我的所有服务。我还看到我可以使用 docker service create 命令创建新服务(而不是删除),但我应该将所有参数指定为命令参数,没有机会从 docker-compose 文件中指定特定服务。
猜你喜欢
  • 2020-12-31
  • 1970-01-01
  • 1970-01-01
  • 2010-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-06
相关资源
最近更新 更多