Diferencia entre los comandos COPY y ADD en un Dockerfile

Al crear Dockerfiles, a menudo es necesario transferir archivos desde el sistema host a la imagen de Docker. Estos pueden ser archivos de propiedades, bibliotecas nativas u otro contenido estático que nuestras aplicaciones requerirán en tiempo de ejecución.

La especificación Dockerfile proporciona dos formas de copiar archivos del sistema de origen en una imagen: las directivas COPY y ADD.
Aquí veremos la diferencia entre ellos y cuándo tiene sentido usar cada uno.

A veces, verá que COPY o ADD se usan en un Dockerfile, pero el 99 % de las veces debería usar COPY. ¿Este es el por qué?

COPY y ADD son instrucciones de Dockerfile que tienen propósitos similares. Le permiten copiar archivos desde una ubicación específica en una imagen de Docker.
COPY toma un src y un destino. Solo le permite copiar en un directorio local o desde su host (la máquina que construye la imagen de Docker) en la propia imagen de Docker.

COPY <src> <dest>

ADD  también te permite hacer eso, pero también es compatible con otras 2 fuentes. Primero, puede usar una URL en lugar de un archivo/directorio local. En segundo lugar, puede extraer tar del directorio de origen al destino.

ADD <src> <dest>

En la mayoría de los casos, si usa una URL, descarga un archivo zip y luego usa el comando EJECUTAR para extraerlo. Sin embargo, también podría usar EJECUTAR   y curl en lugar de AÑADIR  aquí, por lo que enstring todo en 1 comando EJECUTAR para crear una imagen de Docker más pequeña. Un caso de uso válido para ADD es cuando desea extraer un archivo tar local en un directorio específico en su imagen de Docker. Esto es exactamente lo que hace la imagen de Alpine con ADD rootfs.tar.gz/. 

Si uno está copiando archivos locales a su imagen de Docker, siempre use COPY porque es más explícito.

Si bien la funcionalidad es similar, la directiva ADD es más poderosa de dos maneras, de la siguiente manera:

  1. Puede manejar URL remotas
  2. También puede extraer automáticamente archivos tar.

Echemos un vistazo a estos más de cerca.

Primero, la directiva ADD puede aceptar una URL remota como argumento fuente. La directiva COPY, por otro lado, solo puede aceptar archivos locales. 

Nota: Usar AGREGAR para obtener archivos remotos y copiarlos no suele ser ideal.

Esto se debe a que el archivo aumentará el tamaño general de la imagen de Docker. En su lugar, deberíamos usar curl o wget para obtener archivos remotos y eliminarlos cuando ya no se necesiten.

En segundo lugar, la directiva ADD expandirá automáticamente los archivos tar en el sistema de archivos de imagen. Si bien esto puede reducir la cantidad de pasos de Dockerfile necesarios para crear una imagen, es posible que no sea deseable en todos los casos.

Nota: La expansión automática solo ocurre cuando el archivo de origen es local para el sistema host.

Cuándo usar AGREGAR o COPIAR: según la guía de mejores prácticas de Dockerfile, siempre debemos preferir COPIAR a AGREGAR, a menos que necesitemos específicamente una de las dos características adicionales de AGREGAR. Como se indicó anteriormente, el uso del comando ADD expande automáticamente los archivos tar y ciertos formatos comprimidos, lo que puede llevar a que se escriban archivos inesperados en el sistema de archivos de nuestras imágenes.

Conclusión: aquí hemos visto las dos formas principales de copiar archivos en una imagen de Docker: AGREGAR y COPIAR. Si bien es funcionalmente similar, se prefiere la directiva COPY en la mayoría de los casos. Esto se debe a que la directiva ADD proporciona una funcionalidad adicional que debe usarse con precaución y solo cuando sea necesario.

Veamos las diferencias en forma tabular de la siguiente manera: 

COMANDO COPIAR AGREGAR COMANDO
COPY es un comando de archivo de Docker que copia archivos desde una ubicación de origen local a un destino en el contenedor de Docker. El comando ADD se usa para copiar archivos/directorios en una imagen de Docker.
Sintaxis: COPY <origen> <destino> Sintaxis: ADD fuente destino
Solo tiene una función asignada. También puede copiar archivos desde una URL.
Su función es duplicar archivos/directorios en una ubicación específica en su formato existente. El comando ADD se usa para descargar un archivo externo y copiarlo en el destino deseado.
Si queremos evitar la compatibilidad con versiones anteriores, debemos usar el comando COPY. El comando ADD es menos utilizable que el comando COPY.

Publicación traducida automáticamente

Artículo escrito por akashpandit1103 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *