3.4. Compartir archivos entre dos contenedores
Se pueden utilizar volúmenes para persistir los datos en los contenedores incluso cuando se elimina un contenedor. Los volúmenes pueden utilizarse para compartir datos entre varios contenedores. El volumen es una carpeta que se almacena en la máquina anfitriona. El volumen puede ser compartido entre el contenedor y el host.
Las principales ventajas son:
- Los volúmenes pueden ser compartidos entre los contenedores.
- Los volúmenes son más fáciles de respaldar o migrar.
- Los volúmenes no aumentan el tamaño de los contenedores.
Procedimiento
Para crear un volumen, introduzca:
$ podman volume create hostvolume
Para mostrar información sobre el volumen, introduzca:
$ podman volume inspect hostvolume [ { "name": "hostvolume", "labels": {}, "mountpoint": "/home/username/.local/share/containers/storage/volumes/hostvolume/_data", "driver": "local", "options": {}, "scope": "local" } ]
Observa que crea un volumen en el directorio de volúmenes. Puede guardar la ruta del punto de montaje en la variable para facilitar su manipulación:
$ mntPoint=$(podman volume inspect hostvolume --format {{.Mountpoint}})
.Observe que si ejecuta
sudo podman volume create hostvolume
, el punto de montaje cambia a/var/lib/containers/storage/volumes/hostvolume/_data
.Crear un archivo de texto dentro del directorio utilizando la ruta se almacena en la variable
mntPoint
:$ echo \ "Hola desde el host" >> $mntPoint/host.txt
Lista todos los archivos en el directorio definido por la variable
mntPoint
:$ ls $mntPoint/ host.txt
Ejecute el contenedor llamado
myubi1
y asigne el directorio definido por el nombre del volumenhostvolume
en el host al directorio/containervolume1
en el contenedor:$ podman run -it --name myubi1 -v hostvolume:/containervolume1 registry.access.redhat.com/ubi8/ubi /bin/bash
Tenga en cuenta que si utiliza la ruta del volumen definida por la variable
mntPoint
(-v $mntPoint:/containervolume1
), se pueden perder datos al ejecutar el comandopodman volume prune
, que elimina los volúmenes no utilizados. Utilice siempre-v hostvolume_name:/containervolume_name
.Enumera los archivos del volumen compartido en el contenedor:
# ls /containervolume1 host.txt
Puedes ver el archivo
host.txt
que has creado en el host.Cree un archivo de texto dentro del directorio
/containervolume1
:# echo \ "Hola desde el contenedor 1" >> /contenedor1/contenedor1.txt
-
Se separa del contenedor con
CTRL p
yCTRL q
. Liste los archivos en el volumen compartido en el host, debería ver dos archivos:
$ ls $mntPoint container1.rxt host.txt
En este punto, estás compartiendo archivos entre el contenedor y el host. Para compartir archivos entre dos contenedores, ejecute otro contenedor llamado
myubi2
. Los pasos 10 - 13 son análogos a los pasos 5 - 8.Ejecute el contenedor llamado
myubi2
y asigne el directorio definido por el nombre del volumenhostvolume
en el host al directorio/containervolume2
en el contenedor:$ podman run -it --name myubi2 -v hostvolume:/containervolume2 registry.access.redhat.com/ubi8/ubi /bin/bash
Enumera los archivos del volumen compartido en el contenedor:
# ls /containervolume2 container1.txt host.txt
Puede ver el archivo
host.txt
que creó en el host ycontainer1.txt
que creó dentro del contenedormyubi1
.Cree un archivo de texto dentro del directorio
/containervolume2
:# echo \ "Hola desde el contenedor 2" >> /containervolume2/container2.txt
-
Se separa del contenedor con
CTRL p
yCTRL q
. Enumera los archivos en el volumen compartido en el host, deberías ver tres archivos:
$ ls $mntPoint container1.rxt container2.txt host.txt
Para detener y eliminar ambos contenedores, introduzca:
$ podman stop myubi1 $ podman stop myubi2 $ podman rm myubi1 $ podman rm myubi2
Para eliminar el volumen anfitrión, introduzca:
$ podman volume rm hostvolume
Para comprobar que has borrado el volumen, introduce:
$ podman volume ls
Recursos adicionales
-
Para más información sobre el comando
podman volume
, escribaman podman-volume
.