Si es nuevo en MySQL o alguien que desea instalar una base de datos MySQL de forma rápida y sin esfuerzo, entonces este artículo es para usted. En este artículo, aprenderemos cómo configurar MySQL con Docker y Docker compose en Linux.
Comencemos configurando el entorno de la ventana acoplable para iniciar el contenedor MySQL.
1. Instalar ventana acoplable
Antes de activar el contenedor docker de MySQL, debe tener docker y docker-compose instalados en su máquina. Si no ha instalado docker y docker-compose, consulte las siguientes guías:
- Cómo instalar Docker en CentOS
- Cómo instalar Docker en Ubuntu
También puede consultar los enlaces de documentación oficial de Docker que se proporcionan a continuación para saber cómo configurar Docker y Docker compose.
- https://docs.docker.com/engine/install/
- https://docs.docker.com/compose/install/
Puede ejecutar los siguientes comandos para verificar las versiones de docker y docker-compose con las que se está ejecutando.
$ docker --version Docker version 20.10.11, build dea9396
$ docker-compose --version docker-compose version 1.29.2, build unknown
2. Descargar imagen de MySQL Docker
Vaya a Docker Hub para obtener la imagen acoplable de MySQL . Lo importante es que tienes que decidir qué versión de MySQL vas a ejecutar.
Ejecute el siguiente comando para extraer la imagen de MySQL desde el centro de la ventana acoplable a su máquina.
$ docker pull mysql:latest
Aviso :No es necesario usar la etiqueta "latest
", de forma predeterminada, extraerá la última imagen.
Para verificar si la imagen está disponible localmente, puede ejecutar el siguiente comando:
$ docker images mysql
Salida de muestra:
REPOSITORY TAG IMAGE ID CREATED SIZE mysql latest b05128b000dd 12 days ago 516MB
Ahora la imagen está lista para girar el contenedor. También puede omitir este paso y ejecutar "docker run
" como se muestra en la siguiente sección, que extraerá la imagen si no está disponible localmente.
3. Inicie el contenedor MySQL
Ejecute el siguiente comando para activar el contenedor docker de MySQL:
$ docker run --name mysql -p 3306:3306 -v mysql_volume:/var/lib/mysql/ -d -e "MYSQL_ROOT_PASSWORD=temp123" mysql
Analicemos el comando anterior y veamos qué hace cada bandera.
--name
→ Para dar un nombre a su contenedor. Si no especifica esta marca, la ventana acoplable asignará algunos nombres generados aleatoriamente.
-p
→ Mapeo de puertos. MySQL escuchará en el puerto 3306
entonces estamos mapeando puertos (3306
→ 3306
) desde su máquina host al contenedor docker. No es necesario que el puerto host sea 3306
, puede ser cualquier cosa que esté disponible para ser utilizada.
Ejecute el siguiente netstat
comando en su máquina local para verificar si el puerto asignado está escuchando o no una vez que se inicia el contenedor.
$ netstat -tlnup | grep -i 3306
Salida de muestra:
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 168870/docker-proxy tcp6 0 0 :::3306 :::* LISTEN 168878/docker-proxy
-v
→ Adjunte un volumen al contenedor. El comportamiento predeterminado de la ventana acoplable es que no conservará los datos una vez que se elimine el contenedor, por lo que perderá todos sus datos.
Para crear almacenamiento persistente, he creado un volumen llamado "mysql_volume
". MySQL almacena los datos en /var/lib/mysql/
dentro del contenedor y aquí está asignado al directorio localhost /var/lib/docker/volumes/mysql_volume1/_data
, por lo que sus datos serán persistentes.
Si desea obtener más información sobre los volúmenes de Docker, consulte nuestro artículo detallado. en el mismo.
-d
→ Iniciará y ejecutará el contenedor en modo separado. Si omite el -d
entonces verá los registros de inicio del contenedor en la terminal y tendrá que abrir una nueva sesión de terminal para conectarse al contenedor.
-e
→ Variables ambientales. Tienes que configurar la contraseña de usuario raíz de mysql usando cualquiera de los siguientes parámetros.
MYSQL_ROOT_PASSWORD
→ Configure su propia contraseña usando esta variable de entorno.MYSQL_ALLOW_EMPTY_PASSWORD
→ Se establecerá una contraseña en blanco o nula. Tienes que configurarMYSQL_ALLOW_EMPTY_PASSWORD=1
.MYSQL_RANDOM_ROOT_PASSWORD
→ se generará una contraseña aleatoria cuando se inicie el contenedor. Tienes que configurarMYSQL_RANDOM_ROOT_PASSWORD=1
para generar la contraseña aleatoria.
Si omite este paso, se generará un error como se muestra a continuación.
4. Comprobar el estado del contenedor de MySQL
Puede verificar el estado del contenedor lanzado usando el siguiente comando:
$ docker ps
Salida de muestra:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e1fb895f6f0f mysql "docker-entrypoint.s..." 3 minutes ago Up 3 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
5. Conectarse a la base de datos MySQL
Ejecute el siguiente comando para conectarse al contenedor MySQL.
$ docker exec -it mysql bash
Conéctese a la base de datos MySQL como root
usuario ejecutando el siguiente comando. En mi caso, he configurado mi propia contraseña a través de MYSQL_ROOT_PASSWORD
.
$ mysql -u root -p
Si ha utilizado MYSQL_RANDOM_ROOT_PASSWORD=1
al iniciar el contenedor, puede obtener la contraseña generada automáticamente de los registros.
$ docker logs
$ docker logs mysql
La contraseña de root generada automáticamente será larga y no es algo que deba recordarse. Puede restablecer la contraseña de root ejecutando la siguiente consulta.
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'mysqlpassword';
Reemplace la contraseña 'mysqlpassword' con su propia contraseña. También puede crear su propio usuario y otorgarle los privilegios necesarios.
6. Cargar datos de muestra
El principal objetivo de configurar mysql es cargar algunos datos y ejecutar consultas contra ellos. Hay algunas formas de cargar los datos. Tengo un archivo de muestra llamado "load_data.sql
" con las siguientes consultas en él.
CREATE DATABASE IF NOT EXISTS football; USE football; CREATE TABLE IF NOT EXISTS players ( player_name VARCHAR(16) NOT NULL, player_age INT NOT NULL, player_club VARCHAR(16) NOT NULL, player_country VARCHAR(16) NOT NULL ); INSERT INTO players VALUES ("Messi",34,"PSG","Argentina"); INSERT INTO players VALUES ("Ronaldo",36,"MANU","Portugal"); INSERT INTO players VALUES ("Neymar",29,"PSG","Brazil"); INSERT INTO players VALUES ("Kane",28,"SPURS","England"); INSERT INTO players VALUES ("E Hazard",30,"MADRID","Belgium");
El primer enfoque será copiar los datos de la máquina local al contenedor docker usando el "docker cp
" comando.
$ docker cp load_data.sql mysql:/tmp
$ docker exec -it mysql bash
$ ls -l /tmp/
Ahora puede conectarse al cliente mysql y ejecutar el comando fuente o redirigir el archivo al cliente mysql.
$ mysql -u root -p
mysql> source /tmp/load_data.sql
O
$ mysql -u root -p < /tmp/load_data.sql
Conéctese a la base de datos y consulte su tabla.
$ mysql -u root -p
mysql> show databases;
mysql> use football;
mysql> show tables;
mysql> select * from players;
El segundo enfoque sería redirigir el .sql
archivo al ejecutar docker exec
comando.
$ docker exec -i mysql mysql -u root -p < load_data.sql
7. Configurar el contenedor MySQL usando Docker-Compose
En lugar de extraer la imagen y ejecutar docker run
comando, puede usar docker-compose para hacer girar rápidamente el contenedor. Docker-compose es más adecuado cuando tiene que crear más de un contenedor.
Cree un archivo llamado docker-compose.yml
o docker-compose.yaml
expediente. Copie y pegue el siguiente código yaml. Esto es lo mismo que he ejecutado manualmente en las secciones anteriores.
version: '3.8' services: database: image: mysql:latest container_name: mysql environment: MYSQL_ROOT_PASSWORD: temp1234 ports: - "3306:3306" volumes: - mysql_volume:/var/lib/mysql volumes: mysql_compose_volume:
Ahora ejecute el siguiente comando que activará el contenedor docker de MySQL.
$ docker-compose up
Ejecute el siguiente comando para verificar el estado del contenedor lanzado usando docker-compose:
$ docker-compose ps
Salida de muestra:
Name Command State Ports ------------------------------------------------------------------------------------------------- mysql docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp,:::3306->3306/tcp, 33060/tcp
8. Conéctese a la base de datos MySQL usando MySQL Workbench
Hasta ahora hemos visto cómo conectarnos a la base de datos usando el cliente mysql desde dentro del contenedor. También puede conectarse a la base de datos usando cualquier cliente GUI como mysql workbench, dbeaver, Heidi SQL, etc.
Lo importante a tener en cuenta, independientemente del cliente GUI que esté utilizando, es qué puerto se asignó cuando está iniciando el contenedor.
En mi caso he mapeado localhost (3306
) -> contenedor (3306
). Entonces, si tengo que establecer una conexión con la base de datos, tengo que conectarme a localhost:3306
o 127.0.01:3306
.
Estoy usando MySQL Workbench como mi cliente GUI. Si no ha instalado MySQL Workbench en su máquina, puede usar las siguientes instrucciones para instalarlo.
8.1. Instalar MySQL Workbench en Linux
Navega al sitio oficial para descargar el archivo del paquete. Tienes que elegir tu sistema operativo para descargar el .deb
o .rpm
archivo.
En el siguiente paso, le pedirá que inicie sesión o se registre. Puede omitir el inicio de sesión o el registro haciendo clic en la opción "No, gracias, solo inicie mi descarga".
En sistemas basados en Debian, instale MySQL Workbench como se muestra a continuación:
$ cd <path to downloaded .deb file>
$ sudo apt install ./mysql-workbench-community_8.0.27-1ubuntu21.04_amd64.deb
En sistemas basados en RHEL, instale MySQL Workbench como se muestra a continuación:
$ cd <path to downloaded .rpm file>
$ sudo dnf localinstall ./mysql-workbench-community-8.0.27-1.el8.x86_64.rpm
Una vez completada la instalación, puede iniciar mysql workbench desde el menú o desde el tablero.
Inicie MySQL Workbench
8.2. Conéctese a la base de datos MySQL
Conéctese a la base de datos que se ejecuta dentro de un contenedor docker. Debería intentar conectarse a localhost:3306
o localhost:<port-no>
dependiendo de cómo esté configurado su contenedor.
Antes de conectarse a la base de datos, puede presionar "Probar conexión " para comprobar que MySQL Workbench pudo conectarse correctamente a la instancia de la base de datos.
Ahora puede comenzar a ejecutar sus consultas en las tablas que creó.
9. Conclusión
En este artículo, hemos visto brevemente cómo lanzar contenedores MySQL en docker usando docker run
y docker-compose
métodos. Si desea configurar MySQL con fines de prueba o aprendizaje, Docker es más que suficiente.
Espero que esto ayude.