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

¿Dónde se almacenan las imágenes, los contenedores y los volúmenes de Docker en el sistema host de Linux?

¿Quiere saber dónde se encuentran las imágenes, los contenedores y los volúmenes de Docker?

En un entorno Linux típico, puede encontrar la imagen de Docker y los datos del contenedor en:

/var/lib/docker/

Si su servidor se está quedando sin espacio, definitivamente debería echar un vistazo a este directorio.

Principalmente, todas las entidades relacionadas con Docker se encuentran en /var/lib/docker . Pero analicémoslo más específicamente, con la imagen y el contenedor de Alpine como ejemplo práctico.

Nota:Tenga en cuenta que esta información es solo para fines educativos. En realidad, nunca se recomienda manipular los directorios/archivos de Docker del sistema host. Los comandos docker y docker-compose deben ser siempre el método preferido. Los directorios/archivos de Docker ubicados físicamente deben ser accedidos o manipulados solo como último recurso durante situaciones de emergencia.

Ubicación de las imágenes de Docker

Siempre que use el docker pull comando o ejecutar docker-compose up -d para preparar el lanzamiento de aplicaciones, aquí es donde se almacenan las imágenes en un servidor Ubuntu:

/var/lib/docker/overlay2

Aquí, Overlay2 es el controlador de almacenamiento Docker predeterminado en Ubuntu. Puede confirmar esto ejecutando docker info comando y buscando el controlador de almacenamiento:

...
Storage Driver: overlay2
...

Si esto es diferente al suyo, entonces está usando un controlador de almacenamiento diferente para Docker. Del mismo modo, la ubicación del directorio se nombraría según el mismo controlador de almacenamiento. La disponibilidad del controlador de almacenamiento depende del soporte del kernel.

Ubicaciones de imágenes específicas

Si está buscando las ubicaciones de imágenes específicas, puede usar el comando de inspección en Docker para la imagen extraída.

Digamos, por ejemplo, que saqué la imagen alpina con docker pull alpine . Ejecute el siguiente comando para inspeccionarlo:

[email protected]:~$ docker inspect alpine

Una vez que ejecute el comando, notará tres campos dentro de Data subsección bajo GraphDriver :

...
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/merged",
                "UpperDir": "/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/diff",
                "WorkDir": "/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/work"
            },

...

Todas las rutas de directorio anteriores son las ubicaciones físicas de la imagen alpine en el sistema host. Tome nota del directorio con nombre hash grande en los tres campos anteriores:64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e .

En total, en realidad hay cuatro tipos de campos:

Dir inferior :Estas son las capas de solo lectura de un sistema de archivos superpuesto. Para docker, estas son las capas de imagen ensambladas en orden.

Dir superior :Esta es la capa de lectura y escritura de un sistema de archivos superpuesto. Para docker, ese es el equivalente de la capa específica del contenedor que contiene los cambios realizados por ese contenedor.

Dir.Trabajo :Este es un directorio requerido para la superposición, necesita un directorio vacío para uso interno.

DirCombinado :Este es el resultado del sistema de archivos de superposición. Docker efectivamente hace chroot en este directorio cuando ejecuta el contenedor.

Citado de esta referencia (bueno para leer más).

Ubicación de contenedores Docker

Al igual que las imágenes, los contenedores también se almacenan dentro del mismo directorio basado en el controlador de almacenamiento.

/var/lib/docker/overlay2

Ubicaciones específicas de contenedores

Si está buscando las ubicaciones de contenedores específicos, puede volver a utilizar inspect comando en el contenedor en ejecución.

Digamos, por ejemplo, he ejecutado el contenedor alpino con docker run -ti -d alpine . Cuando ejecutas docker ps , verás que se está ejecutando:

[email protected]:~$ docker ps
CONTAINER ID   IMAGE     COMMAND     CREATED         STATUS         PORTS     NAMES
cb341d6a28fa   alpine    "/bin/sh"   6 seconds ago   Up 5 seconds             confident_banzai

Aquí, el contenedor ha sido nombrado aleatoriamente confident_banzai . Así que vamos a inspeccionarlo:

[email protected]:~$ docker inspect confident_banzai

Una vez que ejecute el comando anterior, notará los cuatro campos mencionados anteriormente dentro de Data subsección bajo GraphDriver . Estos directorios son donde los datos del contenedor se encuentran físicamente en su sistema host:

...
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3-init/diff:/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/diff",
                "MergedDir": "/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3/merged",
                "UpperDir": "/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3/diff",
                "WorkDir": "/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3/work"
            },
            "Name": "overlay2"
        },
...

Referencia para lecturas adicionales.

Los directorios anteriores son las ubicaciones físicas de los datos de su contenedor dentro del sistema host. Recuerde el directorio grande con nombre hash:64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e desde las imágenes acoplables ¿sección? El directorio debajo se llama diff , como puedes ver en el LowerDir sección después de : , que ahora es un punto de montaje para el contenedor, obtenido de la imagen base UpperDir !

Estos directorios seguirán estando disponibles incluso después de detener el contenedor. Entonces, la ruta completa que es común entre la imagen (MergedDir , UpperDir y WorkDir ) y el contenedor (LowerDir punto de montaje) es:

/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/

El propósito de la imagen es contiguo después de asignarse al contenedor hasta el LowerDir nivel, por lo que los cuatro campos se asignan y se basan en un directorio diferente (con un nuevo hash) debido a la naturaleza dinámica de este último, que se convierte en:

/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3/
Nota:¡El proceso de montaje del directorio desde la imagen base hasta el contenedor es muy similar a cómo monta los volúmenes en Docker!

Ubicación de los volúmenes de Docker

A diferencia de las imágenes y los contenedores de Docker, las ubicaciones físicas de los volúmenes son bastante sencillas. Los volúmenes se encuentran en:

/var/lib/docker/volumes/

Ubicaciones de volúmenes específicos

En este caso, hay dos tipos principalmente. Uno son los volúmenes normales de Docker y el otro son los montajes de enlace.

Volúmenes de Docker

Si está buscando las ubicaciones de volúmenes específicos, puede usar docker volume ls Comando primero y verifique el nombre o ID del volumen.

Por ejemplo, ejecuté el contenedor alpino con el siguiente comando con un volumen:

[email protected]:~$ docker run -ti -d --name alpine-container -v test-data:/var/lib/app/content alpine

Ahora, un volumen llamado test-data se creará automáticamente. Ahora vamos a crear un archivo llamado test.md dentro de esta ubicación:

[email protected]:~$ docker exec alpine-container sh -c "touch /var/lib/app/content/test.md"

Verifique que el archivo haya sido creado:

[email protected]:~$ docker exec -ti alpine-container sh
/ # ls /var/lib/app/content/
test.md
/ # exit

Cuando ejecutas docker volume ls , el volumen llamado test-data estaría en la lista:

[email protected]:~$ docker volume ls
DRIVER    VOLUME NAME
local     d502589845f7ae7775474bc01d8295d9492a6c26db2ee2c941c27f3cac4449d1
local     e71ee3960cfef0a133d323d146a1382f3e25856480a727c037b5c81b5022cb1b
local     test-data

Finalmente, puede confirmar la ubicación real del archivo en su sistema host:

[email protected]:~$ sudo ls -l /var/lib/docker/volumes/test-data/_data
total 0
-rw-r--r-- 1 root root 0 Oct  6 23:20 test.md

Por lo tanto, la ruta del volumen montado siempre se encuentra dentro de un directorio llamado _data dentro del directorio de volumen respectivo.

También puede verificar dichas rutas a la manera de Docker usando docker volume inspect comando seguido del nombre o ID del volumen y buscando en el Mountpoint parámetro dentro de la salida:

[email protected]:~$ docker volume inspect test-data
[
    {
        "CreatedAt": "2021-10-06T23:20:20+05:30",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/test-data/_data",
        "Name": "test-data",
        "Options": null,
        "Scope": "local"
    }
]

Monturas enlazadas

Las ubicaciones de los montajes de enlace son bastante obvias e incluso más sencillas porque monta el volumen directamente desde una ubicación del lado del host:

[email protected]:~$ mkdir /home/avimanyu/test-data
[email protected]:~$ docker run -ti -d --name alpine-container -v /home/avimanyu/test-data:/var/lib/app/content alpine

En este caso, un volumen montado en enlace llamado test-data estará disponible en el lado del contenedor como /var/lib/app/content .

Resumen

En este breve tutorial, adopté un enfoque genérico basado en Linux para mostrar las ubicaciones físicas de las imágenes, los contenedores y los volúmenes de Docker que residen en su servidor Linux (Ubuntu 20.04 en este caso) a nivel de host.

Si desea compartir algún comentario, comentario o sugerencia sobre este enfoque, deje sus opiniones en la sección de comentarios a continuación.


Docker
  1. ¿Cuál es la diferencia entre un contenedor de Linux y una imagen?

  2. Cómo crear, enumerar y eliminar contenedores Docker en Linux

  3. ¿Qué es Docker (y los contenedores de Linux?)

  4. Cómo usar imágenes, contenedores y archivos Docker en profundidad

  5. La diferencia entre CMD y ENTRYPOINT en Docker Images

¿Dónde se almacenan las imágenes y los contenedores de Docker en el host?

Cómo obtener la dirección IP de un contenedor Docker desde el host

Cómo usar Docker Cp para copiar archivos entre el host y los contenedores

Cómo crear volúmenes Docker en Windows de forma fácil

Cómo verificar el uso de espacio en disco para imágenes, contenedores y volúmenes de Docker

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