672 - Docker lo puede llenar todo

672 - Docker lo puede llenar todo

como resolver cuando #docker llena una unidad o una #particion en #linux y como levantar un #registry auto alojado y utilizarlo de forma sencilla

1:25
-3:15

En los últimos meses he tenido diferentes avisos de que se me había llenado la partición root o que estaba a punto de llenarse. Todo depende del tiempo que le esté dedicando a Docker en cuanto a lo que a hacer nuevas imágenes se refiere y otras tareas relacionadas con Docker. La cuestión es que esta es una de esas cosas que sabes como resolver, pero que nunca tienes tiempo de hacerlo. Siempre hay alguna tarea que resulta mas importante o interesante o ambas cosas. Sin embargo, el otro día, decidí ponerme manos a la obra y resolver el problema. Por dos razones, la primera por simple hartazgo, y la segunda porque quería subir imágenes a mi registry y quería dejarlo todo limipito. No hay como marcarse nuevas metas para hacer cosas que llevas tiempo posponiendo. Así, en este episodio te cuento como he resuelto el problema y como he recuperado mi registry.

Docker lo puede llenar todo

Sobre las recomendaciones

Encontrarás en Internet cientos de recomendaciones sobre el tamaño de las particiones de Linux. Y si bien, en general las recomendaciones son eso, en algunos casos, te puedes encontrar gurus, que consideren esas recomendaciones obligaciones a cumplir, y nada mas lejos de la realidad.

En concreto, y en el caso de Docker, trata sobre el tamaño de la partición de /var. Si estás utilizando Docker, olvidate de estas recomendaciones y piensa distinto. En concreto deberías crear una partición específica para Docker, un /var/lib/docker, suficientemente generoso. Todo dependiendo de lo que vayas a hacer.

Para que te hagas una idea, es fácil, que con la gestión de Docker que hago actualmente me vaya a los 30 GB en ese directorio. Y si, yo no lo tengo en una partición, y esto me ha obligado a mover el directorio.

Crear una partición

Como te decía, en los últimos meses he llenado en varias ocasiones el directorio root, porque a pesar de mis recomendaciones, no tengo separado ese directorio en una partición específica.

De esta forma, cada cierto tiempo, me aparece un odioso mensaje que me dice que me estoy quedando sin espacio en root, con lo absolutamente peligroso que es eso. Como puede imaginar, la primera ocasión que me sucedió me entró un auténtico ataque de pánico. Actualmente, se ha convertido en algo habitual, y lo considero algo mas.

La cuestión es que resolver el problema es tan sencillo como ejecutar un comando,

docker system prune --all

Aunque como te imaginas esto no es mas que un remedio temporal, muy temporal, en menos de lo que te imaginas te encontrarás en la misma situación en la que te encontrabas antes de ejecutar el comando.

Pero la verdad, es que me he cansado, de que de tarde en tarde, me aparezca el dichoso mensaje indicándome que me estoy quedando sin mensaje o de que ya me he quedado sin mensaje, así que decidí ponerle solución. Y no crear una partición específica como debería hacer, sino que me he ido a lo fácil, a cambiar el directorio raíz donde se encuentra todos los datos de Docker.

Cambiando el directorio raíz de Docker

docker info | grep 'Docker Root Dir

Edita el archivo /etc/docker/daemon.json y añade lo siguiente,

{  
  "data-root": "/data/docker/var/lib"  
}

Por supuesto cambia /data/docker/var/lib por el directorio de tu elección. Este es la opción por la que yo he optado.

El siguiente es parar Docker y asegurarte que definitivamente está parado. Tan sencillo como ejecutar las dos siguientes instrucciones,

sudo systemctl stop docker
ps aux | grep -i docker | grep -v grep

Ahora simplemente copia toda la información del antiguo al nuevo,

sudo rsync -axPS /var/lib/docker/ /data/docker/var/lib

De nuevo, recuerda cambiar /data/docker/var/lib por el directorio que tu prefieras.

Reinicia Docker, verifica que se ha iniciado correctamente y que todos tus contenedores están funcionando como esperas. Para esto ejecuta los siguientes comandos,

sudo systemctl start docker
docker info | grep 'Docker Root Dir
docker ps

Y como paso final simplemente te queda eliminar el directorio que has dejado de utilizar como datos de Docker, y esto lo puedes hacer con,

sudo rm -r /var/lib/docker

Trabajando con otros registries

¿Que es un registry?

Un registry es un servicio que almacena imágenes de Docker. Un registry puede ser público o privado. Docker Hub es un ejemplo de un registry público, que cualquiera puede utilizar. Docker Hub es el registry por defecto para Docker.

Un poquito de historia

En general suelo trabajar con Docker Hub como registry por defecto. De echo es el que utilizo en la mayoría de los casos. Pero en ocasiones, me he encontrado con la necesidad de utilizar otros registries. En concreto, en el caso de que quiera compartir imágenes con otros usuarios, o simplemente, porque quiero tener un registry privado.

Esto es precisamente lo que me sucedió hace poco y lo que generó la necesidad de recuperar mi registry, y ponerlo en funcionamiento.

Mi propio registry

En el episodio 573 que titulé Por fin tengo mi propio Docker Registry, te conté como había montado mi propio Registry, pero con interfaz gráfica. La cuestión, es que había visto la opción de tener un registry directamente, sin interfaz gráfica, pero consideraba que era imprescindible tener una interfaz gráfica para gestionar las imágenes.

La cuestión es que por terminal lo puedes hacer perfectamente, pero, me daba mucha pereza, tener que conectarme al VPS, mirar las imágenes, y descartar aquellas que no necesitaba. Así, que finalmente opté por levantar ese registry con interfaz gráfica y ponerlo de nuevo a funcionar.

La operativa

docker login registry.tuservidor.es --username TuUsuario
docker push registry.tuservidor.es/TuUsuario/imagen
docker pull registry.tuservidor.es/TuUsuario/imagen

El nombre TuUsuario/imagen, es totalmente opcional. Directamente lo puedes poner como el nombre de la imagen. Esto es algo que depende única y exclusivamente de ti.

De la misma forma en tus docker-compose.yml tienes que hacer exactamente lo mismo. Por ejemplo,

services:
  tuservicio:
    image: registry.tuservidor.es/TuUsuario/imagen

Más información,

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *