Cómo ejecutar MySQL en un contenedor Docker

Los contenedores Docker le permiten lanzar rápidamente nuevas aplicaciones sin contaminar su sistema con dependencias. Una base de datos MySQL es un requisito común para el software basado en web. A continuación, le mostramos cómo hacer que una nueva instancia de MySQL se ejecute en Docker en minutos.

Índice de contenidos()

    Para comenzar

    La imagen oficial de MySQL on Docker Hub ofrece todo lo que necesita para comenzar. Las imágenes están disponibles para las versiones 5.6, 5.7 y 8.0 de MySQL. Especifique lo que desea usar como etiqueta de imagen:

    docker pull mysql:8.0

    Antes de la implementación, debe configurar un volumen de Docker o enlazar el montaje para conservar la base de datos. De lo contrario, los datos se perderán cuando se reinicie el contenedor. El montaje debe hacerse un /var/lib/mysql dentro del contenedor.

    También debe establecer una contraseña para el usuario root de MySQL. Utilizar el MYSQL_ROOT_PASSWORD Variable ambiental. MySQL se negará a inicializarse si esta variable no está configurada. Intente elegir una contraseña segura.

    A continuación, se explica cómo ejecutar MySQL cumpliendo estos requisitos previos:

    docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=secret -v $HOME/mysql-data:/var/lib/mysql -d mysql:8.0

    La primera rutina de ejecución de MySQL tardará unos segundos en completarse. Puede comprobar si la base de datos está activa ejecutando docker logs my-mysql. Busque una línea que contenga ready for connections.

    Docker Compose

    La docker run El comando puede alargarse rápidamente, especialmente si tiene requisitos de configuración complejos. Escribir un archivo docker-compose.yml el archivo es más manejable. Aquí hay un ejemplo:

    version: "3"
    
    services:
      mysql:
        image: mysql:8.0
        environment:
          - MYSQL_ROOT_PASSWORD
        volumes:
          - mysql:/var/lib/mysql
    
    volumes:
      mysql:

    Puede iniciar MySQL usando MYSQL_ROOT_PASSWORD=secure docker-compose up -d.

    Conexión a MySQL

    Puede obtener un shell MySQL interactivo conectándose al contenedor y ejecutando el archivo mysql mando. Esto proporciona la interfaz de línea de comandos completa de MySQL, por lo que puede usar todos los comandos y banderas familiares.

    docker exec -it my-mysql mysql -p

    Este comando abre un shell como usuario root y solicita una contraseña.

    Para importar un archivo SQL desde su sistema de archivos, puede redirigirlo en el comando:

    docker exec -it my-mysql mysql -psecret database_name < path-to-file.sql

    Debe configurar un enlace de puerto si desea acceder a MySQL desde su host. Vincular un puerto de host al puerto de contenedor 3306. Agregue lo siguiente a su archivo docker-compose.yml archivo, dentro del archivo mysql definición de servicio:

    ports:
     - 33060:3306

    Esto vinculará el puerto 33060 en su computadora host al puerto 3306 en el gabinete. Si no está utilizando Docker Compose, continúe -p 33060:3306 por docker run cuando inicie su contenedor. Ahora podrá conectarse a localhost:33060 utilizando clientes MySQL que se ejecutan en su host.

    Si necesita conectarse desde otro Contenedor Docker, es mejor usar Docker Compose. Defina otro servicio para el nuevo contenedor. Ambos contenedores existirán en la misma red de Docker. Podrá conectarse usando el puerto 3306 en el nombre de host del contenedor MySQL (esto corresponde al nombre del servicio definido en su archivo Compose).

    Creación automática de una base de datos y un usuario.

    Las imágenes de MySQL Docker admiten variables de entorno opcionales que le permiten administrar la configuración de la base de datos de la primera ejecución. Configure estas variables para aprovisionar automáticamente una nueva base de datos y una cuenta de usuario en blanco:

    • MYSQL_DATABASE - El nombre de un esquema de base de datos que se creará cuando el servidor se inicialice por primera vez.
    • MYSQL_USER es MYSQL_PASSWORD - Cree una nueva cuenta de usuario inicial, separada del archivo root usuario. Si también configura el MYSQL_DATABASE variable, su nueva cuenta de usuario automáticamente conceda todos los privilegios en la base de datos recién creada.
    • MYSQL_RANDOM_ROOT_PASSWORD - Configure esta variable para que MySQL genere automáticamente una nueva contraseña para el archivo root usuario. Esto reemplaza al MYSQL_ROOT_PASSWORD variable. La contraseña generada se enviará al flujo de salida estándar en la primera ejecución. Por esta razón, se debe tener cuidado al usar esta variable en entornos de CI - ¡la contraseña puede ser visible para cualquier persona que tenga acceso a los registros de trabajo!

    Primera ejecución del archivo semilla

    A menudo, tendrá tablas y datos que desee insertar en la base de datos tan pronto como se cree. Las imágenes de MySQL están configuradas para buscar .sh, .sql es .sql.gz archivo en el contenedor /docker-entrypoint-initdb.d directorio.

    Todos los archivos encontrados se ejecutarán en secuencia. El orden siempre será alfabético. Puede aplicar prefijos a los nombres de archivo (p. Ej. 1-seed_tables.sql / 2-seed_data.sql) para garantizar que las operaciones se completen en el orden esperado.

    Este mecanismo le permite sembrar fácilmente la nueva instancia de base de datos con los datos iniciales. Puede escribir su Dockerfile, usando MySQL como imagen base, y agregar sus archivos semilla en /docker-entrypoint-initdb.d. Alternativamente, bind monta un directorio en su host en el directorio contenedor.

    MySQL ignorará los archivos de inicialización a menos que no haya una base de datos en el directorio de datos. Al borrar el contenido del directorio de datos, se activará una nueva inicialización cuando se reinicie el contenedor.

    Cambiar la configuración del servidor

    Los archivos de configuración del servidor MySQL se cargarán desde /etc/mysql/conf.d. Agregue sus archivos de configuración a este directorio, usando un reemplazo de Dockerfile o un montaje de enlace, para ajustar la configuración del servidor. Puede obtener la lista de opciones disponibles del archivo Manual del servidor MySQL.

    El uso de un archivo de opciones facilita la visualización y el cambio de la configuración en el futuro. Verifica su archivo en el control de versiones junto con su proyecto. Sin embargo, los indicadores de la línea de comandos también están disponibles para modificaciones y experimentación de una sola vez.

    docker run --name my-mysql -e MYSQL_ROOT_PASSWORD=secret -d mysql:latest --general-log=on

    Esta variante de docker run iniciará MySQL con el registro de consultas general calificado. La mysql binario es la imagen punto de entrada, entonces las banderas pasaron a docker run después de que el nombre de la imagen se reenviará a mysql.

    Conclusión

    Ejecutar MySQL en Docker es mucho más rápido y fácil que instalar MySQL Server "bare metal". Puede ejecutar varias instancias de MySQL sin riesgo de conflictos.

    Las imágenes oficiales de Docker vienen con opciones de configuración útiles y soporte integrado para semillas de base de datos de primera ejecución. Esto le permite despegar rápidamente, ya sea que esté comenzando desde cero o usando un esquema existente.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Subir