Después de presentar el proyecto Icaro, veo con la necesidad de hacer una introducción a Docker.
Siempre he pensado que el conocimiento práctico, es el conocimiento que te permite ver el comportamiento de una tecnología nueva y te ayuda a obtener la primera impresión sobre su funcionamiento.
Después de adquirir esta primera impresión, debería ser seguido de un conocimiento más detallado, que te permita implementar esta nueva situación en un entorno más productivo.
DOCKER Y LA ORQUESTACIÓN DE CONTENEDORES
Hace unos años, después del lanzamiento oficial de docker, se encontraron con la necesidad de un orquestador de contenedores, que hiciera todo el proceso un poco mas sencillo.
Actualmente contamos con varias herramientas de orquestación, una de las más famosas podría ser Kubernetes, de ahora en adelante k8s, también tenemos un orquestador llamado swarm que seguramente vendrá con la instalación de docker y podremos hacer una prueba de concepto bastante rápido.
INSTALACIÓN
Esta es la parte, la cual, seguramente mucha gente se pueda saltar, la pongo por si se da el caso de que alguno de vosotros no tengáis alguna versión de docker en vuestra máquina.
Si queréis más información, podéis ir a la documentación oficial de docker.
- https://docs.docker.com/install/linux/docker-ce/ubuntu/
- https://docs.docker.com/docker-for-mac/install/
- https://docs.docker.com/docker-for-windows/install/
Obviamente no os recomiendo qué instaléis docker en windows, no sería lo más eficiente en este caso, por lo menos por ahora.
INSTALACIÓN DOCKER UBUNTU
Cómo he dicho antes, he levantado un docker con ubuntu:latest, en un pequeño servidor de andar por casa, para esta instalación.
Lo primero que hacemos es actualizad con un update nuestra máquina, en el caso que no este ya actualizada
sudo apt-get update
Una vez nuestro sistema esta actualizado, en el caso que tengamos una versión previa, limpiamos esta versión.
apt-get remove docker docker-engine docker.io containerd runc
Llegados a este punto, y sobre todo en mi caso que es un docker in docker, instalo las herramientas que necesito o son dependencias para continuar la guia.
apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
El resultado de la instalación debería de devolver algo similar a la siguiente imagen. Si veis alguna clase de error, podéis preguntarme y estaré encantado de ayudaros, haréis que este primer post sea un poco más interesante.
Ya tenemos la máquina preparada para instalar nuestro docker.
Empezamos añadiendo la GPG key a nuestro apt, de la siguiente manera
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
Con un fabuloso OK nos responderá, el sistema. Una vez tenemos añadamos la key, deberíamos confirmar en que tipo de arquitectura se basa nuestro ubuntu, si ya lo sabéis ignorar esta parte.
uname -m
en mi caso amd64, según el tipo de arquitectura será lo que defina el siguiente comando de instalación, el cual añadirá el repositorio correcto a nuestro ubuntu.
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
Ahora si que tenemos totalmente echos los preparativos y el repositorio correcto de nuestro futuro docker. Ahora toca volver a actualizar nuestro sistema y lanzar el comando de instalación de nuestro entorno docker
apt-get update apt-get install docker-ce docker-ce-cli containerd.io
Terminado el proceso comprobamos la versión de docker instalada en nuestro sistema
IMÁGENES Y CONTENEDORES
Como en la programación, como en cualquier otro sector que requiera versiones existe la necesidad de tener una herramienta que controle las versiones que vamos desarrollando.
Docker como una herramienta más, la cual nos permite generar imágenes, también existe la necesidad de tener versionadas estas imágenes y como tal existe un repositorio.
omo en github, tenemos la posibilidad de tener un repositorio en la nube de manos de https://hub.docker.com/ si usáramos amazon, usaríamos amazon ECR (Elastic Container Registry) https://aws.amazon.com/es/ecr/
COMANDOS BÁSICOS
IMAGENES
Un buen punto de partida sería los comandos más comunes para el uso de images, como podría ser
docker images
Para seguir con el manejo de imágenes podemos continuar con el comando que nos permite bajarnos las imágenes de docker hub a nuestro local.
Por ejemplo para descargar ubuntu:latest, sería
docker pull ubuntu:latest
Llegados a este punto, el siguiente paso lógico para tratar con imágenes, es como eliminar estas imágenes de nuestro local.
docker rmi IMAGE ID
Con estos pocos comandos podemos movernos en el uso de imágenes, en nuestro local.
Si tenemos una cuenta de docker hub, podemos usarla para subir nuestras imágenes y/o contenedores modificados, también podríamos usar un registry propio y subir las imágenes en dicho repositorio.
DOCKER HUB / REGISTRAR, TAGEAR y SUBIR IMÁGENES
Sino te importa tener el repositorio abierto, es una buena opción docker hub, en su versión de pago, el cual te permite, ha día de hoy, tener un repositorio privado y los que quieras abiertos.
Obviamente si no hay problema de presupuesto y no quieres tener en tu infraestructura una herramienta más que gestionar, utiliza su versión de pago.
En el caso que no quieras una cuenta en docker hub y prefieras tener tu propio tu registro de docker en local o en «hierro»
docker run -d -p 5000:5000 –restart=always -docker push localhost:5000/my-ubuntu-name registry registry:2
docker run -d -p 5000:5000 --restart=always --name registry registry:2
Aunque hablaremos más abajo del comando run, es interesante comentar, que los contenedores lanzados con run, no tienen políticas de restart por defecto, por eso se añade –restart=always
Una vez ya tenemos nuestro registry, lo subiremos en local, para docker hub, no hace falta poner la máquina, para cualquier otra opción es necesario.
Utilizando el ejemplo de la documentación que la tenéis en: https://docs.docker.com/registry/deploying/
docker tag ubuntu:16.04 localhost:5000/my-ubuntu
Esto nos crearía un tag que es lo que subiremos a nuestro docker hub, para subirlo ejecutamos el siguiente comando
docker push localhost:5000/my-ubuntu
con esto ya tendríamos la imagen en nuestro repositorio local, para comprobarlo hacer un pull contra vuestro registry
docker pull localhost:5000/my-ubuntu