He tardado mucho en hacer esta entrada por varias razones (una de ellas por los putos taringueros), pero más vale tarde que nunca, ¿no? Primero hicimos una Introducción a Docker donde explicamos todo sobre esta herramienta y luego explicamos como instalarlo en Debian. Ahora, el siguiente paso es explicar los comandos básicos para administrar Docker. ¡Al tema!

Docker a medida que fue evolucionando (y sigue en ello) fue añadiendo comandos para facilitarnos ciertas tareas. Por lo que a medida que vayan saliendo versiones nuevas es posible que algunos comandos no funcionen porque es posible que se agrupen ciertas funcionalidades dentro de otros. Pero por lo general esto funcionará si estás usando la siguiente versión de Docker.

docker version

zagur@debian:~$ docker version
Client:
Version: 1.9.1
API version: 1.21
Go version: go1.4.2
Git commit: a34a1d5
Built: Fri Nov 20 12:59:02 UTC 2015
OS/Arch: linux/amd64

docker info

Este comando nos muestra información acerca de la cantidad de contenedores e imágenes que se encuentran actualmente en nuestra maquina como así también la versión de docker que está ejecutando.

docker images

Este comando nos muestra información acerca de cada una de las imágenes que se encuentran en nuestra maquina (nombre, id, espacio que ocupa, fecha de creación). Al ejecutar este comando podemos observar la siguiente salida:

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu latest c4bea91afef3 11 weeks ago 187.9 MB
eboraas/apache latest a17a1fa9251d 12 weeks ago 337.5 MB
hello-world latest 0a6ba66e537a 5 months ago 960 B

docker ps

Este comando nos indicará que contenedores están actualmente ejecutándose en nuestra maquina. Este comando nos mostrará la información de todos los contenedores que existen actualmente, en que estado se encuentran así como cuando fueron apagados. Este comando da una salida como la siguiente:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
41d955a00a70 ubuntu «/bin/sh -c ls» 10 weeks ago Exited (0) 10 weeks ago distracted_nobel

docker pull [imagen]:[version]

Esto nos descargará la imagen con la versión que se ha seleccionado. En caso de no indicar la versión nos descargará la imagen con etiqueta (tag) por defecto. Por ejemplo, si descargamos Debian nos descargará la versión latest. Para saber que imágenes se encuentras disponibles podemos visitar esta web donde encontraremos las imagenes disponibles en el repositorio de Docker https://hub.docker.com. Con la siguiente salida (con ejemplo mencionado anteriormente):

root@debian:/home/zagur# docker pull debian
Using default tag: latest
latest: Pulling from library/debian
73e8d4f6bf84: Pull complete
040bf8e08425: Pull complete
Digest: sha256:e7d38b3517548a1c71e41bffe9c8ae6d6d29546ce46bf62159837aad072c90aa
Status: Downloaded newer image for debian:latest

docker search [busqueda]

Este comando nos permite buscar imágenes en el repositorio oficial de Docker. Para no tener que ir buscando en la web, también podemos buscar imágenes desde la Terminal. Aquí un ejemplo de salida:

root@debian:/home/zagur# docker search bind9
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
somejedi/docker-bind9 Ubuntu 14.04 Bind9 6 [OK]
resystit/bind9 Bind9 running on Alpine. 9Mo 4 [OK]
fike/bind9 Bind9 running on Debian Wheezy. Enjoy it a… 2 [OK]
timherman/docker-bind9 1 [OK]

docker run [imagen]:[version]

Este comando nos permite crear un contenedor a través de una imagen. El comando run permite pasarle una serie de parámetros con los que podemos asignar RAM, CPU, variables de entorno, servidor DNS, etc… Cuando ejecutamos docker con la opción run lo podemos hacer de la siguiente manera:

docker run -i -t debian /bin/echo «Hola mundo»

Llegado a este punto, que hace Docker? Lo siguiente:

Primero comprueba que tenemos la imagen solicitada. Si la tenemos, la utiliza, si no la tenemos la descarga del repositorio Docker Hub. Luego crea un nuevo contenedor y le asigna espacio para el sistema de archivos y monta raíz y le añade una capa de lectura y escritura a la imágen. Una vez esto, crea y asigna una interfaz de red que ermite al contenedor la comunitación con el host local. Detecta y concede una dirección IP disponible desde un grupo de IPs. Y para acabar, ejecuta el comando especificado.

docker rm [imagen]:[version]

Este comando nos permite eliminar una imágen. En caso de no informar la versión/tag procederá a borrar todas las que tengan el mismo nombre sin importar la versión.

docker commit [imagen]:[version]

Aquí se pone interesante esto. Cuando montamos un contenedor con una imagen, podemos configurar dicha imagen y para evitar que estos cambios se pierdan, podemos «guardarlos» haciendo un commit.

docker save [imagen] > [archivo].tar

Si queremos exportar una imagen a otra imagen podremos hacerlo con este comando. Este comando lo que hace es exportar la imagen que indicamos en un archivo tar.

docker load < [archivo].tar

Si antes podíamos exportar, este comando permite hacer lo contrario. Cargar la imagen que se encuentra dentro del fichero tar para luego ser usado en nuestro entorno de Docker.

Y hasta aquí los comandos que yo hasta ahora he visto básicos para tener un control sobre Docker. Aún así, nos queda mucha cosa por aprender y es lo que veremos en las siguientes partes de aquí hacia adelante. Más adelante hablaremos sobre los ficheros llamados «DockFiles», de datos interesantes sobre Docker, crear imágenes propias y hacer commits y para acabar hablaremos de aplicaciones web para controlar de manera gráfica Docker.

Haz que cada palabra cuente: tu donación nos inspira a seguir creando contenido. Accede al apartado de Donación para hacer tu aportación