2017-07-01 47 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