¿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 de Docker modificada desde el host.

¿Por qué Dockerfile tiene dos comandos para la misma tarea? ¿Hay diferencia entre los dos? Por supuesto. 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, los comandos regulares de Linux como curl y tar se utilizan con las instrucciones RUN.

Esta es la razón por la cual 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.

Una mirada más cercana a la instrucción ADD

La instrucción ADD tiene las siguientes tres capacidades:

1. Copia de archivos locales en la imagen del contenedor

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

                      
                        ADD /home/user/application /opt/app

                      
                    

Aquí, sólo el contenido de la /home/user/application el directorio se copia en /opt/app incluyendo su metadatos . No va a copiar el 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. Descarga un archivo desde una URL

Es similar a como 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 COPIAR

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 recomendar oficialmente utilizando las instrucciones anteriores para evitar confusiones.

Diferencias entre las instrucciones COPY y ADD Dockerfile

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 AGREGAR y COPIAR .

Si tiene alguna sugerencia, comentario o comentario para compartir sobre la comparación anterior, deje sus pensamientos en la sección a continuación.

Related Posts