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:
- Definir el entorno de las aplicaciones con Dockerfile (del que hablamos en el artículo anterior), para que así pueda reproducirse en cualquier lugar.
- Establecer los servicios que componen las aplicación en un fichero docker-compose.yml, para que se pueda utilizar en un entorno aislado.
- Ejecutar la herramienta
docker-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).
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
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
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 »