アプリケーションの公式ドッカーベースイメージにカスタムプラグインを含めて有効にしたいと思います。Dockerfileのループ/反復
ここに、ディレクトリ構造の外観を示します。私は、プラグインplugin_1、plugin_3、plugin_7とplugin_8を含める必要がある場合
.
+-- Dockerfile
+-- plugins
| +-- plugin_1
| +-- plugin_2
| +-- plugin_3
| +-- ...
| +-- plugin_n
Dockerfileは、次のようになります。
FROM myapp_officialimage
COPY plugins/plugin_1/* /usr/lib/myapp/plugins/
RUN myapp-plugins.sh enable plugin_1
COPY plugins/plugin_3/* /usr/lib/myapp/plugins/
RUN myapp-plugins.sh enable plugin_3
COPY plugins/plugin_7/* /usr/lib/myapp/plugins/
RUN myapp-plugins.sh enable plugin_7
COPY plugins/plugin_8/* /usr/lib/myapp/plugins/
RUN myapp-plugins.sh enable plugin_8
CMD ["myapp-start.sh"]
質問あり、それは上記の定型を解消するために、リストの上に/ループを反復することは可能でしょうか?
たとえば、以下のようなDockerファイルは、よりクリーンでメンテナンス性に優れています。あなたのケースでは
FROM myapp_officialimage
ENV CUSTOM_PLUGIN_LIST="plugin_1 plugin_3 plugin_7 plugin_8"
for plugin in $CUSTOM_PLUGIN_LIST; \
do \
COPY plugins/$plugin/* /usr/lib/myapp/plugins/ \
RUN myapp-plugins.sh enable $plugin \
done
CMD ["myapp-start.sh"]
これは、すべてのプラグインの画像に2つのレイヤーを作成します。シェルスクリプトでこれを行うことはできませんか?それは1つの 'RUN'になります。 – Grimmy
これらのプラグインは何らかの形でパッケージとしてダウンロードできますか?次に、要件リストを作成し、パッケージをイメージにダウンロードします。 – Grimmy
'docker build'はビルドサーバーで行われ、ビルドされたイメージは本番環境で実行されます。本番環境のホストには 'plugins'ディレクトリはなく、本番ネットワークにはプラグインファイルをダウンロードするためのアクセス権がありません。コンパイルとビルド時にこれらのプラグインを手作業でバンドルし、その結果のイメージをプロダクションに送る必要があります。 –