Dies ist eine wirklich gute Frage, die ein Prinzip beschreibt, dass ich ein paar Mal jetzt konfrontiert habe, eigentlich zwei separate, aber verwandt Fragen:
1.) Wie man am besten in Docker
Docker ist groß bei enca Mit Transient Dateien umgehen pilling die totale und völlige Erholung einer Umgebung. Wenn Sie einen Teil des Prozesses 'außerhalb' des Containers ausführen, d. H. Sie composer install
außerhalb des docker build
Prozesses ausführen, dann haben Sie einen weniger portablen Build-Prozess, weil Sie Maschinen-/Umgebungsabhängigkeiten eingeführt haben, denen Sie nicht bewusst sind.
Wenn Sie immer die vollständige Umgebung in Docker neu erstellen, dann garantieren Sie, dass Ihre Abhängigkeiten immer erfüllt sind und Sie die Dockerdatei jedem anderen geben können und sie auch ein hohes Vertrauen darin haben, ohne Probleme lokal zu rekonstruieren.
Transient Dateien sind ideal für den Aufbau in Docker! Also würde ich versuchen, sie möglichst im Container zu bauen.
2.) Wie entkoppeln Genehmigung von Docker bauen Prozess
Was uns zur zweiten Ausgabe führt auf, wie Zulassung entkoppeln von Build?
Option 1 - Bake In Komponist auth.JSON mit Krediten für einen dedizierten Build-Benutzer:
Wie andere Antworten haben gesagt, Sie könnten die Anmeldeinformationen "einbacken" und dann wieder entfernen. Allerdings möchten Sie nicht etwas so Sensitives wie Ihre SSH-Schlüssel "einbrennen". Composer unterstützt eine auth.json Datei, also warum nicht einen dedizierten Build-Benutzer erstellen und seine Creds (statt Ihrer) in der Datei auth.json speichern? Wenn es jemals kompromittiert wurde, können Sie das Passwort ändern. Sobald die Composer-Installation abgeschlossen ist, entfernen oder überschreiben Sie die Datei.
COPY . ./
RUN composer install --no-dev --no-interaction -o
RUN rm -f ./auth.json
Option 2 - Nehmen Sie die creds sich vorübergehend und sie in den exec Docker Behälter mit Docker passieren:
Ich habe völlig diesen Ansatz nicht getestet, aber ich kann nicht sehen, warum etwas so würde das nicht funktionieren.
1.) Sie bauen eine Basis PHP Container, die lauffähig ist ‚Komponist installieren‘ (oder eine Verwendung von Docker Hub)
2.) Sie spinnen bis diese Behälterboden, so dass es läuft
3.) Sie verwenden docker exec, um Ihre Credits an ein Wrapper-Skript zu übergeben, das bereits in Ihrem Container gespeichert ist. Die Wrapper-Skripte ausgeführt werden soll Komponist installieren HTTP Basic-Authentifizierung verwenden - es wird bereits der Benutzername gebacken haben in so dass Sie nur das Passwort gemäß dem http-basic technique
docker exec -d my_base_php_container php -f /my_wrapper_script.php ${PASSWORD}
4. zur Verfügung stellen müssen) Sie verpflichten sich diese Behälter als ein neues Bild
docker commit --change "composer install" ${CONTAINER_ID} my_installed_image:1.0
Also ist Ihr Hauptargument für das Bauen im Inneren alle Abhängigkeiten, die ich im Bild brauche? Warum nicht ein privates Bild zum Bauen haben, das das erstellte Artefakt kopiert? Auf diese Weise - ich habe einen konsistenten Build-Prozess mit allem, und keine gebackenen in Krediten oder SSH-Schlüssel, und auch mein eingesetztes Bild hat keine unnötigen Schichten wie Komponist im Inneren. – NiRR
Ja genau, alle Abhängigkeiten innerhalb des Bildes geben Ihnen Konsistenz und Portabilität. Warum nicht unsere Docker-Container die Artefakte erstellen? Gute Frage und das ist ein weiterer guter Ansatz! Dies ist etwas, das ich zuvor mit einem Maven-Docker-Bild ausprobiert habe, an das Sie eine POM-Datei übergeben können, es kann funktionieren, Überlegungen sind 1.) Wenn die Auth außerhalb von Docker ist, wie erhalten Sie andere (inkl. Build-Server/Pipeline) um auch dein Image aufzubauen? und 2.) Wie extrahierst du das Artefakt aus dem Container? (Sie könnten Volume-Mounts verwenden, um dies zu erreichen, aber dies könnte env-spezifische Abhängigkeiten verursachen) – GreensterRox