Usando Docker - Parte I
Instalar Docker, entender qué es una imagen y levantar un MySQL en un contenedor, sin tocar nada de tu sistema. La parte práctica del post anterior.
Agradezco mucho la buena aceptación que tuvo el post anterior, donde presentaba el ¿por qué usar Docker?.
Como lo prometido es deuda, me doy la tarea de enseñarte algunos temas básicos para meterte en Docker. Si bien en el artículo anterior lo presenté como la solución a varios problemas comunes que un programador novato se encuentra al configurar un entorno de trabajo, debo ser justo y contar que Docker es mucho más que eso: es una herramienta para desplegar y usar contenedores, dentro de esos contenedores puedes configurar entornos a tu antojo, y una vez terminado el desarrollo puedes usar esa misma configuración para desplegar en producción. Sí, quizás suena muy maravilloso, pero sí, lo es.
Describamos un poco Docker, dentro de lo que yo conozco. Tenemos el Docker Engine, que es el que instalas en tu equipo y el que se encarga de gestionar los contenedores, y por otro lado el Docker Hub, que es el repositorio público donde vas a encontrar infinidad de imágenes para todos los gustos y ambientes.
Ahora sí, manos a la obra.
Instalar el Engine
Primero descarga el Engine e instálalo en tu equipo, dependiendo de tu sistema operativo: docker.com/get-started.
Una vez instalado vas a ver que el motor se inicia, y lo puedes comprobar en la barra de tareas con la ballenita quieta. Es probable que la primera vez te pida permiso de administración o se demore algunos minutos en arrancar. Si estás en Windows Home te va a pedir virtualización adicional; si estás en Windows Pro tienes que habilitar Hyper-V desde la BIOS; en Mac no necesitas ningún otro sistema de virtualización.
Ya instalado, abre PowerShell en el caso de Windows o el terminal en el caso de Mac, y ejecuta:
docker -v
Con eso ya tienes la seguridad de que el sistema reconoce el comando y además conoces la versión instalada.
Y listo, ya tienes Docker en tu equipo. No esperabas montar un contenedor hoy, ¿cierto? Eso será en el capítulo 12 más menos, como The Walking Dead, que deja todo para el final de temporada, jaja.
Ok, sigamos.
Imagen y contenedor, que no son lo mismo
Aclaremos dos conceptos antes de seguir, porque si los confundes todo lo demás se pone raro. Hablamos de gestionar contenedores, cierto, pero para que un contenedor exista hay que crearlo a partir de una imagen. La imagen es la copia base, el molde, y desde ella puedes desplegar tantas copias como necesites.
Vuelve al terminal y ejecuta:
docker images

En mi caso ya tengo varias. Te comento qué representa cada columna: REPOSITORY es el nombre de la imagen, TAG es la versión específica que tienes instalada, y si dice “latest” será la última disponible. IMAGE ID es un identificador único generado para tu máquina, y es un dato importante porque con él vas a manipular la imagen. CREATED y SIZE se explican solos.
Tu primera imagen y tu primer contenedor
Vamos a descargar una imagen de MySQL:
docker pull mysql
Espera a que termine, ejecuta docker images de nuevo y vas a ver tu imagen nueva con su IMAGE ID en pantalla. Ahora, sin salir del terminal:
docker run --name minombre -e MYSQL_ROOT_PASSWORD=miclave -d mysql:latest
Ese comando lo puedes encontrar en el repositorio oficial de MySQL en Docker Hub. Te lo explico por partes:
docker run le dice a Docker que ejecute una instancia nueva de la imagen.
--name minombre le asigna un nombre personalizado al contenedor, para no andar con el ID a mano.
-e MYSQL_ROOT_PASSWORD=miclave pasa un parámetro al entorno, en este caso la clave de root del motor.
-d mysql:latest indica qué imagen desplegar, y con el tag, qué versión, por si tienes varias.
Ahora ejecuta docker ps y vas a ver tu contenedor vivo con los parámetros indicados. Fíjate en la columna CONTAINER ID, porque la vamos a usar para entrar.
Entrar al contenedor
Ok capitán, el contenedor está a bordo y operativo, ¿cómo lo comprobamos? Ejecuta:
docker exec -it a0dd8316725f bash
Con eso le dices a Docker que ejecute un bash para ese ID de contenedor, y quedas adentro como si estuvieses accediendo a un VPS. Ya dentro puedes ejecutar comandos directamente:
mysql -u root -pmiclave
Y sí señora, sí señor, conectados al servidor. Listo los usuarios y me responde la consulta.
¿Magia? No, configuración correcta y un trabajo limpio. Esto es Docker, una herramienta para manipular tu entorno de desarrollo a necesidad, sin generar dependencia con el sistema operativo base, y en la cual puedes hacer tantas pruebas o manipulaciones como quieras.
¿Se cansó y quiere apagar el contenedor?
docker stop a0dd8316725f
Y a dormir.
Una advertencia que en su momento no te di
Cuando borres ese contenedor de MySQL, se va todo lo que había dentro. Las bases, las tablas, los datos, todo. El contenedor es desechable por diseño, y eso que suena a defecto es justamente la gracia.
Si quieres que los datos sobrevivan, tienen que vivir fuera del contenedor, en lo que Docker llama un volumen, y eso se indica al levantarlo con -v. No lo voy a desarrollar acá porque da para su propio post, pero prefiero que lo sepas ahora y no el día que borres un contenedor con tres semanas de trabajo adentro.
Espero que te haya servido este tutorial. Sé que salió un poco largo y quizás es medio intenso en información, pero puedes leerlo cuantas veces necesites.
Si seguimos con la buena aceptación, después podemos revisar dos temas relevantes: cómo generar una imagen personalizada y cómo manipular los contenedores con un entorno gráfico.
Hasta la próxima.