¿Dónde se almacenan las imágenes de Docker? Explicación de las rutas de contenedores de Docker

Docker ha sido ampliamente adoptado y se utiliza para ejecutar y escalar aplicaciones en producción. Además, se puede usar para iniciar aplicaciones rápidamente ejecutando un solo comando de Docker.

Las empresas también están invirtiendo cada vez más esfuerzos para mejorar el desarrollo de contenedores Docker locales y remotos, lo que también tiene muchas ventajas.

Puede obtener la información básica sobre su configuración de Docker ejecutando:

$ docker info ... Storage Driver: overlay2 Docker Root Dir: /var/lib/docker ... 

La salida contiene información sobre su controlador de almacenamiento y su directorio raíz de Docker.

La ubicación de almacenamiento de las imágenes y los contenedores de Docker

Un contenedor de Docker consta de configuraciones de red, volúmenes e imágenes. La ubicación de los archivos de Docker depende de su sistema operativo. A continuación, se muestra una descripción general de los sistemas operativos más utilizados:

  • Ubuntu: /var/lib/docker/
  • Fedora: /var/lib/docker/
  • Debian: /var/lib/docker/
  • Ventanas: C:\ProgramData\DockerDesktop
  • Mac OS: ~/Library/Containers/com.docker.docker/Data/vms/0/

En macOS y Windows, Docker ejecuta contenedores de Linux en un entorno virtual. Por lo tanto, hay algunas cosas adicionales que debe saber.

Docker para Mac

Docker no es compatible de forma nativa con macOS, por lo que Hyperkit se usa para ejecutar una imagen virtual. Sus datos de imagen virtual se encuentran en:  

~/Library/Containers/com.docker.docker/Data/vms/0

Dentro de la imagen virtual, la ruta es la ruta de Docker predeterminada /var/lib/docker.

Puede investigar su directorio raíz de Docker creando un shell en el entorno virtual:

$ screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty 

Puede cerrar esta sesión presionando Ctrl + a , seguido de k y y .

Docker para Windows

En Windows, Docker está un poco fraccionado. Hay contenedores nativos de Windows que funcionan de manera similar a los contenedores de Linux. Los contenedores de Linux se ejecutan en un entorno virtual mínimo basado en Hyper-V.

La configuración y la imagen virtual para ejecutar imágenes de Linux se guardan en la carpeta raíz predeterminada de Docker.

C:\ProgramData\DockerDesktop

Si inspecciona imágenes regulares, obtendrá rutas de linux como:

$ docker inspect nginx ... "UpperDir": "/var/lib/docker/overlay2/585...9eb/diff" ... 

Puede conectarse a la imagen virtual mediante:

docker run -it --privileged --pid=host debian nsenter -t 1 -m -u -i sh

Allí, puede ir a la ubicación referenciada:

$ cd /var/lib/docker/overlay2/585...9eb/ $ ls -lah drwx------ 4 root root 4.0K Feb 6 06:56 . drwx------ 13 root root 4.0K Feb 6 09:17 .. drwxr-xr-x 3 root root 4.0K Feb 6 06:56 diff -rw-r--r-- 1 root root 26 Feb 6 06:56 link -rw-r--r-- 1 root root 57 Feb 6 06:56 lower drwx------ 2 root root 4.0K Feb 6 06:56 work

La estructura interna de la carpeta raíz de Docker

En su interior /var/lib/dockerse almacena diferente información. Por ejemplo, datos para contenedores, volúmenes, compilaciones, redes y clústeres.

$ ls -la /var/lib/docker total 152 drwx--x--x 15 root root 4096 Feb 1 13:09 . drwxr-xr-x 13 root root 4096 Aug 1 2019 .. drwx------ 2 root root 4096 May 20 2019 builder drwx------ 4 root root 4096 May 20 2019 buildkit drwx------ 3 root root 4096 May 20 2019 containerd drwx------ 2 root root 12288 Feb 3 19:35 containers drwx------ 3 root root 4096 May 20 2019 image drwxr-x--- 3 root root 4096 May 20 2019 network drwx------ 6 root root 77824 Feb 3 19:37 overlay2 drwx------ 4 root root 4096 May 20 2019 plugins drwx------ 2 root root 4096 Feb 1 13:09 runtimes drwx------ 2 root root 4096 May 20 2019 swarm drwx------ 2 root root 4096 Feb 3 19:37 tmp drwx------ 2 root root 4096 May 20 2019 trust drwx------ 15 root root 12288 Feb 3 19:35 volumes 

Imágenes de docker

Los contenidos más pesados ​​suelen ser imágenes. Si usa la superposición del controlador de almacenamiento predeterminado2, las imágenes de Docker se almacenan en formato /var/lib/docker/overlay2. Allí, puede encontrar diferentes archivos que representan capas de solo lectura de una imagen de Docker y una capa encima que contiene sus cambios.

Exploremos el contenido usando un ejemplo:

$ docker image pull nginx $ docker image inspect nginx [ { "Id": "sha256:207...6e1", "RepoTags": [ "nginx:latest" ], "RepoDigests": [ "nginx@sha256:ad5...c6f" ], "Parent": "", ... "Architecture": "amd64", "Os": "linux", "Size": 126698063, "VirtualSize": 126698063, "GraphDriver": { "Data": { "LowerDir": "/var/lib/docker/overlay2/585...9eb/diff: /var/lib/docker/overlay2/585...9eb/diff", "MergedDir": "/var/lib/docker/overlay2/585...9eb/merged", "UpperDir": "/var/lib/docker/overlay2/585...9eb/diff", "WorkDir": "/var/lib/docker/overlay2/585...9eb/work" }, ... 

El LowerDir contiene las capas de sólo lectura de una imagen. La capa de lectura y escritura que representa los cambios es parte de UpperDir . En mi caso, la carpeta NGINX UpperDir contiene los archivos de registro:

$ ls -la /var/lib/docker/overlay2/585...9eb/diff total 8 drwxr-xr-x 2 root root 4096 Feb 2 08:06 . drwxr-xr-x 3 root root 4096 Feb 2 08:06 .. lrwxrwxrwx 1 root root 11 Feb 2 08:06 access.log -> /dev/stdout lrwxrwxrwx 1 root root 11 Feb 2 08:06 error.log -> /dev/stderr

El MergedDir representa el resultado de la UpperDir y LowerDir que se utiliza por acoplable para ejecutar el recipiente. El WorkDir es un directorio interno para overlay2 y debe estar vacío.

Volúmenes de Docker

Es posible agregar un almacén persistente a los contenedores para mantener los datos durante más tiempo del que existe el contenedor o para compartir el volumen con el host o con otros contenedores. Un contenedor se puede iniciar con un volumen usando la opción -v :

$ docker run --name nginx_container -v /var/log nginx

Podemos obtener información sobre la ubicación del volumen conectado mediante:

$ docker inspect nginx_container ... "Mounts": [ { "Type": "volume", "Name": "1e4...d9c", "Source": "/var/lib/docker/volumes/1e4...d9c/_data", "Destination": "/var/log", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ], ... 

El directorio al que se hace referencia contiene archivos de la ubicación /var/logdel contenedor NGINX.

$ ls -lah /var/lib/docker/volumes/1e4...d9c/_data total 88 drwxr-xr-x 4 root root 4.0K Feb 3 21:02 . drwxr-xr-x 3 root root 4.0K Feb 3 21:02 .. drwxr-xr-x 2 root root 4.0K Feb 3 21:02 apt -rw-rw---- 1 root 43 0 Jan 30 00:00 btmp -rw-r--r-- 1 root root 34.7K Feb 2 08:06 dpkg.log -rw-r--r-- 1 root root 3.2K Feb 2 08:06 faillog -rw-rw-r-- 1 root 43 29.1K Feb 2 08:06 lastlog drwxr-xr-x 2 root root 4.0K Feb 3 21:02 nginx -rw-rw-r-- 1 root 43 0 Jan 30 00:00 w 

Limpiar el espacio utilizado por Docker

Se recomienda utilizar el comando Docker para limpiar los contenedores no utilizados. El contenedor, las redes, las imágenes y la caché de compilación se pueden limpiar ejecutando:

$ docker system prune -a

Además, también puede eliminar volúmenes no utilizados ejecutando:

$ docker volumes prune

Resumen

Docker es una parte importante de los entornos y las herramientas de muchas personas. A veces, Docker se siente un poco mágico al resolver problemas de una manera muy inteligente sin decirle al usuario cómo se hacen las cosas detrás de escena. Aún así, Docker es una herramienta normal que almacena sus partes pesadas en ubicaciones que se pueden abrir y cambiar.

A veces, el almacenamiento puede llenarse rápidamente. Por lo tanto, es útil inspeccionar su carpeta raíz, pero no se recomienda eliminar o cambiar ningún archivo manualmente. En cambio, los comandos de poda se pueden utilizar para liberar espacio en disco.

Espero que hayas disfrutado el artículo. Si te gusta y sientes la necesidad de un aplauso, sígueme en Twitter.

Soy cofundador de nuestra revolucionaria plataforma de viajes llamada Explore The World. Somos una empresa joven ubicada en Dresde, Alemania, y nos dirigiremos primero al mercado alemán. Comuníquese conmigo si tiene comentarios y preguntas sobre cualquier tema.

Feliz Docker explorando :)

Referencias

  • Docker storagediver documentación

    //docs.docker.com/storage/storagedriver/

  • Sistema de archivos de superposición de documentación

    //www.kernel.org/doc/Documentation/filesystems/overlayfs.txt