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.