Skip to main content

4.1 Docker compose

A medida que introducimos Docker en nuestro entorno de desarrollo, nos damos cuenta que rápidamente estamos en un escenario donde tenemos que orquestar múltiples contenedores a la vez por ejemplo: base de datos, backend, frontend, cache...

Para agilizarnos el proceso podemos hacer uso de Docker Compose una herramienta muy elegante que nos permite pasar de comandos como:

docker run -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro --restart always --log-opt max-size=1g nginx

a ficheros yml mucho mas sencillos y legibles como:

version: '3.3' 
services:
nginx:
ports:
- '80:80'
volumes:
- '/var/run/docker.sock:/tmp/docker.sock:ro'
restart: always
logging:
options:
max-size: 1g
image: nginx

Además podemos tener múltiples servicios corriendo y conectados entre sí con las políticas de red que nosotros queramos. Por ejemplo un Wordpress rápido y sencillo para hacer pruebas en local con MariaDB

version: '3.3'
services:
db:
# We use a mariadb image which supports both amd64 & arm64 architecture
image: mariadb:10.6.4-focal
# If you really want to use MySQL, uncomment the following line
#image: mysql:8.0.27
command: '--default-authentication-plugin=mysql_native_password'
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
- MYSQL_ROOT_PASSWORD=somewordpress
- MYSQL_DATABASE=wordpress
- MYSQL_USER=wordpress
- MYSQL_PASSWORD=wordpress
expose:
- 3306
- 33060
wordpress:
image: wordpress:latest
ports:
- 80:80
restart: always
environment:
- WORDPRESS_DB_HOST=db
- WORDPRESS_DB_USER=wordpress
- WORDPRESS_DB_PASSWORD=wordpress
- WORDPRESS_DB_NAME=wordpress
volumes:
db_data:

También podemos incluir variables de entorno, que además tiene sus propios comandos y sintaxis que nos ayudan a gestionar el ciclo de vida de nuestros contenedores de una forma fácil e intuitiva.

Una forma fácil de empezar es simplemente migrando comandos de Docker que ya usamos en el día a día con la herramienta online Composerize