David Guzman Lopez

Los contenedores ofrecen entornos aislados, reproducibles y ligeros, lo que simplifica enormemente la implementación y gestión de aplicaciones.
Sin embargo, a medida que trabajamos con estos entornos aislados, surge una necesidad práctica y fundamental: ¿cómo movemos archivos hacia y desde un contenedor en ejecución?
Introducción
Es crucial para una variedad de escenarios: desde inyectar archivos de configuración necesarios, copiar logs para depuración, hasta extraer los artefactos de build generados dentro del contenedor(que puede ser efimero para genera el CI de una app desde jenkins o Azure DevOps). Entender cómo insertar y extraer archivos no solo mejora la eficiencia de nuestros flujos de trabajo, sino que también nos otorga un control completo sobre los datos que residen en el corazón de nuestra aplicación contenerizada.
En esta publicación, exploraremos las herramientas y comandos esenciales que nos permiten realizar estas operaciones de transferencia de manera efectiva, asegurando que puedas manipular el contenido de tus contenedores con confianza y precisión.
El comando docker cp es la utilidad más directa y recomendada para copiar archivos y directorios entre el sistema de archivos de un contenedor y tu máquina local.
Una gran ventaja es que, a diferencia de otros comandos de interacción, no es necesario que el contenedor esté corriendo para ejecutar docker cp.
1. Iniciar un Contenedor para la Prueba
Antes de realizar la copia, necesitamos un contenedor activo. Usaremos una imagen base de ubuntu y la mantendremos en ejecución indefinidamente:
docker run -d --name copytest ubuntu tail -f /dev/null

Este comando corre un contenedor basado en Ubuntu en modo detached (-d), le asigna el nombre copytest (--name), y el comando tail -f /dev/null lo mantiene activo sin consumir recursos innecesarios.
2. Copiar Archivos al Contenedor
Para enviar un archivo desde tu máquina (Host) hacia el contenedor, la sintaxis del comando docker cp es la siguiente:
Crea el archivo localmente máquina Host:
touch prueba.txt
Esto crea un archivo vacío llamado prueba.txt en el directorio actual.
docker exec -it copytest bash
Entro al contenedor

mkdir testing
creo un directorio en el contenedor

docker cp prueba.txt copytest:/tmp/prueba.txt
copio el archivo dentro del contenedor
-copytest es el nombre del contenedor
-tmp es la ruta en este caso es la carpeta
-test.txt es el nombre del archivo

docker cp copytest:/tmp capetaPrueba
copio el directorio de un contenedor a mi máquina


Host: Donde Docker esta instalado.
Bind Mount: Guarda los archivos en la maquina local persistiendo y visualizando estos datos (No seguro).
Volume: Guarda los archivos en el area de Docker donde Docker los administra (Seguro).
TMPFS Mount: Guarda los archivos temporalmente y persiste los datos en la memoria del contenedor, cuando muera sus datos mueren con el contenedor.

