Dockerizando un proyecto con Codeigniter 4 (2/2)
Tags: devops, spanish, tutorial
Published: 2023-06-29 18:20:56

Hoy revisaremos como configurar el archivo docker-compose.yml, este archivo es importante porque es el que define el stack en donde van a vivir nuestros contenedores y como es que van a interactuar unos con otros, además que puertos son los que van a estar expuestos y volúmenes. La primera parte vamos a ver los segmentos que componen el contenedor que tiene la imagen personalizada del anterior hilo. Este archivo debe de estar en la carpeta raíz y al mismo nivel que el de dev.Dockerfile.


![docker-compose.yml completo](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5jzxk0s77f7ubibyg8fe.png)

La versión es la de docker-compose y services incluye los servicios (contenedores) del stack. Se configura el nombre del contenedor, y después las variables de entorno que yo principalmente tengo la clave secreta del recapcha de Google y la llave privada de JWT.


![Primera parte](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0537n5r30jasyfl4yviy.png)

En el segmento de build esta context: . que hace referencia a que tome el el proyecto de la carpeta en la que el mismo se encuentra y ocupe el archivo de configuración de dev.Dockerfile, que es la imagen personalizada para que construya este servicio. Si por alguna razón el host del contenedor se apaga o se reinicia también lo haga nuestro servicio es el sentido de esta linea: restart: always. Los volúmenes son parte esencial porque estos son la ligadura que tenemos de nuestra maquina host hacia el contenedor en este caso agrego la carpeta de app porque ahí es donde se encuentra el código que vamos a estar modificando y que eremos que se vea reflejado en el contenedor. Siguiendo están los puertos que vamos a exponer en este caso el del lado izquierdo es el del host y el del lado derecho es del contenedor. Por lo tanto en nuestra maquina va a estar disponible en localhost:8080. Links es el nivel interesante porque nuestro contenedor de base de datos lo vamos a enrutar de manera interna así que en nuestro proyecto se va a llamar MariaDB.

La parte que sigue es el servicio de la base de datos. Es un poco mas corto, pero no por ello menos interesante. Primero se configura el nombre del servicio, y ahora como no vamos a utilizar una imagen personalizada vamos a ocupar la de MariaBD versión 10.6.


![Segunda parte](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wtswzo83fmp9d59bdfqt.png)

La autenticación queremos que sea por medio de un usuario y contraseña es por ello que se ejecuta la parte que dicen command. Queremos que si el host se reinicia también se reinicia el servicio de este contenedor. Las variables de entorno en lo mas genial porque acá directamente configuras las características de la base de datos como tal por ejemplo cual es el nombre de la base de datos, el usuario que tiene acceso, contraseña del usuario y la contraseña del usuario root. El volumen se crea para que se genera la persistencia de los datos porque nuestro contenedor no tiene esa capacidad por si solo, entonces lo que hacemos es que el volumen con los datos este en el host y cada vez que se inicie el servicio tome este volumen. Por ultimo exponemos los puertos por defecto de MariaDB el 3306 por si queremos conectarnos con una herramienta externa ya sea un MySQL Workbench o cualquiera del mismo estilo. Teniendo completa la configuración de nuestros dos archivos tanto dev.Dockerfile y docker-compose.yml será hora de ocuparlos. Obviamente debes de tener instalado Docker en tu computadora para que no tengas inconvenientes y se ejecutan los siguientes comandos.


![Levantar el contenedor](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rct0ps2g2cnr93rolg2e.png)

Con estos dos comando vas a construir y levantar el contenedor ya con el programa de Docker instalado en nuestro host.

Si este articulo te gusto o aprendiste algo nuevo te agradecería que me ayudaras a compartir para que mas personas puedan aprender de estos temas.