Seguimos hablando de containers, en este caso, de la herramienta Docker Compose, que nos permitirá definir y ejecutar múltiples aplicaciones utilizando contenedores de software.

Con Compose utilizaremos ficheros en formato YAML, que nos servirán para definir la configuración de la aplicación en cuestión. De esta manera podemos, con un solo comando, crear e iniciar los servicios configurados en estos ficheros.

Su forma de uso es la siguiente:

  1. Definir el entorno de las aplicaciones con Dockerfile (del que hablamos en el artículo anterior), para que así pueda reproducirse en cualquier lugar.
  2. Establecer los servicios que componen las aplicación en un fichero docker-compose.yml, para que se pueda utilizar en un entorno aislado.
  3. Ejecutar la herramientadocker-compose, para así iniciar la aplicación.

En el fichero YML podemos definir, entre otras cosas, la imagen o imágenes que queremos utilizar, la exposición de puertos o los volúmenes (De todo estos ya hemos hablando también antes).

Un ejemplo:

version: '3'
services:
  web:
    build: .
    ports:
    - "8088:8080"
    volumes:
    - .:/code
    - logvolume01:/var/log
    links:
    - tomcat
  tomcat:
    image: tomcat
volumes:
  logvolume01: {}

Podemos ver, por ejemplo, la versión que vamos a utilizar de «DockerCompose«, la exposición de puertos, las imágenes que vamos a llamar, que en este caso se trata de «Tomcat«, los volúmenes, etcétera.

En este aspecto podemos consultar la documentación oficial de referencia.

Ejemplo de funcionamiento

Yo sabéis que la mejor manera de decir es hacer, por lo que vamos a ver un ejemplo de uso. La idea es crear un proyecto de WordPress utilizando dos contenedores, uno de ellos para el propio servidor web y el otro para la base de datos, con MariaDB.

Antes de nada, continuando con el resto de artículos de la serie (recordemos que utilizamos como sistema operativo anfitrión a GNU Linux con Centos 7), vamos a instalar el paquete necesario para trabajar:

#Debemos tener instalado previamente el repositorio de Docker CE
sudo yum install docker-compose

En los mares de Internet hay cantidad de imágenes ya predefinidias casi para cualquier cosa. Así que utilizaremos las imágenes oficiales de WordPress y MariaDB, ambos proyectos ubicados en Dockerhub.

Nos iremos a la consola de comandos. Desde allí creamos un fichero llamado ‘docker-compose.yml’ con la siguiente información:

wordpress:
    image: wordpress
    links:
     - mariadb:mysql
    environment:
     - WORDPRESS_DB_PASSWORD=contrasea
    ports:
     - "80:80"
    volumes:
     - ./code:/code
     - ./html:/var/www/html
mariadb:
    image: mariadb
    environment:
     - MYSQL_ROOT_PASSWORD=contrasea
     - MYSQL_DATABASE=wordpress
    volumes:
     - ./database:/var/lib/mysql

En el fichero indicamos tanto los datos para el contenedor de ‘WordPress‘ como para el de la base de datos ‘MariaDB‘; además definimos los volúmenes y la exposición de puertos, temas que ya hemos tratado en capítulos anteriores. También indicamos la contraseña de la base de datos y su nombre.

Una vez hecho esto podemos crear los contenedores utilizando el siguiente comando:

docker-compose up -d

Para que pueda montar los contenedores debemos estar en la misma ubicación que el fichero YML.

Al finalizar el proceso, si todo ha ido bien, veremos el siguiente mensaje:

Creating docker_mariadb_1 ... 
Creating docker_mariadb_1 ... done
Creating docker_wordpress_1 ... 
Creating docker_wordpress_1 ... done

Al terminar el proceso ya podemos obtener información sobre los contenedores recién creados:

docker ps -a

Con el resultado:

[davidochobits@servcentos01 Docker]$ sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                NAMES
81b612f8b68b        wordpress           "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp   docker_wordpress_1
07bf0c86b179        mariadb             "docker-entrypoint.s…"   About a minute ago   Up About a minute   3306/tcp             docker_mariadb_1

Ahora sólo tenemos que ir a la dirección IP del host anfitrión en nuestro navegador, más el puerto que hayamos configurado, que en el ejemplo ha sido el 80.

Los pasos a seguir son los habituales de una instalación de WordPress. Una vez finalizados los pasos ya tendremos nuestra web montada y funcionando:

Las ventajas de utilizar contenedores son muchas. Por ejemplo, podemos lanzar decenas de contenedores de este popular CMS, cada uno de ellos exponiendo un puerto diferente.

Espero que el artículo haya sido de vuestro interés. No olvides comentar si tienes alguna duda o simplemente te ha parecido interesante. En el siguiente artículo hablaré de Kubernetes, que nos ayudará a automatizar el despliegue de contenedores. ¡Estad atentos! ^.^


Os indico las fuentes consultadas:

Docker.com – Install Docker Compose

4.6 5 votos
Article Rating
Subscribe
Notificarme de
guest

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

5 Comments
más antiguo
más nuevo más votado
Reacciones en línea
Ver todos los comentarios
Adrián Alejandro Rodríguez Villarreal

Excelente articulo, seguiré atento a los nuevos; me había encontrado previamente en github un YAML para desplegar un cluster de Spark y el numero de nodos a desplegar solo era cuestión de hacer copy-paste en el archivo YAML, solo lo levante como prueba, ya que no sabia como funcionaba esto de docker-compose pero tu articulo me da algo mas de idea de como funciona, y pues me ha animado a profundizar en el tema. Saludos

Pedro Gabriel

Muy buenos días! Los artículos me parecen bien, pero a un nivel muy introductorio, es decir, que te dejan con la sensación de «yo he usado esto y cuento algo ligerito». Estuve leyendo el de crear un dockerfile y estuvo bien (también muy ligerito) pero al final parece que tenía prisa y no ejecutaste el correcto desenlace. Eso sí, prometiste continuar en el siguiente y que es lo que veo, que das el salto a «docker-compose». Por cierto, ese archivo yaml, me recuerda mucho a otro que vi por la «web». Todo esto lo digo no como una crítica dura de «enterado» sino porque he estado buscando artículos de calidad para profundizar en el mundo de los contenedores y los microservicios y resulta que es bastante dificil encontrar algo bien realizado. Mi experiencia es que en la actualidad tengo un sistema de «orchrestation» basado en LAMP para desarrollar con Frameworks… Leer más »