2017-07-01 44 views
1

下载后运行代码并旋转预构建的Docker镜像的最佳实践是什么?例如,我使用Bitnamis RabbitMQ映像,它可以运行一个运行RabbitMQ的容器(显然):https://hub.docker.com/r/bitnami/rabbitmq启动预构建的Docker镜像后运行命令的最佳实践

容器启动并且RabbitMQ正在运行后,我想下载并启用一个额外的RabbitMQ-Plugin。有两个问题,我遇到的一个码头工人,新手:

  1. 的RabbitMQ需要一些时间进行初始化,也许20-30秒
  2. 插件需要启用后表示初始化完成

现在,我旋转起来的容器,等待30秒,并在终端上手动执行命令时等

搬运工EXEC - 它的wget -O /plugins/folder/newplugin.ez https://pluginlocation.com/newplugin.ez & &的RabbitMQ-插件使newplugin`

这工作,但有一个推荐的方式做到这一切一气呵成?我试图用我自己的Dockerfile对过程的顶部:

FROM bitnami/RabbitMQ的:最新

运行的wget -O /plugins/folder/newplugin.ez https://pluginlocation.com/newplugin.ez

RUN RabbitMQ的,插件启用newplugin

但是在这一点上,RabbitMQ还没有初始化,所以使插件失败。

最佳 -act

+0

@OliverCharlesworth这是错误的,你可以有许多'RUN'指令,因为你有层。你可能把它和'CMD'混合起来。 –

+0

@ErikDannenberg - 是的,我在混合:/ –

回答

1

您可以启用,而不必与--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做相关的事情(例如下载和启用插件)在一个层。

+0

谢谢@zigarn,离线选项正是我需要添加的! – actraiser