martes, 19 de mayo de 2020

Docker: La guia definitiva

¿Que titulo eh? Tremendo, uno entra a un posteo así y automáticamente piensa que va a entenderlo absolutamente todo.
Bueno, es mentira, no esta todo, lamento desilusionarte mi querida ardilla.
Pero, a pesar de esto, es una guía con bastantes comandos como para atesorar entre tus bienes mas preciados, compartir, recomendar, acompañar con una cerveza (?), etc.

Vamos a lo nuestro, ya se, nadie lee el principio ¬¬

¿Que es Docker
Supongo que ya lo sabes, sino te lo digo, así a grandes rasgos Docker es un administrador de contenedores ligeros y portables, la idea de Docker es que estos contenedores puedan ejecutarse en cualquier máquina con Docker instalado, independientemente del sistema operativo de la misma y sin necesidad de estar viendo si la otra maquina donde queremos ejecutar nuestra aplicación cuenta con el software necesario para poder ejecutarla.
La funcionalidad de Docker, creo, que es a partir del Kernel 3.10, y los containers (si no estoy equivocado y si lo estoy me corrigen) nacen en 2009/2010 y Docker en el 2013. Docker llega directo al kernel no necesita un hypervisor.
Ya se, estas sudando, queres instalar Docker ya, te tiemblan las manos, estas realmente ansioso. Pasemos a esa parte:

Instalar Docker en Debian (Acá dejo un link para instalar Docker en Centos). Primero, instalamos las dependencias necesarias, agregamos las claves GPG, el repositorio estable de Docker y actualizamos:

sudo apt-get install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common build-essential

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian buster stable"

sudo apt-get update

Luego, instalamos Docker:

sudo apt-get install -y docker-ce docker-ce-cli

Ya tenemos Docker instalado, ahora podemos conquistar el mundo (?).
Para ver la versión de Docker:

sudo docker -v

Para ver si anda :)

sudo docker run hello-world


¿Que hizo acá? Vio que no teníamos ninguna imagen llamada hello-world, entonces fue a buscarla al repositorio para descargarla localmente y luego poder ejecutarla.
Con esto ya saben que existe un repositorio de imágenes que pueden usar.
Si volvemos a ejecutar el comando anterior, vemos únicamente el resultado de la imagen (no la vuelve a descargar).

Ahora vamos a ver que otra imagen descargar. 
En esta página (Docker Hub) hay decenas de imágenes para instalar. Un contenedor es un proceso que se levanta a partir de una imagen.

Vamos a probar con Wordpress por ejemplo. Buscamos a ver si hay una imagen y vemos que hay una oficial:


Para instalarla ejecutamos:

sudo docker pull wordpress


Para ver las imagenes descargadas ejecutamos:

sudo docker images

Y vemos que tenemos la de Wordpress:


Ahora vamos a levantar un contenedor con esta imagen:

docker run --name MiWordpress -p 8080:80 -d wordpress

El -d es vital, porque es para que se ejecute en segundo plano, sin esto no vas a poder interactuar con la terminal. El --name es para ponerle un nombre mas descriptivo y que nos guste, podrías ponerle Ramón (?).
Y el -p 8080:80 indica que cuando te conectas al puerto 8080 de tu equipo en realidad te estas conectando al 80 del contenedor. Lo ultimo (wordpress) es el nombre de la imagen a partir de la cual vamos a levantar el contenedor.

Para acceder escribimos en un navegador:

http://localhost:8080 


No es la idea del post, pero si siguen el asistente van a tener un Wordpress funcional para probar un montón de cosas (?). Aca estan los pasos que siguen.

Si no tienen interfaz gráfica pueden probar con lynx que es un navegador que funciona desde la terminal:

 lynx localhost:8080


Creanme que es Wordpress ¬¬, y si alguien les mira la pantalla les dicen que son hackers y después me lo comentan en el post así nos reímos juntos (?).

Bueno, ahora vamos con algunos comandos útiles:

Borrar imagen de Docker:

docker rmi nombredelaimagen

Lanzar contenedor e iniciar sesión en el mismo:

docker run --name MyWordpress -it wordpress /bin/bash

Este ultimo comando esta bueno, porque te da una shell bash en el contenedor y básicamente podes navegar por todo ese "linux minimalista" que lo corre:


Ver todos los procesos activos:

docker ps -a


Podemos ver en la imagen que hay 4 contenedores, uno corriendo (el de Wordpress) y 3 contenedores que estaban activos y ya no lo están. Y no, la traducción no es excitado ¬¬

Para saber la ip de un contenedor:

docker inspect nombrecontenedor

Van a ver varias lineas con información del contenedor, entre ella su dirección ip:


Pueden obtenerla directamente filtrando la salida con grep:

docker inspect WordpressARDILLASENLARED | grep 'IPAddress'


Eliminar contenedor:

docker rm nombrecontenedor

Reiniciar, detener e iniciar contenedor:

docker restart nombrecontenedor
docker stop nombrecontenedor
docker start nombrecontenedor


Para conectarse al contenedor con una shell bash:

docker exec -it nombrecontenedor /bin/bash 

Usar con cuidado este comando, sirve para eliminar todos los contenedores detenidos, las redes que no están siendo utilizadas y sus imágenes colgadas:

docker system prune


Para ver los logs de un contenedor ejecutamos:

docker logs nombredelcontenedor

Crear backup de un contenedor:

docker commit -p iddelcontenedor nombredelarchivodebackup

Guardarlo en un archivo .tar para moverlo a cualquier maquina con Docker:

docker save -o ~/nombrecontenedor.tar nombrecontenedorbackupeado

Restaurar backup del contenedor (vamos a poder ver la imagen con docker images a partir de la cual podemos levantar un nuevo contenedor con docker run):

docker load -i nombredelarchivodebackup.tar

Podría seguir hasta el fin del los tiempos (?), pero es todo por hoy.
Compartí, no seas malo ni egoísta, dale, ¿que te cuesta?
Si lo hace vas a motivarme, y el próximo post de Docker va a ser mucho mejor (?)

Saludos cordiales (?)

No hay comentarios:

Publicar un comentario