【问题标题】:Docker - using labels to influence the start-up sequenceDocker - 使用标签来影响启动顺序
【发布时间】:2020-04-19 09:17:06
【问题描述】:

我的 Django 应用程序使用 Celery 定期处理任务。遗憾的是,这导致有 3 个 continer(App、Celery Worker、Celery Beat),每个都有自己的启动 shell 脚本,而不是 docker 入口点脚本。 所以我的想法是有一个单一的入口点脚本,它能够处理我在 docker-compose.yml 中输入的标签。根据标签,容器应该以 App、Celery Beat 或 Celery Worker 实例启动。 我以前从未做过这样的实现,但我问自己这是否可能,因为我在 trafik loadblancer 项目中看到了类似的东西,例如:

  loadbalancer:
    image: traefik:1.7
    command: --docker
    ports:
      - 80:80
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock 
    networks:
      - frontend
      - backend
    labels:
      - "traefik.frontend.passHostHeader=false"
      - "traefik.docker.network=frontend"
      ...

我没有找到任何好的材料,根据网络上的内容或关于如何实现这样的场景,或者甚至我认为的方式是否可能。 smb 之前是这样做的,还是我应该更好地使用 3 个单独的 shell 脚本,每个服务一个?

【问题讨论】:

  • 诚实的问题,您为什么不简单地通过扩展 Celery Worker 和 Celery Beat 容器来创建自己的容器,并使用您自己的自定义 shell 脚本作为启动脚本?这将确保您拥有可重现的配置。

标签: docker dockerfile celery traefik docker-entrypoint


【解决方案1】:
  1. 您可以从容器内访问标签,但它似乎不像其他选项那样直接,我不推荐这样做。见this StackOverflow question

  2. 如果您的用例(== 入口点)与同类不同,使用三个入口点或三个命令可能更容易。

  3. 如果您的用例更相似,那么简单地使用环境变量会更容易、更清晰。

  4. 1234563 /li>

标签旨在供 docker 引擎和其他在主机或 docker-orchestrator 级别而不是在容器级别工作的应用程序使用。

【讨论】:

  • 感谢您提供的信息,非常感谢。给我一个关于如何进一步实施我的好观点。
【解决方案2】:

我不确定 traefik 项目是如何使用该实现的。如果他们使用它,那应该是完全可以的。

但是,我建议使用环境变量而不是 docker 标签。环境变量是在云原生应用程序中处理配置参数的推荐方式。标签的使用与服务元数据更相关,因此您可以识别和过滤特定服务。在你的场景中,你可以有这样的东西:

version: "3"

services:
  celery-worker:
    image: generic-dev-image:latest
    environment:
      - SERVICE_TYPE=celery-worker
  celery-beat:
    image: generic-dev-image:latest
    environment:
      - SERVICE_TYPE=celery-beat
  app:
    image: generic-dev-image:latest
    environment:
      - SERVICE_TYPE=app

然后你可以在你的 docker 入口点中使用SERVICE_TYPE 环境变量来启动特定的服务。

然而(再次),拥有 3 个不同的 docker 镜像并没有错。事实上,这就是容器(和微服务)的想法。您将流程封装在图像中并在容器中实例化它们。它们中的每一个都有不同的目的和生命周期。出于开发目的,您的实现没有任何问题。但在生产中,我建议将服务分离在不同的图像中。否则,您将拥有大图像,仅使用每个服务中三分之一的功能,并且硬耦合服务的生命周期。

【讨论】:

  • 所以根据我的理解,我应该设计我的 start.sh 或 entry-piint 脚本,以便检查环境。变种。嗯,这也是有道理的。感谢您的意图:D
猜你喜欢
  • 2022-06-25
  • 2021-08-19
  • 2018-05-05
  • 2019-12-13
  • 2014-10-03
  • 1970-01-01
  • 1970-01-01
  • 2019-12-30
  • 1970-01-01
相关资源
最近更新 更多