Uso de docker compose en el nuevo lab

Uso de docker compose en el nuevo lab

En el mundo de desarrollo de software el cambio de herramientas, metodologías y lenguajes de programación es algo muy común. En ocasiones esos cambios vienen producidos por modas o por el interés en nuevas tendencias. En esta ocasión la inclusión de docker es adecuada para evitar errores de configuración en los puestos de los participantes. 

La explicación de lo que es Docker y Docker Compose queda fuera de esta entrada. Existe mucha información disponible en la web. Voy a centrarme en el uso que se va a hacer de esta tecnología.

En este segundo lab que voy a comenzar en breve he decidido introducir la tecnología docker por varios motivos:

  • Sencillez en la instalación de software
  • Uniformidad en la manera de trabajar de todos los participantes del lab
  • Portabilidad y escalabilidad
  • Introducir a los participantes en esta tecnología

Un problema detectado en el anterior lab ocurría cuando se debían introducir datos de manera manual. Por ejemplo, la contraseña de root de la base de datos. A veces algunas personas ponían metrica y otros metrica123 esto provocaba errores al compartir el código (acceso a la base de datos desde una aplicación springboot). Para evitar este tipo de problemas, mediante docker, se crea la cuenta de root con la contraseña ya establecida. 

Modificando el fichero que genera los contenedores se podrán crear más bases de datos y no será necesario realizar está acción de manera manual. Bastará descargarse el código de github y hacer una build de los contenedores afectados.

Todos los participantes van a utilizar exactamente la misma versión de MariaDB y la misma configuración del servidor web. Si «rompieran algo» tan solo deberán regenerar el contenedor o volver a descargarlo.

En mi opinión veo muchas ventajas y pocos inconvenientes. Quizás uno de los problemas que se puede encontrar es no abusar de la creación de contenedores para cualquier cosa ya que consumen recursos (aunque bastante menos que una máquina virtual). Otro problema es la necesidad de entender la tecnología que hay detrás. Los conceptos de  volumen, mapeo de puertos, redes internas… Leyendo la extensa documentación disponible se pueden ir adquiriendo poco a poco estos conocimientos.

Docker Compose es una tecnología que va a permitir unir varios contenedores en una misma red. En nuestro caso se van a instalar:

  • Servidor web nginx
  • Base de datos MariaDB
  • PHP en el servidor nginx

Requisitos para usar los contenedores

Es necesario tener instalado Docker for Windows (https://docs.docker.com/docker-for-windows/install/) y git (https://gitforwindows.org/). Es importante disponer también de git bash para lanzar los comandos de docker. Mediante git bash nos evitamos problemas con las rutas de los directorios que pueden provocar errores en windows.

Clonar y arrancar los contenedores

Es necesario acceder al repositorio público de github de Métrica. Este repositorio (https://github.com/metricalab/entornoDockerMetrica) contiene todo el código en la carpeta entornoDockerMetrica . El fichero principal es docker-compose.yml y se lanza mediante el comando:

 docker-compose up -d

Una vez lanzado el comando se creará una red docker común (entornodockermetrica_default) y 3 contenedores:

  • Contenedor de nginx (entornodockermetrica_nginx_1)
  • Contenedor de MariadB (entornodockermetrica_mysql_1)
  • Contenedor de php para nginx (entornodockermetrica_php_1)

Para comprobar el estado de los mismos se puede lanzar el comando:

docker ps -a

La salida será del estilo:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e63d4e64f4e5 nginx:1.13.8 "nginx -g 'daemon of…" 12 hours ago Up 3 hours 0.0.0.0:80->80/tcp entornodockermetrica_nginx_1
e0b9c9bf17cf mariadb "docker-entrypoint.s…" 12 hours ago Up 3 hours 0.0.0.0:3306->3306/tcp entornodockermetrica_mysql_1
abbce5ec8310 entornodockermetrica_php "docker-php-entrypoi…" 12 hours ago Up 3 hours 0.0.0.0:9000->9000/tcp entornodockermetrica_php_1

Se muestra información detallada sobre los contenedores. El valor de la columna CONTAINER ID es diferente cada vez que se levanta el contenedor y sirve para identificar los mismos. Es más fácil identificarlos mediante la columna NAMES.

Se ha añadido una página index.html para el servidor nginx. En esta página se muestra información sobre los contenedores: como levantarlos, como pararlos… Será muy fácil añadir información a este fichero y actualizarse mediante git. La salida al lanzar la dirección http://localhost es:

Index

Para comprobar que PHP ha quedado bien instalado se puede probar la página con http://localhost/test/phpinfo.php en ella se mostrará la configuración de PHP:

PHP Info

 

Detener los contenedores

Para detener los contenedores basta con lanzar el comando:

docker-compose down

De esta manera los contenedores se pararán y se eliminarán. Al lanzar el comando:

docker ps -a

No se mostrará ningún contenedor

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

Aunque los contenedores se han eliminado el contenido de la base de datos y el código PHP que se haya podido realizar no se ha eliminado ya que se encuentra en los volúmenes. Pero se hablará de ello en otra entrada 🙂 .

En esta entrada he explicado como lanzar el fichero docker-compose para poder utilizarse en el lab. En próximas entradas comentaré como conectar un contenedor externo con los contenedores generados en esta entrada. Se describirá la estructura de volúmenes y la ubicación de los archivos de configuración.

Agradecimientos a Ultano Peña por la elaboración del fichero docker-compose.yml

Juan Pardo Palazón
Responsable técnico de laboratorio en MÉTRICA LAB
[email protected]

Deja un comentario

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

Esta página web utiliza cookies para mejorar tu navegación más información

Los ajustes de cookies de esta web están configurados para "permitir cookies" y así ofrecerte la mejor experiencia de navegación posible. Si sigues utilizando esta web sin cambiar tus ajustes de cookies o haces clic en "Aceptar" estarás dando tu consentimiento a esto.

Cerrar