Diferencia entre copiar y agregar comandos en Dockerfile

Isaac Tony 15 febrero 2024
Diferencia entre copiar y agregar comandos en Dockerfile

Un Dockerfile es un documento de texto que contiene todos los comandos utilizados para crear una imagen de Docker. Hemos visto una amplia adopción de Docker como la herramienta predeterminada para administrar configuraciones y automatizar implementaciones en el pasado reciente.

Las características avanzadas del uso de Dockerfiles, como las compilaciones automáticas, son la razón por la que los desarrolladores están adoptando Docker. Otros incluyen aislar las aplicaciones de los entornos que ejecutan y la seguridad rápidamente.

Al crear contenedores de Docker, a menudo es necesario transferir archivos desde el host a la imagen de Docker. Estos archivos pueden incluir bibliotecas o archivos de propiedades necesarios para que se ejecute su aplicación.

Diferencia entre los comandos COPIAR y AÑADIR en Dockerfile

En el Dockerfile, podemos copiar estos archivos usando el comando COPIAR o AÑADIR. Estos comandos son funcionalmente los mismos; sin embargo, existen algunas diferencias.

Los comandos COPIAR y AÑADIR siguen la siguiente sintaxis.

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

Ambas instrucciones copian archivos o directorios ubicados en <src> en el host local y los agregan a la ubicación <dest> en el sistema de archivos del contenedor. Por ejemplo, en el Dockerfile a continuación, copiamos archivos del directorio actual al directorio /var/www en las imágenes de Docker.

#  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"]

Queremos copiar los archivos app.py y requirements.txt. Ahora, si construimos esta imagen de Docker y la usamos para crear un contenedor de Docker, sin duda podremos ubicar los dos archivos en el sistema de archivos del contenedor de Docker.

El siguiente ejemplo creará una imagen Docker basada en el Dockerfile anterior.

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

crear una imagen de Docker basada en Dockerfile

Una vez que tengamos una imagen, crearemos un contenedor Docker usando el comando docker run. Además de esto, también lanzaremos bash dentro del contenedor.

Código:

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

Si enumeramos los archivos dentro del directorio /var/www, debería ver los archivos app.py y requirements.txt.

Código:

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

En el contenedor de Docker anterior, los comandos ADD y COPY nos han permitido copiar archivos del directorio del host al directorio de Docker.

Sin embargo, al realizar una copia de archivos tan básica en el contenedor Docker, recomendamos usar el comando COPY.

De acuerdo con las mejores prácticas de docker-file, el comando COPY es más apropiado cuando no requerimos más funcionalidad que copiar archivos locales.

El comando AÑADIR, por otro lado, tiene más funcionalidad. Por ejemplo, puede usar este comando para extraer un archivo tar local en una imagen de Docker.

Además de esto, el comando AÑADIR tiene soporte para URL remotas, y estas dos operaciones no son posibles con el comando COPIAR. El comando anterior puede no ser deseable si intenta reducir el tamaño de la imagen de Docker que está creando.

Esto se debe a que el comando AÑADIR puede inflar significativamente el tamaño de su imagen de Docker, especialmente si está obteniendo paquetes de URL remotas.

El uso del comando AÑADIR para simplemente copiar archivos del host puede hacer que los archivos se copien inesperadamente en el sistema de archivos de su imagen de Docker.

En conclusión, si bien estos dos comandos comparten similitudes y se pueden usar indistintamente, debe ceñirse al uso del comando COPY. Por otro lado, el comando AÑADIR sólo podrá utilizarse cuando sea necesario y con sumo cuidado.

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

Artículo relacionado - Docker Command