Implementación de MySQL usando Docker-Compose

Implementación de MySQL usando Docker-Compose
MySQL es uno de los sistemas de gestión de bases de datos más populares que existen. Muchas aplicaciones lo usan para sus necesidades de backend. MySQL esencialmente tiene dos componentes, uno es el servidor de base de datos MySQL que administra los datos e interactúa con el mundo exterior, proporcionando las aplicaciones los datos que desean, así como, actualizando los registros a medida que entra la nueva información. El cliente MySQL puede ser cualquier aplicación remota como phpmyadmin o su aplicación web personalizada o el cliente de línea de comandos de MySQL, que también se llama solo mysql.

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.

Un ejemplo simple

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 mysqlCompose

Crear un archivo Docker-Compose.yml en él usando su editor de texto favorito y escribe lo siguiente:

Versión: '3.1 '
servicios:
DB:
Imagen: mysql
Comando: --Fault-Authentication-Plugin = mysql_native_password
reiniciar: siempre
ambiente:
Mysql_root_password: useadifferentPassword
Administrador:
Imagen: Administrador
reiniciar: siempre
Puertos:
- 8080: 8080

Luego ejecute el siguiente comando desde dentro del mismo directorio:

$ Docker -Compose Up -d

Esto 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'
servicios:
DB:
Imagen: MySQL: 5.7
Volúmenes:
- db_data:/var/lib/mysql
reiniciar: siempre
ambiente:
Mysql_root_password: SomeWordPress
Mysql_database: WordPress
Mysql_user: WordPress
Mysql_password: createenewpasswordplomeedontcopythis
WordPress:
depende de:
- db
Imagen: WordPress: Último
Puertos:
- "8000: 80"
reiniciar: siempre
ambiente:
WordPress_DB_Host: DB: 3306
WordPress_DB_user: WordPress
WordPress_DB_Password: CreateNewPassWordPloneDontCopyThis
WordPress_DB_Name: WordPress
Volúmenes:
db_data:

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.