Configurar el servidor MySQL a menudo es tedioso, debe configurar una cuenta de usuario, abrir puertos, establecer contraseñas, crear bases de datos y tablas, etc. En esta publicación, intentaré minimizar algunas de sus miserias haciendo una implementación simple de MySQL usando Docker-Compose.
Descargo de responsabilidad: De ninguna manera este archivo de composición está "listo para la producción". Si desea ejecutar una base de datos MySQL en producción, tendrá que ajustar la seguridad un poco más. Esto incluirá bloquear la cuenta raíz, configurar TLS y configurar permisos más estrictos en varias bases de datos para varios usuarios de bases de datos, etc.
Primero asegúrese de que Docker esté instalado en su estación de trabajo o servidor. Para ejecutar un servicio mySQL simple, primero cree una nueva carpeta en su host de Docker. Nombrarlo mysqlCompose:
$ mkdir mysqlComposeCrear un archivo Docker-Compose.yml en él usando su editor de texto favorito y escribe lo siguiente:
Versión: '3.1 'Luego ejecute el siguiente comando desde dentro del mismo directorio:
$ Docker -Compose Up -dEsto con el archivo de composición anterior se creará dos nuevos contenedores, primero serán el servicio de la base de datos y el segundo será un contenedor administrador que actuará como un interfaz para la administración de la base de datos.
Aunque la comunicación entre el contenedor Administrador y el servicio MySQL está a través de TCP usando el puerto 3306, no tenemos que abrir ningún puerto en nuestra base de datos. Esto se debe a que los contenedores Docker en una red de puentes pueden hablar entre sí en cualquier puerto (excepto en la red de puente predeterminada de un host de Docker). Puede enumerar la red Docker utilizando el comando Docker Network LS y le mostrará que se ha creado una nueva red.
Visite http: // localhost: 8080 e inicie sesión como root usando la contraseña useadifferentPassword y obtendrá una interfaz de usuario muy simple para interactuar con su mysql. MySQL se puede configurar para que se autentique de varias maneras, sin embargo, hemos optado por usar solo el mysql_native_password como método de autenticación. Puede pasar la contraseña de root MySQL usando a través de una variable de entorno, como se muestra en el archivo YML en sí.
Nota: En aras de la claridad, mencioné credenciales importantes como la contraseña de root mySQL y otras contraseñas de usuario en texto plano, aquí. Esto es obviamente un riesgo de seguridad. La forma correcta de hacer esto sería usar los secretos de Docker, pero ese es un tema para otro día.
Implementar WordPress
WordPress es quizás el ejemplo clásico para resaltar las fortalezas y matices de Docker-Compose. Como la mayoría de la instalación regular de WordPress, la variante Docker también usa MySQL para su base de datos de backend. Sin embargo, la base de datos se ejecuta como un contenedor diferente donde el servidor web (junto con la aplicación WordPress) se ejecuta en otro contenedor.
Aquí hay un fragmento de la documentación oficial de Docker-Compose con respecto a su configuración.
Versión: '3'Esto creará un sitio web de WordPress abierto en el puerto 8000 de su host de Docker. Puede ver que la sección Servicios define dos servicios en él:
Primero, la base de datos MySQL con un volumen con nombre para almacenar datos persistentes y algunas variables de entorno para configurar el usuario, la base de datos y la contraseña de MySQL.
En segundo lugar, el contenedor de WordPress que tiene un servidor web, PHP y WordPress, todos instalados con él. Necesita hablar con la base de datos (disponible en DB: 3306 internamente), expone el puerto 80 internamente al resto del mundo a través del puerto de Docker Host 8000. También tiene algunas variables de entorno que definen dónde encontrar la base de datos (DB: 3306), junto con el nombre de la base de datos, el nombre de usuario y la contraseña que definimos en el servicio MySQL.
Conclusión
Con suerte, los pocos ejemplos anteriores ilustran cómo configurar un contenedor MySQL. La idea subyacente es que pasa el nombre de su base de datos y otros detalles de configuración como variables de entorno. Siempre puede consultar la descripción proporcionada en Docker Hub y luego puede configurar MySQL para su propia aplicación.