Esta publicación de blog proporciona una descripción general inicial de los comandos de Docker que puede utilizar para la administración de su sistema Docker.
Dichas tareas de administración incluyen enumerar y eliminar imágenes, contenedores y volúmenes.
¿Cuánto espacio se necesita realmente para las imágenes o para la capa contenedora (es decir, para los datos de un contenedor que se desvía de la imagen original)? Esta pregunta se responde con los comandos Docker Images y Docker ps -a -s.
Docker Images devuelve una lista de todas las imágenes descargadas o personalizadas, incluida la información sobre el tamaño:
docker images
REPOSITORY TAG ... CREATED SIZE SIZE
wordpress latest 17 hours ago 550MB
mariadb latest 7 days ago 405MB
phpmyadmin/phpmyadmin latest 2 months ago 477MB
...
De forma predeterminada, Docker ps enumera solo los contenedores en ejecución. La opción -a extiende la salida a todos los contenedores que alguna vez se hayan configurado. -s agrega la columna TAMAÑO. Indica cuánto espacio ocupan esos archivos que han sido modificados en comparación con la imagen. Siempre que la mayoría de los datos mutables se almacenen en un volumen, el espacio adicional necesario suele ser mínimo. Sin embargo, cuando hay cambios, el espacio real requerido en el sistema de archivos local suele ser notablemente mayor de lo que sugiere Docker PS. Esto se debe a la sobrecarga del sistema de archivos cuando se almacenan muchos archivos pequeños.
La información entre paréntesis (virtual) se refiere al tamaño total del contenedor, incluidas las imágenes de solo lectura. Estos datos son virtuales en el sentido de que varios contenedores pueden compartir imágenes comunes, por así decirlo.
docker ps -a -s
CONTAINER ID IMAGE ... SIZE
2bf9e954b4b7 wordpress 20.1MB (virtual 571MB)
3af937080228 phpmyadmin/... 70B (virtual 477MB)
ac98aca37f7a mariadb 2B (virtual 405MB)
...
docker rm
docker rm ac98aca37f7a
Precaución: docker rm tiene muchas similitudes con el comando rm clásico en Linux: elimina sin confirmación y sin la opción de deshacer la operación.
El siguiente comando primero usa ps para generar una lista de todos los ID de contenedores derivados de la imagen, ubuntu. Luego, esta lista se pasa a Docker rm para eliminar todos los contenedores. Entonces, si ha experimentado con Docker Run Ubuntu por un tiempo, puede eliminar todos los contenedores creados en esta ocasión. Tenga en cuenta que este comando solo funciona en macOS y Linux, no en Windows. La concatenación de dos comandos presentada aquí supone que se utiliza un shell como bash o zsh, como es el caso de forma predeterminada en Linux o macOS. En Windows, el comando también funciona, siempre que utilice PowerShell.
docker rm $(docker ps -a -q -f ancestor=ubuntu)
¡El siguiente comando es aún más radical ya que elimina todos los contenedores existentes!
docker rm $(docker ps -aq)
docker rmi imagename elimina la imagen especificada. Esto sólo es posible si no hay contenedores derivados de la imagen. Los siguientes comandos primero eliminan todos los contenedores de helloworld y luego la imagen de hello-world:
docker rm $(docker ps -a -q -f ancestor=hello-world)
docker rmi hello-world
Tenga en cuenta que Docker rmi solo se ejecuta localmente. Si has subido tu propia imagen a Estibador Hub, la imagen permanecerá allí. Puede eliminarlo en la GUI web de https://hub.docker.comsi necesario.
Los volúmenes se almacenan por separado de los contenedores y las imágenes en su propio directorio, por ejemplo, en /var/lib/docker/volumenes en Linux. Cuando elimina contenedores, Docker generalmente no toca ningún volumen. Sin embargo, puede determinar una lista con los nombres o ID de todos los volúmenes para los cuales el contenedor asociado ya no existe, de la siguiente manera:
docker volume ls -q -f dangling=true
4df85efbf1240b7429f7bf554e2ead52b90a1934875d57773c1c80c405d64a
6eec952744a21b55c71b8e6dc28da822bf3c8147ed54351dcb88c30094eb1b
...
El tamaño de los volúmenes se puede determinar pasando el resultado anterior a du. Sin embargo, esto sólo funciona de esta manera en un host Linux. En Windows y macOS, los archivos Docker se almacenan en un sistema de archivos separado dentro de una máquina virtual, al que no se puede acceder directamente desde el exterior.
du -h --max 0 \
/var/lib/docker/volumes/$(docker volume ls -q -f dangling=true)
Puede eliminar todos los volúmenes huérfanos con el siguiente comando si es necesario. La consulta que aparecería se puede suprimir usando -f.
docker volume prune
WARNING! This will remove all volumes not used by at least
one container. Are you sure you want to continue? [y/N] y
Docker system df proporciona una descripción general compacta de los requisitos de espacio de todas las imágenes, contenedores, volúmenes y la caché de compilación:
docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 18 11 10.72GB 1.854GB (17%)
Containers 33 4 496MB 495.9MB (99%)
Local Volumes 2 1 169MB 119.8MB (70%)
Build Cache 0 0 0B 0B
Si también pasa la opción -v, el comando enumerará todas las imágenes, contenedores, volúmenes, etc.
En lugar de buscar imágenes, contenedores y volúmenes y eliminarlos uno por uno, puede utilizar la poda del sistema Docker para ayudarle con sus tareas de limpieza. Este comando elimina todos los contenedores que no se están ejecutando actualmente y todas las imágenes que no son necesarias para otras imágenes (Imágenes de colgando).
La limpieza a gran escala se vuelve aún más intensiva con opciones adicionales:
docker system prune -a --volumes
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all volumes not used by at least one container
- all images without at least one container associated to them
- all build cache
Are you sure you want to continue? [y/N]
Nota del editor: esta publicación ha sido adaptada de una sección del libro. Docker: Guía práctica para desarrolladores y equipos DevOps por Bernd Öggl y Michael Kofler.
Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010
Paseo de la Reforma 26
Colonia Juárez, Cuauhtémoc
Ciudad de México 06600
Real Cariari
Autopista General Cañas,
San José, SJ 40104
Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073