Ich möchte einige benutzerdefinierte Plug-Ins in ein offizielles Docker-Basisbild einer Anwendung einbeziehen und aktivieren.Loop/Iterate in Dockerfile
So sieht Verzeichnisstruktur aus;
.
+-- Dockerfile
+-- plugins
| +-- plugin_1
| +-- plugin_2
| +-- plugin_3
| +-- ...
| +-- plugin_n
Dockerfile wie folgt aussehen, wenn ich Plug-in plugin_1, plugin_3, plugin_7 und plugin_8 umfassen müssen;
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"]
Frage ist ist es möglich, iterieren/Schleife über eine Liste, um über vorformulierten zu beseitigen?
Zum Beispiel wäre Dockerfile wie unten sauberer und wartungsfreundlicher;
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"]
Das wird zwei Ebenen für das Bild für jedes Plugin erstellen. Kannst du das nicht mit einem Shell-Skript machen? Das wird ein "RUN" sein. – Grimmy
Können diese Plugins als Pakete in irgendeiner Form heruntergeladen werden? Dann würden Sie eine Anforderungsliste erstellen und die Pakete in das Bild herunterladen. – Grimmy
'docker build' findet in einem Build-Server statt, während das eingebaute Image in einer Produktionsumgebung ausgeführt wird. Der Host in der Produktion enthält nicht das Verzeichnis 'plugins' und das Produktionsnetzwerk hat keinen Zugriff zum Herunterladen von Plug-in-Dateien. Ich muss diese Plugins während der Kompilier- und Erstellungszeit bündeln und das resultierende Bild dann an die Produktion senden. –