Cambiar la ruta raíz del entorno de Docker

Escrito por el , actualizado el .
gnu-linux planeta-codigo
Enlace permanente Comentarios

Cambiando la ruta raíz del entorno de ejecución de docker, dónde guarda las imágenes de los contenedores, los datos de los contenedores y otros metadatos, podemos almacenar esta información en un disco duro externo o memoria USB.

Docker

Por defecto el directorio donde se guardan las imágenes y los contenedores junto con otros metadatos de Docker es /var/lib/docker. En mi caso hace un tiempo me compre un disco de estado sólido Samsung 840 EVO de 250 GiB y comenté en el artículo del anterior enlace. Aunque probablemente un disco SSD sea suficientemente fiable como para que antes de que falle cambiémos de ordenador porque ya es antiguo, yo trato de evitar hacer muchas escrituras al disco. Al trabajar con Docker ya sea descargando imágenes, construyendo imágenes propias con archivos Dockerfile y al arrancar contenedores cuyos procesos escriben en disco prefiero externalizar esas escrituras en una unidad USB ya sea un pendrive o un disco duro. En este artículo comentaré como modificar Docker para que las imágenes y los contenedores estén almacenados en una memoria USB o en otra localización de la por defecto.

En Arch Linux el proceso de docker se arranca con un servicio de systemd:

1
2
$ sudo systemctl start docker.service

docker-start.sh

En la definición del servicio de docker se establecen los parámetros de inicio del demonio de docker y deberemos cambiarlo para cambiar la localización de las imágenes y contenedores. En la información de ayuda del comando de docker podemos ver que si queremos cambiar la localización por defecto de las imágenes y contenedores de docker debemos emplear la opción -g “/var/lib/docker”.

1
2
3
4
5
6
7
8
$ docker --help

Usage: docker [OPTIONS] COMMAND [arg...]

A self-sufficient runtime for linux containers.
...
-g, --graph="/var/lib/docker"                   Path to use as the root of the Docker runtime
...
docker-help.sh

En Arch Linux el servicio de systemd de docker se guarda en /usr/lib/systemd/system/docker.service. Modificando el parámetro ExecStart de la sección [Service] para añadir el parámetro -g nos quedaría algo como:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target docker.socket
Requires=docker.socket

[Service]
ExecStart=/usr/bin/docker -d -H fd:// -g /run/media/picodotdev/BMOVE_ROJO/docker/root
MountFlags=slave
LimitNOFILE=1048576
LimitNPROC=1048576

[Install]
WantedBy=multi-user.target
docker.service

Iniciando ahora el servicio de Docker veremos que en el directorio que hayamos elegido se crean los metadatos y si hacemos un pull de una imagen se guardará en esta localización.

Directorio raíz de docker

Directorio raíz de docker

Cada vez que se actualice el paquete de docker el archivo del servicio de systemd se sobrescribirá y perderemos la configuración, de modo que en cada actualización de docker deberemos realizar de nuevo la modificación.

Este artículo es uno de otros que he publicado, en otros artículos he escrito sobre otras cosas relacionadas con docker.


Comparte el artículo: