Unterschied zwischen Befehlen zum Kopieren und Hinzufügen in Dockerfile

Isaac Tony 15 Februar 2024
Unterschied zwischen Befehlen zum Kopieren und Hinzufügen in Dockerfile

Ein Dockerfile ist ein Textdokument, das alle Befehle enthält, die zum Erstellen eines Docker-Images verwendet werden. Wir haben in der jüngeren Vergangenheit eine umfassende Einführung von Docker als Standardtool für die Verwaltung von Konfigurationen und die Automatisierung von Bereitstellungen erlebt.

Erweiterte Funktionen der Verwendung von Dockerfiles, wie z. B. automatische Builds, sind der Grund, warum Entwickler Docker übernehmen. Andere umfassen das Isolieren von Anwendungen von Umgebungen, in denen sie ausgeführt werden, und die schnelle Sicherheit.

Beim Erstellen von Docker-Containern ist es oft notwendig, Dateien vom Host auf das Docker-Image zu übertragen. Diese Dateien können Bibliotheken oder Eigenschaftsdateien enthalten, die für die Ausführung Ihrer Anwendung erforderlich sind.

Unterschied zwischen den Befehlen COPY und ADD in Dockerfile

Im Dockerfile können wir diese Dateien mit dem Befehl COPY oder ADD kopieren. Diese Befehle sind funktional gleich; Es bestehen jedoch einige Unterschiede.

Die Befehle COPY und ADD folgen der untenstehenden Syntax.

COPY <src> <dest>
ADD <src> <dest>

Beide Anweisungen kopieren Dateien oder Verzeichnisse, die sich unter <src> im localhost befinden, und fügen sie dem Speicherort <dest> im Dateisystem des Containers hinzu. In der Dockerfile unten kopieren wir beispielsweise Dateien aus dem aktuellen Verzeichnis in das Verzeichnis /var/www in den Docker-Images.

#  base image
FROM python

# Set your working directory
WORKDIR /var/www/
# Copy the necessary files
COPY ./app.py /var/www/app.py
ADD./requirements.txt /var/www/requirements.txt

# Install the necessary packages
RUN pip install -r /var/www/requirements.txt
ADD mkdir -p /var/www/new_directory
# Run the app
CMD ["echo", "Hello, Developer"]

Wir wollen die Dateien app.py und requirements.txt kopieren. Wenn wir nun dieses Docker-Image erstellen und damit einen Docker-Container erstellen, können wir die beiden Dateien sicherlich im Dateisystem des Docker-Containers finden.

Das folgende Beispiel erstellt ein Docker-Image basierend auf der obigen Dockerfile.

~/my-app$ Docker build -t new-image .

ein Docker-Image basierend auf der Dockerfile erstellen

Sobald wir ein Image haben, erstellen wir mit dem Befehl docker run einen Docker-Container. Darüber hinaus werden wir innerhalb des Containers auch bash starten.

Code:

~/my-app$ Docker run -it new-image bash

Wenn wir die Dateien im Verzeichnis /var/www auflisten, sollten Sie sowohl die Dateien app.py als auch die Dateien requirements.txt sehen.

Code:

root@841d1e8d8c25:/var/www# ls
app.py  new_directory  requirements.txt

Im obigen Docker-Container haben uns sowohl die Befehle ADD als auch COPY erlaubt, Dateien aus dem Verzeichnis des Hosts in das Verzeichnis des Dockers zu kopieren.

Wenn Sie jedoch ein solches einfaches Kopieren von Dateien in den Docker-Container durchführen, empfehlen wir die Verwendung des Befehls COPY.

Gemäß den Best Practices für Docker-Dateien ist der Befehl COPY besser geeignet, wenn wir nicht mehr Funktionalität benötigen als das Kopieren lokaler Dateien.

Der ADD-Befehl hingegen hat mehr Funktionalität. Mit diesem Befehl können Sie beispielsweise eine lokale tar-Datei in ein Docker-Image extrahieren.

Darüber hinaus unterstützt der ADD-Befehl Remote-URLs, und diese beiden Operationen sind mit dem COPY-Befehl nicht möglich. Der vorherige Befehl ist möglicherweise nicht wünschenswert, wenn Sie versuchen, die Größe des von Ihnen erstellten Docker-Images zu reduzieren.

Dies liegt daran, dass der Befehl ADD die Größe Ihres Docker-Images erheblich erhöhen kann, insbesondere wenn Pakete von Remote-URLs abgerufen werden.

Das bloße Kopieren von Dateien vom Host mit dem Befehl ADD kann dazu führen, dass Dateien unerwartet in das Dateisystem Ihres Docker-Images kopiert werden.

Abschließend, obwohl diese beiden Befehle Ähnlichkeiten aufweisen und austauschbar verwendet werden können, sollten Sie bei der Verwendung des Befehls COPY bleiben. Dagegen darf der ADD-Befehl nur bei Bedarf und mit grösster Sorgfalt verwendet werden.

Autor: Isaac Tony
Isaac Tony avatar Isaac Tony avatar

Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.

LinkedIn

Verwandter Artikel - Docker Command