Cómo mover un archivo dentro de un contenedor Docker

DockerDockerBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

Docker ha revolucionado la forma en que trabajan los desarrolladores, proporcionando un entorno coherente y confiable para construir, probar y desplegar aplicaciones. En este tutorial, exploraremos el proceso de mover archivos dentro de un contenedor Docker, lo que le permitirá administrar de manera eficiente los activos y recursos de su proyecto.

Comprender los contenedores Docker

Docker es una popular plataforma de contenerización que permite a los desarrolladores empaquetar y desplegar aplicaciones en un entorno coherente y aislado. Los contenedores son unidades ligeras, portátiles y autocontenidas que encapsulan una aplicación y sus dependencias, lo que facilita mover y ejecutar la aplicación en diferentes entornos.

¿Qué es un contenedor Docker?

Un contenedor Docker es una unidad estandarizada de software que empaqueta una aplicación y todas sus dependencias (código, entorno de ejecución, herramientas del sistema y bibliotecas) en un solo entorno portátil y autocontenido. Los contenedores se crean a partir de imágenes Docker, que son plantillas de solo lectura que definen el contenido del contenedor.

Beneficios de los contenedores Docker

  1. Coherencia: Los contenedores garantizan que la aplicación se ejecute de la misma manera, independientemente de la infraestructura subyacente, proporcionando un entorno coherente y predecible.
  2. Escalabilidad: Los contenedores se pueden escalar fácilmente hacia arriba o hacia abajo, lo que permite a las aplicaciones manejar cargas de trabajo mayores o reducir el uso de recursos cuando sea necesario.
  3. Portabilidad: Los contenedores se pueden ejecutar en cualquier sistema en el que esté instalado Docker, lo que facilita mover aplicaciones entre diferentes entornos, como desarrollo, prueba y producción.
  4. Eficiencia: Los contenedores son más ligeros que las máquinas virtuales, ya que comparten el núcleo (kernel) del sistema operativo del host, lo que resulta en tiempos de inicio más rápidos y un menor uso de recursos.

Arquitectura de Docker

Docker utiliza una arquitectura cliente-servidor, donde el cliente Docker se comunica con el demonio Docker (el servidor) para realizar diversas operaciones, como construir, ejecutar y administrar contenedores. El demonio Docker es responsable de administrar los objetos Docker, incluyendo contenedores, imágenes, redes y volúmenes.

graph LR A[Docker Client] -- Commands --> B[Docker Daemon] B -- Executes Commands --> C[Docker Objects]

Contenedores Docker vs. Máquinas virtuales

Si bien tanto los contenedores como las máquinas virtuales (VMs) proporcionan una forma de ejecutar aplicaciones en entornos aislados, difieren en su enfoque e implementación. Los contenedores utilizan el núcleo (kernel) del sistema operativo del host, mientras que las VMs tienen su propio sistema operativo invitado, lo que hace que los contenedores sean más ligeros y eficientes.

Característica Contenedores Máquinas virtuales
Aislamiento Aislamiento a nivel de aplicación Aislamiento completo del sistema operativo
Uso de recursos Ligero, comparte el núcleo (kernel) del sistema operativo del host Pesado, cada VM tiene su propio sistema operativo
Tiempo de inicio Segundos Minutos
Portabilidad Altamente portable Menos portable

En resumen, los contenedores Docker proporcionan una forma coherente, escalable y eficiente de empaquetar y desplegar aplicaciones, lo que los convierte en una opción popular para las prácticas modernas de desarrollo y despliegue de software.

Trabajar con el sistema de archivos de Docker

Comprender el sistema de archivos de Docker es fundamental para administrar y interactuar de manera efectiva con los contenedores. Los contenedores Docker tienen su propio sistema de archivos, que es independiente del sistema de archivos del sistema operativo del host.

Capas del sistema de archivos de Docker

Las imágenes Docker se crean utilizando una serie de capas de solo lectura, donde cada capa representa un cambio en el sistema de archivos. Cuando se crea un contenedor a partir de una imagen, se agrega una nueva capa de lectura y escritura encima de las capas de la imagen, lo que permite al contenedor modificar archivos sin afectar la imagen subyacente.

graph TB A[Docker Image] --> B[Read-Only Layers] B --> C[Read-Write Layer] C --> D[Docker Container]

Acceder al sistema de archivos del contenedor

Para acceder al sistema de archivos de un contenedor Docker en ejecución, puede utilizar el comando docker exec. Este comando le permite ejecutar comandos dentro de un contenedor en ejecución, incluyendo la navegación por el sistema de archivos.

## Run a container
docker run -d --name my-container ubuntu:latest

## Access the container's file system
docker exec -it my-container /bin/bash

Una vez dentro del contenedor, puede navegar por el sistema de archivos utilizando comandos estándar de Linux, como ls, cd y cat.

Copiar archivos entre el host y el contenedor

Puede copiar archivos entre el sistema host y un contenedor en ejecución utilizando el comando docker cp.

## Copy a file from the host to the container
docker cp /path/on/host my-container:/path/in/container

## Copy a file from the container to the host
docker cp my-container:/path/in/container /path/on/host

Esto le permite transferir fácilmente archivos y datos entre el host y el contenedor, lo que facilita los flujos de trabajo de desarrollo y despliegue.

Persistir datos con volúmenes

Los volúmenes Docker proporcionan una forma de persistir datos más allá de la vida útil de un contenedor. Los volúmenes se almacenan fuera del sistema de archivos del contenedor y se pueden compartir entre contenedores o adjuntar al sistema de archivos del host.

## Create a volume
docker volume create my-volume

## Run a container with a volume
docker run -d --name my-container -v my-volume:/app ubuntu:latest

Al utilizar volúmenes, puede asegurarse de que los datos importantes no se pierdan cuando se detenga o elimine un contenedor, lo que lo convierte en un aspecto crucial al trabajar con el sistema de archivos de Docker.

Mover archivos en Docker

Mover archivos dentro de un contenedor Docker es una tarea común que es posible que deba realizar durante el desarrollo, las pruebas o el despliegue de sus aplicaciones. Docker ofrece varios métodos para administrar y transferir archivos entre el sistema host y el contenedor.

Copiar archivos entre el host y el contenedor

El comando docker cp, que presentamos en la sección anterior, se puede utilizar para copiar archivos entre el sistema host y un contenedor en ejecución. Esta es una forma conveniente de transferir archivos, especialmente durante el desarrollo y la depuración.

## Copy a file from the host to the container
docker cp /path/on/host my-container:/path/in/container

## Copy a file from the container to the host
docker cp my-container:/path/in/container /path/on/host

Montar directorios del host como volúmenes

Otra forma de mover archivos entre el host y el contenedor es montando un directorio del host como un volumen en el contenedor. Esto permite que el contenedor acceda directamente a los archivos del sistema host.

## Run a container with a mounted host directory
docker run -d --name my-container -v /path/on/host:/app ubuntu:latest

En este ejemplo, el directorio /path/on/host del sistema host se monta como el directorio /app dentro del contenedor. Cualquier cambio realizado en los archivos del directorio /app dentro del contenedor se reflejará en el directorio /path/on/host del sistema host, y viceversa.

Usar montajes de enlace (bind mounts)

Los montajes de enlace (bind mounts) son una forma más flexible de montar directorios del host en contenedores. Permiten especificar explícitamente las rutas de origen y destino, y se pueden utilizar para montar archivos o directorios individuales.

## Run a container with a bind mount
docker run -d --name my-container -v /path/on/host:/path/in/container ubuntu:latest

Los montajes de enlace brindan más control sobre el mapeo del sistema de archivos entre el host y el contenedor, lo que los hace útiles en escenarios en los que es necesario acceder a archivos o directorios específicos.

Al comprender estas técnicas para mover archivos en Docker, puede administrar de manera efectiva el sistema de archivos dentro de sus contenedores, lo que facilita los flujos de trabajo de desarrollo, pruebas y despliegue.

Resumen

Al final de este tutorial, tendrá una comprensión sólida del sistema de archivos de Docker y de las técnicas para mover archivos dentro de sus contenedores Docker. Este conocimiento le ayudará a optimizar su flujo de trabajo de desarrollo, asegurando una experiencia fluida y eficiente al trabajar con Docker.