¿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.
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.