Die Unterschiede zwischen den Befehlen „COPY“ und „ADD“ in einer Docker-Datei verstehen

Die Unterschiede zwischen den Befehlen „COPY“ und „ADD“ in einer Docker-Datei verstehen
Die Unterschiede zwischen den Befehlen „COPY“ und „ADD“ in einer Docker-Datei verstehen

Dockerfile-Befehle erklärt

Die Befehle „COPY“ und „ADD“ in einer Docker-Datei dienen dazu, Dateien in das Dateisystem Ihres Containers einzufügen, verfügen jedoch über unterschiedliche Funktionalitäten und bestmögliche Verwendungsszenarien. Das Verständnis dieser Unterschiede ist für eine effiziente Dockerfile-Verwaltung und die Gewährleistung der erwarteten Leistung Ihrer Containeranwendungen von entscheidender Bedeutung.

Während „COPY“ hauptsächlich zum einfachen Kopieren von Dateien verwendet wird, bietet „ADD“ zusätzliche Funktionen, wie z. B. die Handhabung von Remote-URLs und das Extrahieren komprimierter Dateien. In diesem Artikel werden die Nuancen jedes Befehls erläutert und Sie erfahren, wann Sie einen Befehl übereinander verwenden sollten, um Ihre Docker-Builds zu optimieren.

Befehl Beschreibung
FROM Gibt das Basis-Image an, das für das zu erstellende Docker-Image verwendet werden soll.
WORKDIR Legt das Arbeitsverzeichnis im Container fest.
COPY Kopiert Dateien oder Verzeichnisse vom Host in das Dateisystem des Containers.
ADD Fügt Dateien, Verzeichnisse oder Remote-URLs zum Dateisystem des Containers hinzu und kann die Dateiextraktion durchführen.
RUN Führt einen Befehl in der Umgebung des Containers aus.
EXPOSE Informiert Docker darüber, dass der Container zur Laufzeit auf den angegebenen Netzwerkports lauscht.

Detaillierte Erläuterung der Dockerfile-Befehle

Das erste Skript demonstriert die Verwendung von COPY Befehl in einer Docker-Datei. Der COPY Die Anweisung ist unkompliziert und dient zum Kopieren von Dateien oder Verzeichnissen vom Hostsystem in das Dateisystem des Docker-Containers. In diesem Beispiel beginnt das Skript mit dem FROM Befehl, der das Basis-Image angibt als python:3.8-slim-buster . Der WORKDIR Der Befehl legt das Arbeitsverzeichnis im Container fest /app . Darauf folgt die COPY Befehl, der den Inhalt des aktuellen Verzeichnisses auf dem Host in den kopiert /app Verzeichnis im Container. Nach dem Kopieren der Dateien wird die RUN Der Befehl wird verwendet, um die erforderlichen Python-Pakete zu installieren, die im angegeben sind requirements.txt Datei. Endlich, das EXPOSE Der Befehl macht Port 80 für die Außenwelt verfügbar.

Im Gegensatz dazu hebt das zweite Skript die Verwendung von hervor ADD Befehl in einer Docker-Datei. Ähnlich wie beim ersten Skript beginnt es mit dem FROM Befehl zum Festlegen des Basisbildes und des WORKDIR Befehl zum Definieren des Arbeitsverzeichnisses. Der Hauptunterschied besteht hier darin ADD Befehl, der zum Hinzufügen von Dateien von einer Remote-URL verwendet wird, in diesem Fall https://example.com/data/archive.tar.gz . Der ADD Der Befehl kopiert nicht nur Dateien, sondern verfügt auch über die Fähigkeit, komprimierte Dateien automatisch zu extrahieren, wie im Folgenden gezeigt wird RUN Befehl, der die extrahiert archive.tar.gz Datei in die /app Verzeichnis. Im Anschluss daran wurde die RUN Der Befehl installiert die erforderlichen Python-Pakete und die EXPOSE Der Befehl stellt Port 80 zur Verfügung.

Verwenden von COPY in einer Docker-Datei

Dockerfile-Beispiel

# Use an official Python runtime as a parent image
FROM python:3.8-slim-buster

# Set the working directory in the container
WORKDIR /app

# Copy the current directory contents into the container at /app
COPY . /app

# Install any needed packages specified in requirements.txt
RUN pip install --no-cache-dir -r requirements.txt

# Make port 80 available to the world outside this container
EXPOSE 80

Verwenden von ADD in einer Docker-Datei

Dockerfile-Beispiel

# Use an official Python runtime as a parent image
FROM python:3.8-slim-buster

# Set the working directory in the container
WORKDIR /app

# Add files from a remote URL
ADD https://example.com/data/archive.tar.gz /app/

# Extract the archive file
RUN tar -xzf /app/archive.tar.gz -C /app

# Install any needed packages specified in requirements.txt
RUN pip install --no-cache-dir -r requirements.txt

# Make port 80 available to the world outside this container
EXPOSE 80

Eingehende Analyse von COPY und ADD in Dockerfile

Während beides COPY Und ADD Befehle dienen dem Kopieren von Dateien vom Hostsystem in das Dateisystem des Containers. Sie verfügen über unterschiedliche Funktionen und Anwendungsfälle, die sie für unterschiedliche Szenarien geeignet machen. Der COPY Der Befehl ist einfacher und vorhersehbarer. Es wird am besten für das einfache Kopieren von Dateien verwendet, wenn keine zusätzliche Verarbeitung, wie z. B. das Extrahieren von Archiven oder das Abrufen von Remote-Dateien, erforderlich ist. Dieser Befehl stellt sicher, dass nur lokale Dateien und Verzeichnisse in den Container kopiert werden und sorgt so für eine saubere und sichere Build-Umgebung.

Andererseits ist die ADD Der Befehl bietet mehr Funktionalität, ist jedoch komplexer und birgt potenzielle Sicherheitsrisiken. Der ADD Der Befehl kann URL-Downloads verarbeiten und automatisch komprimierte Dateien extrahieren, z .tar, .gzip, Und .bzip2. Dies kann in Fällen von Vorteil sein, in denen Ihr Build-Prozess Remote-Assets oder -Archive erfordert, die während der Image-Erstellung extrahiert werden müssen. Allerdings bergen diese zusätzlichen Funktionen Risiken wie das unbeabsichtigte Überschreiben von Dateien und Sicherheitslücken beim Herunterladen von entfernten Standorten. Daher ist es wichtig, diese Faktoren bei der Entscheidung sorgfältig zu berücksichtigen COPY Und ADD.

Häufige Fragen und Antworten zu COPY und ADD in Dockerfile

  1. Was ist der Hauptzweck des COPY Befehl in einer Docker-Datei?
  2. Der COPY Der Befehl wird hauptsächlich zum Kopieren lokaler Dateien und Verzeichnisse vom Hostsystem in den Docker-Container verwendet.
  3. Wann sollten Sie das verwenden? ADD Befehl statt COPY?
  4. Sie sollten das verwenden ADD Befehl, wenn Sie Dateien von einer URL kopieren oder komprimierte Dateien während des Erstellungsprozesses extrahieren müssen.
  5. Welche Sicherheitsauswirkungen hat die Verwendung von ADD Befehl?
  6. Der ADD Der Befehl kann Sicherheitsrisiken mit sich bringen, insbesondere beim Herunterladen von Dateien von Remote-URLs, da er möglicherweise vorhandene Dateien überschreiben oder Schwachstellen verursachen kann.
  7. Kann das COPY Befehl zum Extrahieren komprimierter Dateien?
  8. Nein, das COPY Der Befehl verfügt nicht über die Fähigkeit, komprimierte Dateien zu extrahieren. es kopiert sie einfach so, wie sie sind.
  9. Wie funktioniert ADD Behandeln Sie komprimierte Dateien anders als COPY?
  10. Der ADD Der Befehl extrahiert automatisch komprimierte Dateien wie z .tar, .gzip, Und .bzip2 wenn sie dem Behälter hinzugefügt werden.
  11. Ist es möglich, Platzhalter mit dem zu verwenden? COPY Befehl?
  12. Ja, Sie können Platzhalter mit dem verwenden COPY Befehl zum Kopieren mehrerer Dateien oder Verzeichnisse, die einem Muster entsprechen.
  13. Was passiert, wenn eine URL zur Verfügung gestellt wird? ADD Befehl ist nicht erreichbar?
  14. Wenn eine URL für die bereitgestellt wird ADD Wenn der Befehl nicht erreichbar ist, schlägt der Docker-Build-Prozess fehl.
  15. Welchen Befehl sollten Sie für einen einfachen, lokalen Dateikopiervorgang verwenden?
  16. Für einfache, lokale Dateikopiervorgänge sollten Sie die verwenden COPY Befehl, da es einfacher und sicherer ist.
  17. Kann das ADD Kann der Befehl zum Hinzufügen von Dateien sowohl aus lokalen als auch aus entfernten Quellen verwendet werden?
  18. Ja das ADD Der Befehl kann Dateien sowohl von lokalen Quellen als auch von Remote-URLs hinzufügen, was ihn in bestimmten Szenarien vielseitiger macht.

Zusammenfassung der Docker-Befehle COPY und ADD

Verstehen, wann man es verwenden sollte COPY Und ADD in Ihrer Docker-Datei ist für die Optimierung Ihrer Container-Builds unerlässlich. Während COPY ist unkompliziert und sicher für lokale Dateien, ADD Bietet zusätzliche Funktionen auf Kosten zusätzlicher Komplexität und potenzieller Sicherheitsbedenken. Die Auswahl des richtigen Befehls basierend auf Ihren spezifischen Anforderungen kann die Effizienz und Sicherheit Ihrer Docker-Images verbessern.