miércoles, 9 de marzo de 2016

Primeros pasos con Docker

Docker está de moda así que vamos a dar algunas nociones para que todo el mundo pueda subirse a esta tecnología tan fantástica. En pocos días no podrás dejar de pensar en ella cada vez que tengas que iniciar un proyecto o hacer una prueba. Transformará el arquitecto de sistemas que llevas dentro y enriquecerá todo lo que hagas a partir de ahora.

Empezamos.

Qué es un contenedor docker

No es una máquina virtual. Y punto. Aunque lo parezca. Es un proceso que corre directamente en tu máquina. Lo puedes ver con un "ps". Ese proceso crea un entorno que contiene todo lo necesario para dar la apariencia de que es otra máquina. Está basado en LXC que es un sistema de contenedores ligeros que emplean muchos proveedores de hosting. Cuanto antes te convenzas de que no es una máquina virtual antes empezarás a disfrutar de lo que sí es.

Otra cosa que debes saber es que las imágenes de los contenedores docker se construyen unas sobre otras. Abajo estaría la más básica y conforme vamos subiendo podemos ir perfeccionando un contenedor para que cumpla con el rol que queramos. Es como hacer plantillas.

Vamos a suponer que tienes un equipo con Linux. Ubuntu por ejemplo. Instalamos el paquete de docker. Ojo que ya existe un paquete con el nombre "docker" que es una bandena KDE. El que nos interesa se llama "docker.io" en ubuntu.

sudo apt-get install docker.io



Mi primer docker

Vamos a arrancar un primer contenedor con un ubuntu limpio. Sin pensarlo. A lo loco. Los ejemplos que pongo aquí los puedes ejecutar sin peligro en tu equipo.

$ sudo docker run --name osadmin-ubuntu ubuntu
Unable to find image 'ubuntu:latest' locally
latest: Pulling from ubuntu
454970bd163b: Pull complete 
38112156678d: Pull complete 
4e1f7c524148: Pull complete 
56063ad57855: Pull complete 
ubuntu:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Digest: sha256:4e85ebe01d056b43955250bbac22bdb8734271122e3c78d21e55ee235fc6802d
Status: Downloaded newer image for ubuntu:latest


Analicemos qué ha pasado: hemos querido arrancar un contenedor al que llamaremos "osadmin-ubuntu" y que está basado en la imagen de contenedor docker "ubuntu". Puesto que no teníamos ninguna imagen llamada "ubuntu" se la ha descargado de un repositorio (llamado "registry"). Luego lo ha arrancado y está en algún lugar corriendo. Comprobamos.

Comprobamos que existe la instancia "osadmin-ubuntu".
$ sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
c98e2697c8fa        ubuntu:latest       "/bin/bash"         7 minutes ago       Exited (0) 7 minutes ago                       osadmin-ubuntu
Vemos que está detenida. Esto es porque docker solo tiene sentido como proceso. Es decir, si no le encargas que haga nada, no hace nada. Se muere. Vamos a eliminarla y la volvemos a crear haciendo una espera de 120 segundos.

Primero la eliminamos

$ sudo docker rm osadmin-ubuntu


¿ Qué hemos eliminado ? La instancia llamada "osadmin-ubuntu".
¿ Hemos eliminado la imagen docker ubuntu ? La imagen está en un repositorio local y debe seguir allí. Lo vemos.

$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu              latest              56063ad57855        5 days ago          188 MB
Observa que nuestro repositorio todavía tiene la copia de la imagen "ubuntu" creada hace 5 dias de la imagen del contenedor.

El siguiente comando creará de nuevo el contenedor pero hará un sleep de 120 segundos.

$ sudo docker run -d --name osadmin-ubuntu ubuntu /bin/bash -c "sleep 120"
da6eda60ad16cfb8e1d6843fa6030ba191cc051900947052c9f07e332fcaeaa0
$ sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS               NAMES
da6eda60ad16        ubuntu:latest       "/bin/bash -c 'sleep   6 seconds ago       Up 5 seconds                            osadmin-ubuntu  


Pasados 120 segundos se morirá.

Eliminar imágenes

Si queremos purgar nuestro depósito local de imágenes, es sencillo. El ejemplo nos permite eliminar la plantilla "ubuntu". Se supone que no hay nadie usándola. Si es así no nos deja eliminarla a no ser que hagamos un "-f".

$ sudo docker rmi ubuntu
Untagged: ubuntu:latest
Deleted: 1997914a7c23c0f2f77ba6570032f8e74292224d24b9e13228244561ac304020
Deleted: 1b1999356dda739315854eb57a482e92405660e84fd71b6c59f777377b5bd2dc
Deleted: 13a8e55f2d20aee3c842842ebadcbda69347bb657a4cde1b851719b8f896c596
Deleted: 8aa2fc7185e20bacda32d815eaae32cbc1c0457dc160ed5b3995ab79a8c7fd98


No ha estado mal como aperitivo.

No hay comentarios: