GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

Was ist der Unterschied zwischen COPY- und ADD-Anweisungen in Dockerfile?

Sie sind neu bei Docker und lernen, benutzerdefinierte Docker-Images mit Dockerfile zu erstellen.

Sie stoßen auf eine Vielzahl von Dockerfile-Anweisungen wie FROM, RUN usw.

Dann stoßen Sie auf COPY und ADD und stellen fest, dass beide Anweisungen die gleiche Aufgabe erfüllen. Kopieren Sie die Dateien und Verzeichnisse vom Host in Ihr modifiziertes Docker-Image.

Warum hat Dockerfile zwei Befehle für dieselbe Aufgabe? Gibt es einen Unterschied zwischen den beiden? In der Tat. Sie haben ähnliche Ziele, aber in Bezug auf das Verhalten unterscheiden sie sich.

Lassen Sie mich das für Sie erklären.

Dockerfile HINZUFÜGEN vs. KOPIEREN

Sowohl ADD als auch COPY wurden entwickelt, um Ihrem Docker-Image Verzeichnisse und Dateien hinzuzufügen.

Die ADD-Anweisung ist relativ älter und kann mehr als nur Dateien und Verzeichnisse kopieren. ADD kann Dateien von externen URLs abrufen. Es kann auch komprimierte Dateien extrahieren, vorausgesetzt, es unterstützt das Archivformat. Dies führt auch manchmal zu einem Problem, wenn ADD das Archivformat nicht unterstützen kann.

Wenn ADD das alles kann, warum haben wir dann COPY? Das liegt daran, dass die Docker-Befehle bisher mehrfach umstrukturiert wurden. Der Schwerpunkt liegt auf der Bereitstellung einer einfachen, geradlinigen und optimierten Befehlsstruktur.

COPY wurde als direkter Ersatz für ADD eingeführt. COPY kopiert nur Dateien und Verzeichnisse. Das ist es. Zum Herunterladen und Extrahieren von Dateien werden normale Linux-Befehle wie curl und tar mit den RUN-Anweisungen verwendet.

Aus diesem Grund wird heutzutage COPY empfohlen und ADD findet man nur noch in älteren Tutorials und Dokumentationen.

ADD ist eine ältere Anweisung, die Dateien herunterladen und extrahieren kann, abgesehen davon, dass sie vom Host in die Bilder kopiert werden. COPY kann nur die Dateien und Verzeichnisse kopieren. Kopieren wird heutzutage empfohlen.

Sehen Sie sich die ADD-Anweisung genauer an

Der ADD-Befehl hat die folgenden drei Fähigkeiten:

1. Kopieren von lokalen Dateien in das Container-Image

Angenommen, Sie möchten lokale Dateien auf dem Hostsystem von /home/user/application kopieren in /opt/app auf Ihrem Docker-Image können Sie die folgende Anweisung in Ihre Dockerfile einfügen:

ADD /home/user/application /opt/app

Hier nur der Inhalt der /home/user/application Verzeichnis wird nach /opt/app kopiert einschließlich seiner Metadaten. Die application wird nicht kopiert Verzeichnis selbst.

2. Extrahieren von lokal gespeicherten Tar-Dateien

Sie können auch die ADD-Anweisung verwenden, um komprimierte Archive mit Formaten zu extrahieren - Identität , gzip , bzip2 oder xz . Der Inhalt wird als Verzeichnis im Zielspeicherort des von Ihnen erstellten Docker-Images entpackt.

ADD /home/user/test.tar.gz /opt

Das Verhalten ähnelt dem, was passiert, wenn Sie den tar-Befehl verwenden, um einen Tarball in ein bestimmtes Verzeichnis auf Ihrem Hostsystem zu extrahieren.

3. Eine Datei von einer URL herunterladen

Es ist ähnlich wie wget -P funktioniert aber für Dockerfiles. Während Sie Ihr Docker-Image erstellen, können Sie die folgende Anleitung verwenden, um eine Datei herunterzuladen und an einem gewünschten Ort auf Ihrem Container-Image zu speichern:

ADD https://filesamples.com/samples/document/pdf/sample2.pdf /home/user

Nachdem das Image erstellt wurde, können Sie dieses PDF-Dokument haben, bevor Sie einen darauf basierenden Container starten. Dies ist einer von vielen einzigartigen Anwendungsfällen.

Die COPY-Anweisung

Die COPY-Anweisung ist eine Weiterentwicklung der ADD-Anweisung, die entwickelt wurde, um Verwirrung unter Docker-Benutzern zu vermeiden. Seine Funktion ist nur eine – Kopieren von Dateien oder Verzeichnissen vom Quellspeicherort auf dem Host zum Zielspeicherort auf dem Docker-Image.

Es ist also im Grunde der erste Punkt im Abschnitt ADD-Befehl, der oben besprochen wurde. Die entsprechende Anweisung wäre:

COPY /home/user/application /opt/app

Als Best Practice empfehlen die Entwickler von Docker offiziell, die obige Anleitung zu verwenden, um Verwirrung zu vermeiden.

Wenn Sie also nur Dateien oder Verzeichnisse kopieren möchten, sollten Sie die COPY-Anweisung allein verwenden. Versuchen Sie, ADD nach Möglichkeit zu vermeiden. Verwenden Sie die RUN-Anweisungen mit regulären Linux-Befehlen zum Herunterladen und Extrahieren von Dateien.

Ich hoffe, dass Sie jetzt den grundlegenden Unterschied zwischen den beiden Anweisungen verstehen können. Um sie einzeln zu verstehen, können Sie sich die offizielle und vollständige Referenz von ADD und COPY ansehen.

Wenn Sie Vorschläge, Feedback oder Kommentare zum obigen Vergleich haben, hinterlassen Sie bitte Ihre Gedanken im Abschnitt unten.


Docker
  1. Was ist der Unterschied zwischen InnoDB und MyISAM?

  2. Was ist der Unterschied zwischen fsck und e2fsck?

  3. Was ist der Unterschied zwischen ls und l?

  4. Was ist der Unterschied zwischen $(CC) und $CC?

  5. Was ist der Unterschied zwischen Route und IP-Route?

Was ist der Unterschied zwischen Rsync und BTRFS unter Linux?

Was ist der Unterschied zwischen Cat und Touch Command?

Was ist der Unterschied zwischen Login- und Non-Login-Shell

Was ist der Unterschied zwischen apt und dem Befehl apt-get?

Was ist ein Hypervisor? Was ist der Unterschied zwischen Typ 1 und 2?

Was ist der Unterschied zwischen Curl und Wget?