Diferencia entre los comandos "COPY" y "ADD" en un Dockerfile

Diferencia entre los comandos "COPY" y "ADD" en un Dockerfile

Al momento de escribir un Dockerfile, es posible encontrarse con dos comandos similares: "COPY" y "ADD". Ambos permiten copiar archivos en un contenedor, pero existen pequeñas diferencias entre ellos que pueden afectar el funcionamiento de la imagen final. En este artículo se explicará cuáles son las diferencias principales entre "COPY" y "ADD" y cuál es la mejor opción para cada caso específico.

📋 Aquí podrás encontrar✍
  1. COPY
    1. Usos recomendados para COPY
  2. ADD
    1. Usos recomendados para ADD
  3. Conclusión
  4. Preguntas frecuentes
    1. ¿Puedo usar "ADD" para copiar un archivo local?
    2. ¿Puedo usar "COPY" para copiar un archivo comprimido y descomprimirlo después?
    3. ¿Cómo puedo copiar un directorio completo dentro del contenedor?
    4. ¿Cómo puedo cambiar los permisos de un archivo al copiarlo dentro del contenedor?
  5. Ejemplos de códigos y comandos:

COPY

El comando "COPY" permite copiar archivos locales dentro del contenedor. Es importante destacar que los archivos se copian tal cual, sin modificar su contenido. Además, solo permite copiar archivos regulares, no directorios.

Un ejemplo de uso sería:
COPY index.html /var/www/html/

En este caso, el archivo "index.html" se copiaría en la ruta "/var/www/html/" del contenedor. Es importante notar que solo se copiará el archivo, y no la carpeta que lo contiene.

Usos recomendados para COPY

- Copiar archivos locales que no requieran modificaciones adicionales dentro del contenedor.
- Copiar archivos dentro del contenedor que no tengan permisos especiales, tales como permisos de ejecución.

ADD

El comando "ADD" también permite copiar archivos dentro del contenedor, pero a diferencia de "COPY", permite también la posibilidad de descomprimir archivos comprimidos en formatos como ".tar" y ".zip". Adicionalmente, permite realizar descargas desde una URL, y tiene la capacidad de modificar permisos y crear directorios automáticamente.

Un ejemplo de uso sería:
ADD http://example.com/big.tar.xz /usr/src/things/

Este comando descarga un archivo comprimido desde la URL dada, lo descomprime y lo deja disponible en el directorio "/usr/src/things/" dentro del contenedor.

Usos recomendados para ADD

- Copiar archivos a una imagen Docker que has construido a partir de "scratch" o una imagen de "Alpine Linux".
- Descargar archivos desde una URL y copiarlos dentro del contenedor.
- Copiar archivos comprimidos y descomprimirlos dentro del contenedor.

Conclusión

Es importante tener en cuenta que los comandos "COPY" y "ADD" tienen similitudes, pero sus diferencias pueden afectar el funcionamiento de la imagen Docker final. En general, se recomienda utilizar "COPY" para copiar archivos locales dentro del contenedor y utilizar "ADD" cuando se necesite descomprimir archivos, descargar archivos desde una URL o se requiera modificación de permisos o creación de directorios.

Preguntas frecuentes

¿Puedo usar "ADD" para copiar un archivo local?

Sí, se puede usar "ADD" para copiar archivos locales igual que "COPY", pero es preferible utilizar "COPY" en este caso.

¿Puedo usar "COPY" para copiar un archivo comprimido y descomprimirlo después?

No, "COPY" solo permite copiar archivos regulares y no tiene la capacidad de descomprimir archivos.

¿Cómo puedo copiar un directorio completo dentro del contenedor?

Es necesario utilizar el comando "COPY" varias veces, copiando cada archivo dentro del directorio por separado:
COPY app/file1.txt app/file2.txt app/file3.txt /usr/src/app/

¿Cómo puedo cambiar los permisos de un archivo al copiarlo dentro del contenedor?

Se puede utilizar el comando "ADD" para cambiar los permisos de un archivo al momento de ser copiado:
ADD --chmod=755 script.sh /usr/bin/

¡Gracias por leer! Esperamos que este artículo te haya sido útil en tus proyectos con Docker. Si tienes alguna duda o sugerencia, ¡no dudes en dejarnos un comentario abajo!

Ejemplos de códigos y comandos:

  • COPY index.html /var/www/html/
  • ADD http://example.com/big.tar.xz /usr/src/things/
  • COPY app/file1.txt app/file2.txt app/file3.txt /usr/src/app/
  • ADD --chmod=755 script.sh /usr/bin/

Deja una respuesta

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

Subir