Docker y Docker compose

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.

¿Y que es Docker?

Docker

Docker es un virtualizador de software.
Para pillarlo rápido.
Es como si instalases un virtualbox, pero sin instalarle el sistema operativo, sólo el software en cuestión. Y no importa si usas un Ubuntu o un Windows, todos funcionará exactamente igual de forma aislada a tu entorno.
Docker instala imágenes y contenedores, usando siempre tu sistema operativo.

En Docker una imagen es el software, mysql, wordpress, drupal.
En Docker un contenedor es la instancia de una imagen.

Te explico mejor esto último.
Puedes instalar 3 wordpress distintos, cada uno de esos wordpress va a ser el sitio o dominio que subirás a tu hosting, y que probablemente primero prefieras crearlo y testearlo localmente.

Imágenes y contenedores de Docker

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.

Más sobre Docker

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.

¿Y que es docker compose?

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.

Enlaces útiles de docker y docker compose

Por cierto, sitio oficial de Docker y su documentación
https://docs.docker.com/

Si lo quereis instalar, encontrareis por google como hacerlo desde vuestro sistema operativo.
Por ejemplo para instalarlo desde ubuntu 18
https://www.digitalocean.com/community/tutorials/como-instalar-docker-compose-en-ubuntu-18-04-es

Ventajas al dockerizar un entorno.

  • Puedes «encender» o «apagar» esos cms’s y robots con un único comando en consola «docker-compose up» y «docker-compose down» (y con ello los recursos que ocupa todos esos componentes que no necesitarás si enciendes el pc para escuchar música)
  • Puedes decidir que datos son volátiles (mysql, plugins, imágenes) y situarlos en una carpeta del host
  • Cuando te llevas copias y clonas una carpeta de Docker-compose y sus datos volátiles, al recrear el contenedor en otro lugar no necesitarás configurar nada (esa es una de las grandezas de Docker)
  • Antes de hacer una operación de riesgo, como he comentado en el punto anterior, copias la carpeta entera, y bualá. No pasas por la ardua tarea de tener que exportar e importar las bases de datos (si te lo montas bien, of course)
  • Puedes coger el wordpress del server, bajarlo a tu local, y todo se monta con un «docker-compose up». Sólo necesitarás cambiar la configuración de la url, y tendrás en tu local una copia idéntica en pocos minutos y casi nada de esfuerzo.
  • Cuando un cliente me dice que algo no funciona bien en su prestashop, y me resulta complicado analizarlo en su servidor, habrá una diferencia abismal entre si su entorno está en un Docker o no.
    Si lo está, bingo! Sólo tengo que bajarlo, arrancarlo en mi local, y analizarlo y depurarlo todo localmente.
  • Podrás tener tu pc de Escritorio, con tus cosas personales, tus juegos, herramientas multimedia, sin instalar en él los entornos de trabajo que no te gusta tener en tu máquina real, que en muchas ocasiones te pueden crear problemas.
    A mi personalmente no me gusta nada tener un apache o un nginx en mi entorno real, y tener que actualizarlo o mantenerlo. O que cuando se rompe te obliga a romperte la cabeza o reinstalar el sistema operativo entero por culpa de esto.
    O viceversa, que se te rompa tu sistema, y al reinstalarlo tengas que empezar de cero, y reinstalar apache, mysql, postgres, importar todas las bases de datos.
    Si lo tengo en docker, sólo tengo que instalar Docker, hacer «docker-compose up» en cada sitio, y es como la diferencia entre hacerse un café a tener que pintar la casa de nuevo.

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.

Ejemplos de docker compose que podría interesarte.
Prestashop en Docker
WordPress en Docker
Odoo en Docker

Acerca de Pedro Reina

Más de 15 años de experiencia en programación Php, python, Mysql, Hml, css, y algunos frameworks. Webmaster aprendiendo SEO. Entusiasta de la informática y la electrónica, pequeño emprendedor y fabricante de ideas.

Deja una respuesta