GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Cómo acceder a archivos fuera de un contenedor Docker

Si los contenedores están aislados, ¿cómo pueden comunicarse con la máquina host, tal vez para almacenar datos? Porque cuando creamos un contenedor a partir de una imagen, los datos generados se pierden cuando se elimina el contenedor.

Así que necesitamos una forma de tener almacenamiento permanente.

Podemos hacerlo usando Bind Mounts y Volúmenes .

No hay mucha diferencia entre los dos, excepto que Bind Mounts puede apuntar a cualquier carpeta en la computadora host y Docker no los administra directamente.

Comencemos con ellos. Un ejemplo clásico son los registros. Suponga que su aplicación crea un archivo de registro, dentro del contenedor, en /usr/src/app/logs . Puede asignar eso a una carpeta en la máquina host, usando -v (igual que --volume ) marca cuando ejecuta el contenedor con docker run , así:-v ~/logs:/usr/src/app/logs

Esto asignará esa carpeta a la subcarpeta de registros en el directorio de inicio del usuario.

Nodo:el -m o --mount flag funciona de manera muy similar

Esta es la bandera utilizada con el examplenode imagen que creamos anteriormente:

docker run -d -p 80:3000 -v ~/logs:/usr/src/app/logs --name node-app examplenode

Ahora podemos ejecutar nuestra aplicación Node y cualquier registro se almacenará en la computadora host, en lugar de dentro del contenedor Docker.

Tenga en cuenta que el examplenode la aplicación no genera ningún registro en /usr/src/app/logs , es solo un ejemplo y primero deberá configurar ese registro.

Los detalles sobre el volumen se enumerarán cuando ejecute docker inspect en el nombre del contenedor, en "Monturas":

"Mounts": [
    {
        "Type": "bind",
        "Source": "/Users/flavio/logs",
        "Destination": "/usr/src/app/logs",
        "Mode": "",
        "RW": true,
        "Propagation": "rprivate"
    }
],

¿Puedes ver "Type": "bind" ? Eso significa que hemos creado un montaje de enlace .

Ahora, hablemos de Volúmenes .

La diferencia entre Bind Mounts y Volumes es que al crear volúmenes, Docker almacenará los datos en una carpeta que administra, lo que significa que se encargará de los permisos y la propiedad de los archivos, y le brindará las herramientas para administrar esos volúmenes. Si bien los montajes de vinculación se basan en las rutas del sistema de archivos, Docker no puede proporcionar las herramientas que los rodean.

Por ejemplo, Docker le permite eliminar todos los volúmenes no utilizados ejecutando docker volume prune o docker system prune --volumes .

Para crear un volumen, primero debemos ejecutar docker volume create :

docker volume create logs

Ahora puede usar docker volume ls y docker volume inspect para obtener más datos sobre los volúmenes del sistema:

Ahora ejecuta docker run con la opción -v logs:/usr/src/app/logs (indique el nombre del volumen en lugar de una carpeta)

docker run -d -p 80:3000 -v logs:/usr/src/app/logs --name node-app examplenode

Ahora ejecutando docker inspect en la imagen se mostrará el volumen montado:

"Mounts": [
    {
        "Type": "volume",
        "Name": "logs",
        "Source": "/var/lib/docker/volumes/logs/_data",
        "Destination": "/usr/src/app/logs",
        "Driver": "local",
        "Mode": "z",
        "RW": true,
        "Propagation": ""
    }
],

¿Ver? Ahora los registros se almacenarán en /var/lib/docker/volumes/logs/_data carpeta.

Los volúmenes serán esenciales cuando llegue el momento de implementar un contenedor en un servicio en la nube, por ejemplo.

Puede eliminar un volumen ejecutando docker volume rm <name> .


Docker
  1. Cómo instalar WordPress usando Docker

  2. Cómo usar SSH en un contenedor Docker

  3. Cómo asignar una IP estática a un contenedor Docker

  4. Cómo listar contenedores Docker

  5. Cómo salir de un contenedor Docker

Cómo ejecutar Grafana en un contenedor Docker

Cómo agregar un volumen a un contenedor Docker existente

Cómo copiar archivos con Docker cp a su Docker Container

Cómo configurar un contenedor Apache Docker

Cómo copiar archivos entre el host y el contenedor Docker

Cómo ejecutar contenedores Docker