Cómo crear archivos docker-compose.yml de manera fácil con EZCompose
Hace un par de semanas comencé a aprender algo nuevo, ese algo nuevo es Python, con lo aprendí, me anime y salió esto...
Así es, hace un par de semanas, comencé a estudiar Python, ¿Por qué? Porque me parece que me puede ser muy útil para desarrollar, en mi caso, pequeñas aplicaciones que me ayuden con determinada tareas.
No planeo convertirme a desarrollador, ni buscar un trabajo relacionado, solo quiero más herramientas para poder hacer cosas más interesantes y que me ayuden a automatizar cierto trabajo.
Los canales que estoy viendo para todo este proceso, se los recomiendo, son estos:
EZCompose
Como parte de este proceso, estoy desarrollando pequeñas aplicaciones que me ayudan a entender mejor los conceptos. Creo que la práctica es clave a la hora de aprender algo nuevo.
Una de esas aplicaciones es EZCompose. Este programa, está pensado para que, mediante un asistente, puedas definir un montón de datos y que los mismos se vuelquen a un archivo llamado docker-compose.yml.
Si lees este blog a menudo, ya tenés idea de lo que es ese archivo, pero si no te acordas, es una receta donde definimos contenedores y sus configuraciones.
Ahora bien, este programa no está terminado pero es totalmente funcional, a medida que voy aprendiendo cosas, le voy a agregando más funcionalidades.
La última versión liberada es la v0.1.3-alpha que te permite especificar uno o varios contenedores con las siguientes características:
- Asignar un nombre al contenedor
- Múltiples juegos de puertos.
- Múltiples labels
- Una red
- Un volumen (Bind)
- Un comando
Como se darán cuenta queda mucho por hacer, pero lo que hay es totalmente usable.
Cómo funciona
En esta versión, del archivo ezcompose.py hice un ejecutable, el mismo es capaz de correr en cualquier versión de Linux/Mac. Por ahora, no lo he hecho para Windows. Si les gustaría que lo haga, pueden abrir un Issue.
Vamos a descargarlo. (Comprueba que estés descargando la última versión)
$ wget https://github.com/xe-nvdk/ezcompose/releases/download/v0.1.3.1-alpha/ezcompose
Lo corremos de la siguiente manera:
$ ./ezcompose
Ahí aparecerá el cartel de bienvenida a la aplicación y comenzará a pedirte datos:
##############################################################
################ Bienvenides a EZCompose #####################
##############################################################
Este programa te ayudará a crear un archivo docker-compose.yml
Escribe el nombre del servicio: webserver
¿Quieres especificar un nombre al contenedor? [y/n]: y
Dame un nombre para tu contenedor: wordpress
Define la imágen a descargar: wordpress:latest
¿Quieres publicar uno o mas puertos? [y/n]: y
Define el puerto a publicar hacia afuera: 80
Define el puerto del contenedor: 80
Queres agregar mas puertos? [y/n]: n
¿Quieres montar volumenes? [y/n]: y
Especifica el directorio local: $PWD
Especifica el directorio a resguardar en el contenedor: /var/www/html/wp-content
Define los permisos. Pueden ser rw o ro, si no especificas nada, sera rw:
¿Quieres especificar una red? [y/n]: y
Especifica el nombre de la red: wordpress
¿Quieres especificar un comando? [y/n]: n
¿Quieres especificar una label? [y/n]: n
Queres agregar un nuevo contenedor? [y/n]: n
Tu archivo esta listo, lo encontraras en el mismo directorio desde donde ejecutaste este programa
Gracias por usar EZCompose
De todo esto, va a resultar el siguiente archivo docker-compose.yml
version: "3.3"
services:
webserver:
container_name: wordpress
image: wordpress:latest
ports:
- 80:80
volumes:
- $PWD:/var/www/html/wp-content:
networks:
- wordpress
labels:
networks:
wordpress:
Si quisiera agregarle otro contenedor, en la última pregunta, en vez de poner 'n' como hice, pueden poner 'y' y el programa comenzará de nuevo.
Queres agregar un nuevo contenedor? [y/n]: y
Para ir cerrando
Estoy entusiasmado con EZCompose porque no hay nada parecido en Python y creo que puede ser un proyecto que ayude a muchos a armar de manera rápida sus archivos docker-compose.yml.
Faltan agregar muchas cosas, pero comenté al principio esto es parte de un aprendizaje, a medida que avance, iré agregando cosas.
Por lo pronto, en la próxima versión incluirá la capacidad de agregar más comandos y volúmenes del tipo bind (Por el momento no soporta Manage Volumes).
Cualquier tipo de contribución a este proyecto es bienvenido, pueden abrir un Issue o hacer un Fork, modificar y hacer un Pull Request.
Espero que este programa les guste y sobre todo, les sea de utilidad.