Todo

Cómo compartir carpetas entre anfitrión y contenedores de Docker

Editado 5 hace meses por ExtremeHow Equipo Editorial

Docker EscritorioCarpetasCompartir ArchivosAnfitriónContenedoresConfiguraciónDevOpsDesarrollo de softwareComputación en la NubeVirtualización

Traducción actualizada 5 hace meses

Docker es una herramienta poderosa utilizada para desarrollar e implementar aplicaciones dentro de contenedores. Los contenedores son un entorno aislado donde las aplicaciones pueden ejecutarse sin interferencias de otros procesos en la misma máquina. Al usar Docker, puede enfrentarse a situaciones en las que necesite compartir archivos o carpetas entre su máquina anfitriona y los contenedores de Docker. Esta guía lo llevará a través del proceso de compartir carpetas entre una máquina anfitriona y contenedores de Docker de manera detallada y completa. Cubriremos los conceptos básicos, daremos ejemplos y analizaremos posibles desafíos.

Entendiendo los volúmenes de Docker

Antes de avanzar a los pasos para compartir carpetas, es importante entender cómo Docker maneja la persistencia de datos. Los contenedores de Docker son efímeros; una vez apagados, cualquier dato almacenado en ellos puede perderse. Docker proporciona varios mecanismos para gestionar y persistir datos, y una de las formas principales es a través de volúmenes. Un volumen de Docker es un almacenamiento de datos persistente al que un contenedor puede acceder, y existe al margen del ciclo de vida del contenedor.

Docker gestiona los volúmenes de manera independiente, lo que significa que están aislados de cualquier contenedor específico. Esto contribuye significativamente a la durabilidad de los datos porque incluso si elimina un contenedor, los datos dentro de su volumen permanecen intactos y pueden adjuntarse a otro contenedor. Los volúmenes son ideales para compartir carpetas entre anfitriones y contenedores de Docker debido a su independencia del ciclo de vida del contenedor y su capacidad para ser controlados explícitamente.

Tipos de volúmenes de Docker

Docker admite diferentes tipos de volúmenes para casos de uso diferentes:

Usando vinculaciones de montaje para compartir carpetas

La forma más sencilla de compartir una carpeta entre un anfitrión y un contenedor de Docker es a través de una vinculación de montaje. Veamos los pasos involucrados y un ejemplo:

Guía paso a paso para usar vinculaciones de montaje

  1. Cree un directorio en el anfitrión:

    Cree un directorio en su sistema anfitrión que desee compartir con Docker. Por ejemplo, podría crear un directorio llamado /Users/username/shared.

  2. Modifique el comando docker run:

    A continuación, actualice el comando Docker run para incluir la vinculación de montaje. Use la bandera -v o --volume después de la asignación de ruta. Por ejemplo, para montar /Users/username/shared en /shared en su contenedor, el comando es:

    docker run -v /Users/username/shared:/shared my-image

    En este ejemplo, my-image se refiere a la imagen de Docker que está ejecutando. El montaje permite que cualquier cambio realizado en /shared dentro del contenedor se refleje en la carpeta /Users/username/shared en el anfitrión.

  3. Acceda a la carpeta compartida en el contenedor:

    Una vez que el contenedor se esté ejecutando con una vinculación de montaje, cualquier archivo modificado dentro de /shared dentro del contenedor afecta directamente a los archivos en el directorio /Users/username/shared del anfitrión y viceversa.

Ejemplo de uso de vinculación de montaje

Aquí hay un ejemplo práctico de cómo compartir archivos entre un anfitrión y un contenedor de Docker usando el servidor web Nginx. Supongamos que desea servir archivos HTML ubicados en un directorio de su máquina anfitriona:

  1. Configure el directorio compartido:
    • Cree un directorio llamado website en su anfitrión.
    • Dentro del directorio website agregue un archivo index.html con algún contenido.
  2. Ejecute el contenedor Nginx con una vinculación de montaje:

    Use el siguiente comando para montar el directorio website en el directorio /usr/share/nginx/html dentro del contenedor:

    docker run --name my-nginx -v "$PWD"/website:/usr/share/nginx/html:ro -d nginx

    La opción :ro hace que la vinculación de montaje sea de solo lectura dentro del contenedor.

  3. Acceda al servidor Nginx:

    Visite http://localhost en un navegador web para ver el archivo index.html servido por Nginx desde un directorio compartido en su anfitrión.

Usando volúmenes de Docker para compartir carpetas

Mientras que las vinculaciones de montaje se relacionan directamente con rutas en el sistema de archivos del anfitrión, los volúmenes de Docker son más abstractos y son gestionados por Docker. Aprendamos cómo crear y usar volúmenes de Docker:

Creando un volumen de Docker

Use el comando docker volume create para crear un nuevo volumen, como se muestra a continuación:

docker volume create my-volume

Este comando crea un volumen llamado my-volume que Docker gestionará.

Adjuntando un volumen a un contenedor

Para adjuntar el volumen creado al contenedor, use el siguiente comando:

docker run -v my-volume:/app/data my-image

Este ejemplo monta my-volume en el contenedor en /app/data. Cualquier dato escrito en /app/data permanece en my-volume, incluso si se detiene o elimina el contenedor.

Ejemplo de uso de volúmenes

Considere un escenario en el que desea almacenar una base de datos a través de reinicios de contenedores. Puede usar un volumen para montar el directorio de datos de un contenedor de base de datos:

  1. Cree un volumen de Docker:
    docker volume create db-data
  2. Ejecute el contenedor de la base de datos con el volumen:
    docker run -d --name my-database -v db-data:/var/lib/mysql mysql:5.7

    En este caso, cualquier cambio de datos en el directorio /var/lib/mysql se almacena en el volumen db-data.

  3. Durabilidad de los datos:

    Incluso si detiene y elimina el contenedor my-database, el volumen db-data retiene los datos, listo para ser adjuntado a otra instancia.

Depuración y solución de problemas de vinculaciones de montaje

Establecer una vinculación de montaje puede ser fácil, pero pueden surgir problemas. Aquí hay algunos problemas comunes y sus soluciones:

Conclusión y mejores prácticas

Compartir carpetas entre el anfitrión y el contenedor de Docker es una funcionalidad esencial que facilita el desarrollo, la persistencia de datos y la colaboración. Es importante decidir qué tipo de montaje (vinculación de montaje o volumen) es apropiado para su caso de uso. Las vinculaciones de montaje le brindan control directo de la ruta, mientras que los volúmenes de Docker son más portátiles y fáciles de gestionar para la persistencia de datos a largo plazo.

Aquí hay algunas mejores prácticas a considerar:

Con estas ideas, métodos y ejemplos, debería estar bien equipado para manejar efectivamente el compartir carpetas entre su anfitrión y contenedores de Docker. No dude en explorar más y modificar los métodos para adaptarse a las necesidades de su proyecto.

Si encuentras algo incorrecto en el contenido del artículo, puedes


Comentarios