.dockerignore und .gitignore haben ähnliche Namen und ähnliche Schreibstile, daher dachte ich, ich sollte sie auf die gleiche Weise schreiben, aber sie waren unterschiedlich. Wir werden uns die Unterschiede in diesem Artikel ansehen.
Leute, die .gitignore geschrieben haben, aber nicht viel .dockerignore geschrieben haben
Die Spezifikationen von .gitignore finden Sie auf Offizielle Seite von gitignore. Auf Japanisch ist Qiitas Detaillierte Erläuterung der .gitignore-Spezifikationen leicht zu verstehen.
Die Spezifikationen von .dockerignore sind in Docker-Build #dockerignore auf der offiziellen Seite beschrieben.
Es gibt drei Hauptregeln.
- Die Go-Sprache filepath.Match wird für den Mustervergleich verwendet.
- Unterstützt spezielle Platzhalterzeichenfolgen
**
. Dies entspricht mehreren Verzeichnissen (einschließlich Null).- Wenn Sie den Zeilenanfang mit einem Ausrufezeichen
!
Schreiben, wird eine Ausnahme zum Ausschluss angegeben.
Bevor wir den Unterschied zwischen .dockerignore und .gitignore erläutern, wollen wir uns mit der Dateiübertragung und der Rolle von .dockerignore während der Docker-Erstellung befassen.
Beim Erstellen einer Docker-Datei fasst Docker den Build-Kontext und unten mit tar zusammen. Hiermit wird das Zielverzeichnis an den Docker-Daemon übertragen. Dieser Teer enthält auch Dateien, die nicht KOPIEREN oder HINZUFÜGEN sind. Es enthält alle Dateien im Build-Kontext.
.dockerignore
Dateien, die für Docker-Builds nicht benötigt werden (die Sie nicht in tar einfügen möchten), sollten in .dockerignore aufgeführt sein. Durch das Erstellen eines .dockerignore wird die Erstellungszeit verkürzt, die Docker-Bildgröße optimiert und ein unbeabsichtigtes Auslaufen vertraulicher Informationen (Kennwörter usw.) verhindert.
Das Build-Kontextstammverzeichnis ist der Pfad, der vom Docker-Build verwendet wird. (Nicht der Speicherort der Docker-Datei)
docker build -f path/to/Dockerfile myprj
-----
↑ Der im Argument von Docker Build angegebene Pfad ist der Build-Kontextstamm ↑
Im obigen Beispiel ist myprj
die Build-Kontextwurzel. Im obigen Beispiel wird .dockerignore im Verzeichnis myprj
abgelegt.
Nun zum Hauptthema. .dockerignore und .gitignore sind in Zweck und Schrift ähnlich, jedoch nicht in derselben Implementierung. Die Spezifikationen sind auch unterschiedlich.
.gitignore
In .gitignore wird der geschriebene Datei- oder Verzeichnisname in jeder Hierarchie unterhalb der .gitignore-Datei ignoriert.
Zum Beispiel
.gitignore
target
Wenn du schreibst
target
src/target
path/a/b/target
Usw. werden ignoriert.
.dockerignore
In .dockerignore sind alle Pfade relativ zu dem Pfad, in dem sich .dockerignore befindet. [^ dockerignore_path]
[^ dockerignore_path]: Sie können dem Pfad auch /
voranstellen, wie bei .gitignore.
Zum Beispiel
.dockerignore
target
Wenn du schreibst
target
Nur ignoriert,
src/target
path/a/b/target
Wird nicht ignoriert.
Wenn Sie auf eine Hierarchie wie .gitignore abzielen möchten
dockerignore
**/target
Es wird beschrieben als.
.gitignore
Für .gitignore können Sie .gitignore auch in einem Unterverzeichnis platzieren. In diesem Fall hat die Regel, die näher an der Zieldatei liegt, Priorität.
.dockerignore
.dockerignore lädt .dockerignore nur im Build-Kontextstamm. .Dcokerignore-Dateien in Unterverzeichnissen werden nicht gelesen.
Seien Sie vorsichtig, wenn das Dockerfile-Verzeichnis und der Build-Kontext unterschiedlich sind. Anstatt den .gitignore an derselben Stelle wie die Docker-Datei abzulegen, fügen Sie den .dockerignore in den Build-Kontext ein.
Vielleicht gibt es einen etwas größeren Unterschied, aber bisher habe ich so viel gefunden. Haben Sie ein angenehmes Hafenleben.
Recommended Posts