Crear un volumen local con opciones de montaje
En este paso, aprenderá cómo crear un volumen local de Docker y especificar opciones de montaje. Las opciones de montaje le permiten controlar cómo se monta el sistema de archivos, como establecer permisos, habilitar características específicas o optimizar el rendimiento.
Crearemos un volumen local llamado myvolume3
y usaremos la opción o
para especificar opciones de montaje. Para este ejemplo, estableceremos las opciones uid
y gid
para garantizar que los archivos creados en el volumen por un contenedor sean propiedad de un usuario y grupo específicos en el host. Esto puede ser útil para gestionar permisos al compartir datos entre contenedores y el host.
Primero, creemos un directorio en el host que usaremos como origen para nuestro volumen. Esto no es estrictamente necesario para un volumen local estándar, pero ayuda a ilustrar cómo las opciones de montaje pueden afectar el sistema de archivos subyacente.
mkdir -p ~/project/myvolumedata
Ahora, creemos el volumen myvolume3
utilizando el controlador local
y especifiquemos la opción o
con uid
y gid
. Usaremos el ID de usuario y grupo del usuario labex
actual. Puedes encontrar tu ID de usuario y grupo utilizando los comandos id -u
e id -g
.
USER_ID=$(id -u)
GROUP_ID=$(id -g)
docker volume create --driver local --opt type=none --opt device=/home/labex/project/myvolumedata --opt o=bind,uid=$USER_ID,gid=$GROUP_ID myvolume3
Desglosemos este comando:
docker volume create
: El comando para crear un volumen.
--driver local
: Especifica el controlador de volumen local
.
--opt type=none
: Especifica que no se debe crear automáticamente un tipo de sistema de archivos. Estamos enlazando a un directorio existente.
--opt device=/home/labex/project/myvolumedata
: Especifica el dispositivo a montar, que es el directorio que creamos en el host. Tenga en cuenta el uso de la ruta absoluta /home/labex/project/myvolumedata
.
--opt o=bind,uid=$USER_ID,gid=$GROUP_ID
: Pasa las opciones de montaje.
bind
: Especifica un montaje enlazado (bind mount), vinculando el volumen al dispositivo especificado (nuestro directorio del host).
uid=$USER_ID
: Establece el ID de usuario para los archivos creados en el volumen al ID del usuario actual.
gid=$GROUP_ID
: Establece el ID de grupo para los archivos creados en el volumen al ID de grupo del usuario actual.
myvolume3
: El nombre del volumen.
Debería ver el nombre del volumen impreso en la consola.
Ahora, inspeccionemos el volumen para ver las opciones.
docker volume inspect myvolume3
En la salida, debería ver el Driver
como local
, las Options
incluyendo type=none
, device=/home/labex/project/myvolumedata
y o=bind,uid=...,gid=...
(con tus IDs de usuario y grupo). El Mountpoint
será el mismo que la ruta del device
.
A continuación, ejecutaremos un contenedor y adjuntaremos este volumen. Usaremos la imagen ubuntu
y montaremos myvolume3
en /app
dentro del contenedor. Luego, crearemos un archivo dentro del directorio /app
del contenedor y comprobaremos su propiedad en el host.
Primero, descarga la imagen ubuntu
si es necesario.
docker pull ubuntu
Ahora, ejecuta el contenedor y crea un archivo en el volumen montado.
docker run --rm -v myvolume3:/app ubuntu bash -c "echo 'Testing ownership' > /app/testfile.txt && ls -l /app/testfile.txt"
Este comando ejecuta un contenedor ubuntu
, monta myvolume3
en /app
, escribe "Testing ownership" en /app/testfile.txt
y luego lista los detalles del archivo dentro del contenedor. Debería ver el archivo listado con propiedad de root dentro del contenedor, ya que los contenedores generalmente se ejecutan como root por defecto.
Ahora, comprobemos la propiedad del archivo en la máquina host en el directorio ~/project/myvolumedata
.
ls -l ~/project/myvolumedata/testfile.txt
Debería ver que el archivo testfile.txt
es propiedad del usuario y grupo labex
en el host, gracias a las opciones de montaje uid
y gid
que especificamos al crear el volumen.
Finalmente, limpiemos el directorio creado.
rm -rf ~/project/myvolumedata