Docker compose, ése gran aliado!

 

¿Qué es?

En la página oficial del comando, http://docs.docker.com/compose/ indican lo siguiente:

Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application’s services. Then, with a single command, you create and start all the services from your configuration.

En pocas palabras, esta utilidad, nos permite desplegar desde un contenedor a x contenedores, sin tener que desplegar uno a uno cada contenedor, con sus puertos, volúmenes mapeados, etc.

Cómo ejemplo, os muestro el contenido de un fichero docker-compose.yml:

version: '3.3'

services:

db:

image: mysql:5.7

volumes:

- db_data:/var/lib/mysql

restart: always

environment:

MYSQL_ROOT_PASSWORD: somewordpress

MYSQL_DATABASE: wordpress

MYSQL_USER: wordpress

MYSQL_PASSWORD: wordpress

wordpress:

depends_on:

- db

image: wordpress:latest

ports:

- "8000:80"

restart: always

environment:

WORDPRESS_DB_HOST: db:3306

WORDPRESS_DB_USER: wordpress

WORDPRESS_DB_PASSWORD: wordpress

volumes:

db_data: {}

Este docker compose, le indica a docker, lo siguiente:

Qué éste contenedor tiene una dependencia de base de datos

db:

Qué descargue, de no tener la imagen localmente, y despliegue un contenedor mysql:57

image: mysql:5.7

Qué este contenedor, se auto arranque siempre (fallo de host, reinicio del servicio docker, etc)

restart: always

Qué use las siguientes variables de entorno, para el contenedor de mysql:

environment:

MYSQL_ROOT_PASSWORD: somewordpress

MYSQL_DATABASE: wordpress

MYSQL_USER: wordpress

MYSQL_PASSWORD: wordpress

Qué descargue, de no tener la imagen localmente, un contenedor wordpress, qué depende del contenedor de mysql

wordpress:

depends_on:

- db

image: wordpress:latest

Qué éste contenedor mapee el volumen db_data del host hacia la ruta /var/lib/mysql del contenedor

volumes:

- db_data:/var/lib/mysql

Qué el contenedor de wordpress, use públicamente el puerto 8000 e internamente el puerto 80

ports:

- "8000:80"

Qué este contenedor, se auto arranque siempre (fallo de host, reinicio del servicio docker, etc)

restart: always

Qué el contenedor de wordpress, use la siguiente configuración:

environment:

WORDPRESS_DB_HOST: db:3306

WORDPRESS_DB_USER: wordpress

WORDPRESS_DB_PASSWORD: wordpress

Y, finalmente, que mapee y use el volumen para mysql:

volumes:

db_data: {}

Un volumen, nos permite que los contenedores guarden siempre los datos, después de un reinicio o apagado, ya que de no tener un volumen, los datos desaparecen, dejando el contenedor tal como está en la imagen.

Después de todo este rollo, vamos a ver como descargarlo. Lá última versión en fecha 29/01/2019 es la 1.24.0-rc1. En la url http://github.com/docker/compose/releases siempre encontraréis está versión, como las futuras y anteriores.

Lo descargamos con los siguientes comandos:

curl -L "http://github.com/docker/compose/releases/download/1.24.0-rc1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Damos permisos de ejecución, con este otro comando

chmod +x /usr/local/bin/docker-compose

Y para usarlo, creamos el fichero docker-compose.yml y ejecutamos, desde la ruta donde tengamos este fichero, el siguiente comando:

docker-compose up

Veremos, qué primero, descarga la imagen de mysql:57, luego que descarga la imagen de wordpress

Una vez descargado, crea los contenedores, conecta estos, tal como le indicamos en el fichero docker-compose.yml, y arranca la base de datos y wordpress.

Aparecen errores 2002 de mysql!!!!

Sí, es normal, está configurando la base de datos ;P

Ahora sí que está operativa la base de datos y apache arrancado

Vemos que los contenedores están corriendo, y sólo el contenedor de wordpress es accesible públicamente, desde el puerto 8000

Esa captura, es de portainer (http://www.portainer.io/) , qué lo explico en el siguiente post

Si accedemos a la ip del servidor de docker, por el puerto 8000, lo vemos funcionando:

2 comentarios

Dejar una contestacion

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.