Configurando MariaDB con Docker
ATENCIÓN
Esta página está desactualizada y pendiente de revisión.
Para empezar a ver cómo funciona el docker-compose.yaml
y probar docker, vamos a configurar un contenedor de MariaDB, que servirá como base de datos para los diferentes servicios que soporten MySQL.
Contenido de docker-compose.yaml
Aquí está el contenido a añadir al docker-compose.yaml
:
secrets:
mariadb_root_password:
external: true
nextcloud_db_user:
external: true
nextcloud_db_password:
external: true
services:
db:
image: mariadb:10.5
restart: always
volumes:
- ./db:/var/lib/mysql
secrets:
- mariadb_root_password
- nextcloud_db_user
- nextcloud_db_password
environment:
- MARIADB_ROOT_PASSWORD_FILE=/run/secrets/mariadb_root_password
- MARIADB_USER_FILE=/run/secrets/nextcloud_db_user
- MARIADB_PASSWORD_FILE=/run/secrets/nextcloud_db_password
- MARIADB_DATABASE=${NEXTCLOUD_DB_NAME:?nextcloud database name required}
¿POR QUÉ APARECE NEXTCLOUD?
La imagen del contenedor Docker de MariaDB nos permite crear una base de datos al iniciar el contenedor por primera vez. En este caso, como uno de los servicios principales del servidor es Nextcloud, hemos configurado aquí el contenedor para que cree la base de datos y el usuario para Nextcloud al iniciarse, y para más bases de datos las crearemos posteriormente antes de iniciar el otro servicio.
Gestión de secretos: secrets
Esta sección del docker-compose.yaml
nos permite declarar los llamados secrets (o secretos por su traducción al castellano). Estos son cadenas de texto que se crean con docker secrets
o a través de un archivo, que Docker gestiona de una manera segura y nos sirve para reemplazar las variables de entorno que contengan datos más sensibles como contraseñas. Aunque estos secretos se pueden crear a través de un archivo indicándolo en el propio docker-compose.yaml
, realizarlo de tal forma requiere tener la contraseña en texto plano en el sistema, por tanto vamos a crear los secretos a través de la terminal.
En el archivo docker-compose.yaml
tenemos que declarar el nombre de los secrets que vamos a usar en secrets
. Estos se declaran indicando su nombre como miembro de secrets
, i.e. añadiendo el nombre indentado debajo de secrets
como se puede ver anteriormente y, dado que los vamos a crear manualmente con la CLI de Docker, tenemos que indicar external: true
para cada uno.
IMPORTANTE
La versión que se indica con la clave version
en el archivo ha de ser 3 o superior para que los secrets funcionen
Procedamos ahora a crear los diferentes secrets que se necesitan. En los siguientes comandos, sustituye el texto entre <>
(e.g. <root_password>
) con lo que desees (que recomendamos que sea generado aleatoriamente) y guárdalo en un sitio seguro y que no vayas a perder:
$ echo "<root_password>" | docker secret create mariadb_root_password -
$ echo "<nextcloud_password>" | docker secret create nextcloud_db_password -
$ echo "<nextcloud_user>" | docker secret create nextcloud_db_user -
SUGERENCIA
Dado que estas contraseñas permiten acceder a todos los datos de Nextcloud y la de root a TODOS los datos de TODAS las bases de datos, te recomendamos que sean bastante seguras, de más de 20 caracteres mínimo. El usuario de la base de datos también es recomendable generarlo aleatoriamente para así proveer más seguridad evitando que si alguien gana acceso a la contraseña pueda acceder
Variables de entorno
A lo largo del docker-compose.yaml
vamos a utilizar múltiples variables de entorno para interpolar datos que no resultan tan privados, como el nombre de la base de datos. Las variables de entorno se cargan directamente de un archivo .env
que se sitúe junto al docker-compose.yaml
, aunque puede personalizarse para cada servicio usando la opción env_file
. En nuestro caso, tenemos un archivo de entorno de ejemplo en el repositorio. Para proseguir, vamos a descargar este archivo y renombrarlo a .env
:
# Sitúate donde tengas el archivo docker-compose, que debería de ser /home/<usuario-docker>
$ curl https://raw.githubusercontent.com/ComicIvans/server/main/home/dockeruser/.env.example -o .env
RECORDATORIO IMPORTANTE
El archivo .env.example
es de ejemplo y público para cualquiera, así que antes de proseguir edita el archivo con tu editor favorito para que no tenga los mismos valores que el de ejemplo.
En la siguiente sección indicaremos como usar estas variables de entorno en los diferentes servicios.
MÁS INFORMACIÓN
Si te has quedado con la duda de por qué usamos secrets y no variables de entorno, puedes leer más en este artículo de la antigua coordinadora de seguridad en Docker.
El contenedor en sí: services
> db
WIP
Gestionando MariaDB con Adminer
services:
adminer:
image: adminer
restart: always
ports:
- 8088:8080