Cuando oyes a la gente hablar de Docker y/o Docker Compose, parece algo apasionante pero suena un poco a chino porque todo es demasiado técnico.
La curva de aprendizaje no es precisamente suave, aunque gracias a Youtubers como «Pelado Nerd» puedes ahorrarte muchos quebraderos de cabeza.
Me encanta Docker, y cuanto más conozco este tipo de virtualización tan cercano al sistema operativo (que nada tiene que ver con virtualizar máquinas con VirtualBox y similares), más cosas virtualizo.
Puedes virtualizar entornos de desarrollo, cms’s, tiendas online.
Con Docker puedes incluso virtualizar aplicaciones (por lo menos en linux), puedes encontrar en la web wide world por ejemplo, como virtualizar con docker compose el famoso sublime text.
Cuando haces un «docker build» o «docker up», lo primero que va a hacer Docker es crear las imágenes, y luego los contendores.
Si tu fichero docker-compose contiene los «ingredientes» para Apache, Nginx, WordPress y Phpmyadmin, esto creará de forma automática cada una de esas imágenes.
Después creará un contenedor por cada una de esas imágenes.
El contenedor es una instancia de la imagen. Como si la imagen fuera una plantilla y el contenedor una extensión de la misma.
Y si clonamos este entorno, o creamos otro que también use Apache, usará esa misma imagen.
Es decir. Si tenemos 5 sitios virtualizados con Docker que usan Apache, no va a instalar 5 apaches, si no que no instalará sólo 1 y estará compartido para todos los contenedores.
La magia de docker es tal, que puedes ejecutar entornos de php 5, mientras que tu máquina permanece en la versión 7.2, o simplemente no tiene php.
La manera en como se trabaja todo en docker, es formando una red entre los contenedores, donde ellos se ven y se entienden a través de los puertos.
Por ejemplo, instalas un mysql especificando como puerto 8090.
Instalas 3 cms’s distintos, que van a necesitar mysql. Pues a estos les dices que su mysql está en el puerto 8090. Y yatá…
Instalas un software con un php 4, uuuuuuuuuuuuuuuuu, para el puerto 9091.
En el navegador usarás localhost:9091 y parecerá que el software está en tu propia máquina.
También puedes entrar en el contenedor, y trabajar en el interior y ejecutar cosas en él, que sería el análogo de estar en la consola de un virtualbox.
Pues si Docker es magia, docker compose no tiene palabras.
Docker compose es un ficherito, donde se describe la lista de imagenes y contenedores que quieres crear, y como se interconectan entre ellos.
Es como una receta de cocina, donde tu vas a declarar que ingredientes usas y como los mezclas.
Esto se hace con el comando docker-compose.yml
Y cuando te sitúas en la carpeta de dicho fichero, haces «docker-compose up».
Entonces actúa la termo-mix 😀
Ejemplo de un docker-compose de wordpress:
services:
php:
image: wordpress
restart: 'always'
ports:
- 0.0.0.0:80:80
depends_on:
- mysql
links:
- mysql
volumes:
- ./data/www:/var/www/html
mysql:
image: mysql
restart: 'always'
volumes:
- ./data/mysql:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: my_site
MYSQL_USER: root
MYSQL_PASSWORD: root
Donde «volumes» son los datos volátiles.
Fijaos en mysql, volumes. Estamos haciendo que los datos mysql esté en una carpeta compartida con el host. («host» es nuestra máquina real, «contenedor» es el interior de docker)
Osea, que cuando nosotros hagamos un zip de la carpeta donde está situado el fichero docker-compose.yml, y nos lo llevemos a otro lugar, el nuevo contenedor volverá a «enganchar» los datos de mysql.
Si no has probado nunca docker-compose, cuando lo hagas será como comer pipas, no querrás parar de aprender y usarlo cada vez más.