GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

¿Cuál es la diferencia entre las instrucciones COPY y ADD en Dockerfile?

Es nuevo en Docker y está aprendiendo a crear imágenes de Docker personalizadas con Dockerfile.

Te encuentras con una variedad de instrucciones de Dockerfile como FROM, RUN, etc.

Luego te encuentras con COPY y ADD y te das cuenta de que ambas instrucciones hacen el mismo trabajo; copie los archivos y directorios a su imagen Docker modificada desde el host.

¿Por qué Dockerfile tiene dos comandos para la misma tarea? ¿Hay diferencia entre los dos? En efecto. Tienen objetivos similares pero en términos de comportamiento, son diferentes.

Déjame explicarte eso.

Dockerfile AGREGAR vs COPIAR

Tanto AGREGAR como COPIAR están diseñados para agregar directorios y archivos a su imagen de Docker.

La instrucción ADD es relativamente más antigua y es capaz de hacer algo más que copiar archivos y directorios. ADD puede extraer archivos de direcciones URL externas. También puede extraer archivos comprimidos suponiendo que admita el formato de archivo. Esto también crea un problema en algún momento si ADD no puede admitir el formato de archivo.

Si ADD puede hacer todo esto, ¿por qué tenemos COPY? Es porque los comandos de Docker se han reestructurado varias veces hasta ahora. La atención se centra en proporcionar una estructura de mando simple, directa y más optimizada.

COPY se introdujo como un reemplazo directo de ADD. COPY solo copia archivos y directorios. Eso es todo. Para descargar y extraer archivos, se utilizan comandos regulares de Linux como curl y tar con las instrucciones RUN.

Esta es la razón por la que se recomienda COPIAR en estos días y encontrará AGREGAR solo en tutoriales y documentaciones más antiguos.

ADD es una instrucción más antigua que puede descargar y extraer archivos además de copiarlos en las imágenes del host. COPY solo puede copiar los archivos y directorios. Se recomienda copiar en estos días.

Observe más de cerca la instrucción ADD

La instrucción ADD tiene las siguientes tres capacidades:

1. Copia de archivos locales en la imagen del contenedor

Digamos, por ejemplo, si desea copiar archivos locales en el sistema host desde /home/user/application en /opt/app en su imagen Docker, puede incluir las siguientes instrucciones dentro de su Dockerfile:

ADD /home/user/application /opt/app

Aquí, solo el contenido de /home/user/application el directorio se copia en /opt/app incluyendo sus metadatos. No va a copiar la application directorio en sí.

2. Extracción de archivos tar almacenados localmente

También puede usar la instrucción ADD para extraer archivos comprimidos con formatos - identidad , gzip , bzip2 o xz . El contenido se desempaqueta como un directorio dentro de la ubicación de destino de la imagen de Docker que crea.

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

El comportamiento es similar a lo que sucede cuando usa el comando tar para extraer un tarball a un directorio específico en su sistema host.

3. Descargar un archivo desde una URL

Es similar a cómo wget -P funciona pero para Dockerfiles. Mientras construye su imagen de Docker, puede usar las siguientes instrucciones para descargar un archivo y almacenarlo en la ubicación deseada en su imagen de contenedor:

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

Después de crear la imagen, puede tener este documento PDF antes de lanzar un contenedor basado en él. Este es uno de los muchos casos de uso únicos.

La instrucción COPY

La instrucción COPY es una evolución de la instrucción ADD que se diseñó para mitigar la confusión entre los usuarios de Docker. Su función es solo una:copiar archivos o directorios desde la ubicación de origen en el host a la ubicación de destino en la imagen de Docker.

Entonces, es básicamente el primer punto en la sección de instrucciones ADD que se discutió anteriormente. La instrucción correspondiente sería:

COPY /home/user/application /opt/app

Como práctica recomendada, los desarrolladores de Docker recomiendan oficialmente utilizar las instrucciones anteriores para evitar confusiones.

Entonces, si solo desea copiar archivos o directorios, debe usar solo la instrucción COPY. Trate de evitar el uso de ADD siempre que sea posible. Use las instrucciones EJECUTAR con los comandos regulares de Linux para descargar y extraer archivos.

Espero que ahora puedas entender la diferencia básica entre las dos instrucciones. Para entenderlos individualmente, puedes echar un vistazo a la referencia oficial y completa de ADD and COPY.

Si tiene sugerencias, comentarios o comentarios para compartir sobre la comparación anterior, deje sus comentarios en la sección a continuación.


Docker
  1. ¿La diferencia entre [[ $a ==Z* ]] y [ $a ==Z* ]?

  2. ¿Cuál es la diferencia entre strtok_r y strtok_s en C?

  3. ¿Cuál es la diferencia entre adduser y useradd?

  4. ¿Cuál es la diferencia entre ls y l?

  5. ¿Cuál es la diferencia entre $(CC) y $CC?

¿Cuál es la diferencia entre Rsync y BTRFS en Linux?

¿Cuál es la diferencia entre el comando Cat y Touch?

¿Cuál es la diferencia entre Shell de inicio de sesión y sin inicio de sesión?

¿Cuál es la diferencia entre el comando apt y apt-get?

¿Qué es un Hipervisor? ¿Cuál es la diferencia entre el tipo 1 y 2?

¿Cuál es la diferencia entre curl y Wget?