El pasado 31 de agosto tuvo lugar el Docker Meetup #42 en el que se explicaron ejemplos de como usar las novedades de la versión 1.12. Además de hablar de la nueva integración de Docker y swarm que ya comentamos en el post referente a este asunto o sobre los nuevos tipos de redes que se pueden usar con Docker.
Aunque todo eso es muy útil, en este mismo Meetup se dieron una serie de pequeños trucos para hacer más fácil el uso del cli de Docker.
El primer tip es muy simple. Cuando listamos las imágenes locales que tenemos en nuestro equipo usamos:
>_ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
lojzik/letsencrypt latest 8e17fad1541c 10 days ago 447 MB
phpmyadmin/phpmyadmin latest 62f0b14257d3 4 weeks ago 57.03 MB
debian latest 1b01529cc499 5 weeks ago 125.1 MB
hub.dondocker.com/canonale/ienda latest b390c6676ebd 3 months ago 1.113 MB
tvial/docker-mailserver latest 151aa7b573b9 3 months ago 380.9 MB
python latest 67b5207e5d3b 4 months ago 671.1 MB
hub.dondocker.com/dondocker/redis latest 9ee2e2d136af 4 months ago 15.95 MB
hub.dondocker.com/canonale/xxxxx latest 47bcc53f74dc 5 months ago 1.113 MB
redis alpine 50405530a7e5 6 months ago 15.95 MB
dondocker/back-end-python3-dev 0.0 977594ac7bed 7 months ago 787.9 MB
dondocker/back-end-python3-dev latest 977594ac7bed 7 months ago 787.9 MB
dondocker/back-end-python2-dev 0.0 86cfce7d6716 7 months ago 772.9 MB
dondocker/back-end-python2-dev latest 86cfce7d6716 7 months ago 772.9 MB
Nos lista la imágenes descargadas, pero normalmente, cuando construimos imágenes o cuando hacemos actualizaciones (docker pull imagen
) van quedando capas sueltas que no salen en este listado y que nos pueden ocupar mucho espacio en algunas ocasiones. Si usamos el modificador --all
veremos todas
esas imágenes:
>_ docker images --all
REPOSITORY TAG IMAGE ID CREATED SIZE
ghost latest dd4e3a04f0f3 11 weeks ago 376.9 MB
ubuntu 14.04 8f1bd21bd25c 3 months ago 188 MB
mysql latest 2fd136002c22 3 months ago 378.4 MB
<none> <none> 091e85bf81ef 3 months ago 1.113 MB
<none> <none> 133e51bae8d8 3 months ago 1.113 MB
tvial/docker-mailserver latest 151aa7b573b9 3 months ago 380.9 MB
<none> <none> 3f5eb0656a63 4 months ago 671.1 MB
<none> <none> 84ab119c9ef0 4 months ago 15.95 MB
...
hub.dondocker.com/dondocker/redis latest 9ee2e2d136af 4 months ago 15.95 MB
<none> <none> 358bc2a8a021 4 months ago 15.95 MB
<none> <none> 783dd5eaea02 4 months ago 15.95 MB
<none> <none> 7d4372227f67 5 months ago 607.6 MB
...
dondocker/back-end-python3-dev 0.0 977594ac7bed 7 months ago 787.9 MB
dondocker/back-end-python3-dev latest 977594ac7bed 7 months ago 787.9 MB
Otro sencillo truco es que para hacer una inspección de un contenedor no es necesario poner su ID entero o su nombre, por ejemplo:
>_ docker ps
434499296d86 jwilder/nginx-proxy:latest "/app/docker-entrypoi" 04web_nginxproxy_1
06af52e60ee7 busybox "/bin/true" ghost_data
>_ docker inspect 43
[
{
"Id": "434499296d86342b0092b7716270593391363703bf73f435a3bf4d5f24b65e60",
"Created": "2016-08-24T14:56:42.498154511Z",
"Path": "/app/docker-entrypoint.sh",
....
Alguna vez has visto todos los volumenes que tienes creados en tu equipo. Usando el comando docker volume ls
nos devolverá un listado casi interminable con unos ID típicos que no se sabe a que corresponde:
>_ docker volume ls
DRIVER VOLUME NAME
local 00116672bd5eda338a6e1cbb286937f4e9977d3bef6210faba9271607e3ff535
local 00722535c190913053a117545461bfdb23c039b9c75a6a3c2ee5bb60459bd8b2
local 00a32b51f1430f95a71e81ca4296f8ff1b02fa50582be721077780b93a802a3b
local 00c88ce80bbb6797d034e4819ca4b8af8f8975922092870980790124cc7e79ed
local 00c9cc18f5c19d17731e1b400f2a0d6f1dea45b99fe7aa4542eef4f4953e100d
...
local ffe447104ac758ba81de36289a9602e8a0e147ad057cf2b83cec33119ec6d80e
Si quieres que estos volumenes tengan nombres que luego sepas para que se están usando el truco es el siguiente, al crear un contenedor etiqueta el volumen de esta manera:
>_ docker run --rm -v mysqldemo:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=22222 mysql:latest
...
>_ docker volume ls
local 00116672bd5eda338a6e1cbb286937f4e9977d3bef6210faba9271607e3ff535
local 00722535c190913053a117545461bfdb23c039b9c75a6a3c2ee5bb60459bd8b2
local 00a32b51f1430f95a71e81ca4296f8ff1b02fa50582be721077780b93a802a3b
local 00c88ce80bbb6797d034e4819ca4b8af8f8975922092870980790124cc7e79ed
local 00c9cc18f5c19d17731e1b400f2a0d6f1dea45b99fe7aa4542eef4f4953e100d
...
local ffe447104ac758ba81de36289a9602e8a0e147ad057cf2b83cec33119ec6d80e
local mysqldemo
Así tendremos identificado el volumen en todo momento. Y si lo tienes que eliminar lo tendrás bastante más facil:
>_ docker volume rm mysqldemo
Una de las recomendaciones que se dan, dado el grado de facilidad de uso, es la elección de imágenes de tipo onbuild para desarrollo. Usar imágenes como node:onbuild resulta sencillo para probar o ejecutar nuestra aplicación en desarrollo. En es caso concreto de node tendríamos:
>_ ls -l
total 64K
drwxrwxr-x 44 nobody nobody 4,0K mar 16 20:26 bower_components
-rw-rw-r-- 1 nobody nobody 1,8K mar 22 18:06 bower.json
drwxrwxr-x 2 nobody nobody 4,0K dic 8 2015 gulp
-rw-rw-r-- 1 nobody nobody 232 dic 8 2015 gulpfile.js
-rw-rw-r-- 1 nobody nobody 1,5K dic 8 2015 package.json
drwxrwxr-x 4 nobody nobody 4,0K jun 15 20:36 src
>_ docker run --rm -p 8080:8080 node:onbuild
.....
La nueva versión de docker-compose dispone de opciones tanto para crear servicios como para gestionar su red. Si queremos eliminar todos lo creado por el docker-compose, redes y contenedore, usaremos el modificador down
:
>_ docker-compose down
Removing myapp_1 ... done
Removing mysql_1 ... done
Removing network mynetwork
La opción down
tiene un modificador que permite limpiar del todo lo que genera el compose con la siguiente orden:
>_ docker-compose down -v --rmi local
Esta orden borra también los volúmenes creados y las imágenes que no tienen etiqueta. Con el modificador --rmi all
borraríamos todas las que usamos.
Alias que te facilitarán la vida.
En este aspecto, en el último Meetup se explicaron unos cuantos alias para usar con la consola y así escribir menos y más rápido. Seguramente ya uses más de uno de estos ejemplos o muy similares pero siempre es útil tenerlos todos juntos.
Eliminar todos los contenedores de la máquina
>_ alias drma='docker rm $(docker ps -aq)'
Eliminar todas las imágenes sin etiquetar que suelen crearse cuando falla una creación
>_ alias drmi='docker rmi $(docker images -q -f "dangling=true")'
Eliminar todas las imágenes
>_ alias drmai='docker rmi $(docker images -q)'
Ejecutar un comando en una máquina
>_ alias drit='docker exec -ti'
>_ drit debian bash
Algunas de las salidas de los comandos pueden ser formateadas utilizando plantillas Go es el caso de los comando ps
e images
. Esto es útil porque algunas veces al listar, por ejemplo, los contenedores en funcionamiento se llena la pantalla y no vemos las cosas claras. Es por ello que unos alias adecuados nos darán solo la información adecuada y concisa.
Listado de imágenes, datos básicos
>_ docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"
IMAGE ID REPOSITORY TAG
8e17fad1541c lojzik/letsencrypt latest
1b01529cc499 debian latest
b9debdc64b60 jwilder/nginx-proxy latest
>_ alias dit='docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"'
Hasta aquí el post sobre pequeños trucos a la hora de usar Docker. Muchos de ellos seguro que ya los usas y algunos serán nuevos. Si quieres ver el Docker Meetup #42 completo. Además de estos trucos hablan de como sacar el máximo partido a la nueva versión.
Comentarios recientes