启动预构建 docker 映像后 运行 命令的最佳实践

Best Practice to run commands after starting up a prebuilt docker image

下载并启动预构建的 Docker 图像后,运行 代码的最佳做法是什么?例如,我使用 Bitnamis RabbitMQ 图像来启动容器 运行ning RabbitMQ(显然):https://hub.docker.com/r/bitnami/rabbitmq

在容器启动并且 RabbitMQ 正在 运行ning 之后,我想下载并启用一个额外的 RabbitMQ 插件。作为一个 Docker-新手,我遇到了两个问题:

  1. RabbitMQ 需要一些时间来初始化,可能需要 20-30 秒
  2. 初始化完成后需要启用插件

现在,我启动容器,等待 30 秒,然后在终端上手动执行命令,例如

docker exec -it wget -O /plugins/folder/newplugin.ez https://pluginlocation.com/newplugin.ez && rabbitmq-plugins enable newplugin`

这行得通,但是有推荐的方法可以一次完成所有这些吗?我尝试在流程之上使用我自己的 Docker 文件:

FROM bitnami/rabbitmq:latest

RUN wget -O /plugins/folder/newplugin.ez https://pluginlocation.com/newplugin.ez

RUN rabbitmq-plugins enable newplugin

但此时,RabbitMQ 尚未初始化,因此启用插件失败。

最佳 -行动

您可以在没有 运行 代理的情况下使用 --offline 选项启用插件。
所以你的 Dockerfile 可能是:

FROM bitnami/rabbitmq:latest

RUN curl -o /opt/bitnami/rabbitmq/plugins/newplugin.ez \
            https://pluginlocation.com/newplugin.ez \
 && rabbitmq-plugins enable --offline newplugin

顺便说一句,good practice 在一层中执行相关操作(例如下载和启用插件)。