GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Cómo ejecutar MySQL en un contenedor Docker

Los contenedores Docker le permiten ejecutar 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. Aquí se explica cómo ejecutar una nueva instancia de MySQL en Docker en solo unos minutos.

Cómo empezar

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

docker pull mysql:8.0

Antes de implementar, deberá configurar un volumen de Docker o un montaje de enlace para conservar su base de datos. De lo contrario, sus datos se perderán cuando se reinicie el contenedor. El montaje debe hacerse en /var/lib/mysql dentro del contenedor.

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

Aquí se explica cómo ejecutar MySQL mientras se cumplen 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 rutina de primera ejecución de MySQL tardará unos segundos en completarse. Puede verificar si la base de datos está activa ejecutando docker logs my-mysql . Busque una línea que contenga ready for connections .

RELACIONADO: Cómo usar Docker para contener PHP y Apache

Composición de Docker

La docker run El comando puede volverse largo rápidamente, especialmente si tiene requisitos de configuración complejos. Escribiendo un docker-compose.yml El archivo es más fácil de mantener. He aquí 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 .

RELACIONADO: Cómo instalar Docker y Docker Compose en Linux

Conectando a MySQL

Puede obtener un shell MySQL interactivo adjuntando al contenedor y ejecutando mysql dominio. Esto proporciona la interfaz de línea de comandos de MySQL completa, por lo que puede usar todos los comandos e indicadores familiares.

docker exec -it my-mysql mysql -p

Este comando abre un shell como usuario raíz y solicita una contraseña.

Para importar un archivo SQL desde su sistema de archivos, puede canalizarlo al 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. Vincule un puerto de host al puerto 3306 del contenedor. Agregue lo siguiente a su docker-compose.yml archivo, dentro del mysql definición de servicio:

ports:
 - 33060:3306

Esto vinculará el puerto 33060 en su máquina host con el puerto 3306 del contenedor. Si no está utilizando Docker Compose, pase -p 33060:3306 para docker run cuando inicia 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 coincide con el nombre del servicio definido en su archivo Compose).

Crear automáticamente 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 primera ejecución. Establezca estas variables para aprovisionar automáticamente una nueva base de datos y una cuenta de usuario vacías:

  • MYSQL_DATABASE – El nombre de un esquema de base de datos para crear cuando el servidor se inicializa por primera vez.
  • MYSQL_USER y MYSQL_PASSWORD – Crear una nueva cuenta de usuario inicial, separada del root usuario. Si también establece el MYSQL_DATABASE variable, su nueva cuenta de usuario automáticamente se le otorgarán 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 root usuario. Esto reemplaza el MYSQL_ROOT_PASSWORD variable. La contraseña generada se emitirá al flujo de salida estándar en la primera ejecución. Debido a esto, 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!

Archivos semilla de primera ejecución

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

Cualquier archivo encontrado se ejecutará secuencialmente. El orden será siempre alfabético. Puede aplicar prefijos de nombre de archivo (por ejemplo, 1-seed_tables.sql / 2-seed_data.sql ) para asegurarse de que las operaciones se completen en el orden previsto.

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

MySQL ignorará los archivos de inicialización a menos que no haya una base de datos en el directorio de datos. Limpiar el contenido de su directorio de datos activará una nueva inicialización cuando reinicie el contenedor.

Ajustar la configuración del servidor

Los archivos de configuración del servidor MySQL se cargarán desde /etc/mysql/conf.d . Agregue sus propios archivos de configuración a este directorio, utilizando una anulación de Dockerfile o un montaje de enlace, para ajustar la configuración del servidor. Puede obtener la lista de opciones disponibles en el manual de MySQL Server.

El uso de un archivo de opciones facilita ver y editar su configuración en el futuro. Verifica su archivo en el control de versiones junto con su proyecto. Sin embargo, las banderas de la línea de comandos también están disponibles para ajustes únicos y experimentación.

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 consulta general habilitado. El mysql binary es el punto de entrada de la imagen, por lo que las banderas se pasan a docker run después de que el nombre de la imagen se reenvíe a mysql .

Conclusión

Ejecutar MySQL dentro de 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 conflicto.

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

RELACIONADO: Cómo implementar rápidamente WordPress como un contenedor Docker


Docker
  1. Cómo ejecutar MySQL en Docker Container:una guía simple y fácil de seguir

  2. Cómo salir de un contenedor Docker

  3. Cómo crear un contenedor MySQL Docker para pruebas

  4. ¿Cómo enviar una señal para que el programa se ejecute en un contenedor docker?

  5. ¿Cómo agregar usuarios al contenedor Docker?

Cómo ejecutar la pila ELK en Docker Container

Cómo usar SSH en un contenedor Docker y ejecutar comandos

Cómo ejecutar una aplicación .NET en Docker

Cómo ejecutar PHPMyAdmin en un contenedor Docker

Cómo ejecutar Grafana en un contenedor Docker

Cómo ejecutar contenedores Docker