Funktioniert .dockerignore nicht? Es ist anders geschrieben als .gitignore!

Dieser Beitrag

.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.

Zielgruppe

Leute, die .gitignore geschrieben haben, aber nicht viel .dockerignore geschrieben haben

Punkt

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.

Was ist .dockerignore?

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.

Dateiübertragung während des Docker-Builds

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.

build_context.png

.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.

Kontextstamm erstellen

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.

Unterschied zwischen .dockerignore und .gitignore

Nun zum Hauptthema. .dockerignore und .gitignore sind in Zweck und Schrift ähnlich, jedoch nicht in derselben Implementierung. Die Spezifikationen sind auch unterschiedlich.

So geben Sie den Pfad an

.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.

Ignorierdatei im Unterverzeichnis

.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.

gitignore_directory.png

.dockerignore

.dockerignore lädt .dockerignore nur im Build-Kontextstamm. .Dcokerignore-Dateien in Unterverzeichnissen werden nicht gelesen.

dockerignore_directory_2.png

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.

Nachwort

Vielleicht gibt es einen etwas größeren Unterschied, aber bisher habe ich so viel gefunden. Haben Sie ein angenehmes Hafenleben.

Umgebung

Referenzmaterial Link

Recommended Posts

Funktioniert .dockerignore nicht? Es ist anders geschrieben als .gitignore!
In Java-TeraPad ab Anfänger geschriebener Code funktioniert aufgrund eines Fehlers nicht
Der Java Integer-Vergleich (==) funktioniert nicht richtig
Die Änderung der Breite der Eclipse-Registerkarte funktioniert nicht.
Funktioniert die Escape-Sequenz (\) nicht? (für Mac)
Wenn @Transactional of Spring Boot nicht funktioniert
@BeforeStep funktioniert nicht mit Spring-Batch-Tasklet