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.
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.
Docker admite diferentes tipos de volúmenes para casos de uso diferentes:
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:
Cree un directorio en su sistema anfitrión que desee compartir con Docker. Por ejemplo, podría crear un directorio llamado /Users/username/shared
.
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.
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.
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:
website
en su anfitrión.website
agregue un archivo index.html
con algún contenido.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.
Visite http://localhost
en un navegador web para ver el archivo index.html
servido por Nginx desde un directorio compartido en su anfitrión.
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:
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á.
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.
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:
docker volume create db-data
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
.
Incluso si detiene y elimina el contenedor my-database
, el volumen db-data
retiene los datos, listo para ser adjuntado a otra instancia.
Establecer una vinculación de montaje puede ser fácil, pero pueden surgir problemas. Aquí hay algunos problemas comunes y sus soluciones:
Es importante asegurarse de que el contenedor tenga los permisos necesarios para acceder al directorio montado. De lo contrario, puede recibir errores de Permiso Denegado
.
Verifique dos veces la ruta del anfitrión y la ruta del contenedor proporcionadas en el parámetro -v
para asegurarse de que sean correctas.
El demonio de Docker puede ejecutarse como un usuario diferente al usuario del anfitrión, lo que puede afectar los permisos de acceso. Puede intentar ejecutar Docker con privilegios elevados o ajustar los permisos de usuario según sea necesario.
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