MySQL es un conocido motor de bases de datos relacionales de código abierto y una de las soluciones de servidor web más populares. Almacena y estructura los datos a gran escalada, asegurando una fácil accesibilidad, utilizarlo con Docker es un gran beneficio.
Docker por su parte es un conjunto de productos que sirven para brindar plataformas como servicio(SaaS). Permite a los usuarios desarrollar y desplegar aplicaciones dentro de entornos virtuales, llamados contenedores. Con una sola imagen, Docker puede arrancar una aplicación con todas sus bibliotecas y dependencias.
En este tutorial, desplegaremos un contenedor Docker con MySQL para trabajar luego con la base de datos en el contenedor.
Alternativas
Al momento de realizar la instalación y puesta en marcha se puede realizar de 2 maneras, la primera seria de manera directa ejecutando cada comando requerido de Docker para levantar el servidor de MySQL o utilizando un archivo .yml que define los parámetros.
Requisitos previos
1.Tener instalado previamente Docker
Desde el siguiente enlace puedes encontrar las instrucciones sobre como realizar la instalacion en la version de tu sistema operativo:
https://docs.docker.com/engine/install/
2. Descargar previamente la imagen de MySQL desde los repositorios de DockerHub
Esto lo puedes hacer ejecutando el siguiente comando:docker pull mysql:latest
Esto descargara una imagen del contenedor de MySQL con el tag latest
3. Crear una red dentro Docker para que los distintos contenedores se comuniquen entre si, se puede crear con la siguiente linea de comando:
# Create the network called "buenosaires"
docker network create buenosaires
Sin manifestó con Docker
Esta es la manera mas sencilla de crearlo, se crea a demanda con la siguiente linea de comando como ejemplo:
# Create dir for database data
mkdir -p /opt/mysql
# Create MySQL container
docker run -d \
--name buenosaires-mysql \
--network buenosaires \
-e MYSQL_ROOT_PASSWORD="RandomPassword" \
-v /opt/mysql:/var/lib/mysql \
-p 3306:3306 \
mysql:latest
Con Manifestó con Docker :
El manifestó es un archivo con formato .yml que mediante un comando ejecutado en la terminal permite crear un contenedor con los parámetros que establezcamos dentro del archivo .yml, como si de una receta habláramos, con la opción Docker Compose.
Como sucede con una receta depende mucho de cómo quieras que funcione tu entorno, en otras palabras, nunca existirá una receta perfecta para todos los escenario y depende mas del tipo de escenario que se nos presente y las necesidades del entorno.
Crear un volumen independiente para hacer la informacion persistente:
Esto es común de utilizar para guardar la informacion fuera del contenedor, para cuando este se detiene al crear otro contenedor con los parámetros que le indiquen que utilice este volumen el contenedor que se cree siempre utilizara la misma informacion, para ello utilizaremos el siguiente comando:
docker volume create buenosaires-mysql-data
Archivo YAML:
version: '3'
networks:
default:
external:
name: buenosaires
volumes:
buenosaires-mysql-data:
external: true
services:
mysql:
image: mysql:latest
ports:
- 3306:3306
volumes:
- "./buenosaires-mysql/mysql:/etc/mysql/mysql.conf.d"
- "buenosaires-mysql-data:/var/lib/mysql"
- "./buenosaires-mysql/scripts:/tmp/scripts"
environment:
- MYSQL_HOST=${MYSQL_HOST}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_PORT=${MYSQL_PORT}
El código anterior debe guardarse como un archivo por ejemplo “mysql-stack.yml”, en la sección environment se declaran las variables que definirán los parámetros de MySQL.
Por ultimo para iniciar el contenedor es necesario utilizar el comando “docker-compose” como en la siguiente linea de ejemplo:docker-compose -f mysql-stack.yml up -d
Del comando anterior importante recalcar el parámetro “-d” por que permite levantar el contenedor en el fondo.
Complementa con PHPMyAdmin
PHPMyAdmin es una herramienta web que permite manejar nuestra base de datos, es de facil uso, podrias incluirla con el siguiente archivo .yml:
version: '3'
networks:
default:
external:
name: buenosaires
volumes:
buenosaires-mysql-data:
external: true
services:
mysql:
image: mysql:latest
container_name: db
ports:
- 3306:3306
volumes:
- "./buenosaires-mysql/mysql:/etc/mysql/mysql.conf.d"
- "buenosaires-mysql-data:/var/lib/mysql"
- "./buenosaires-mysql/scripts:/tmp/scripts"
environment:
- MYSQL_HOST=${MYSQL_HOST}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_PORT=${MYSQL_PORT}
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
container_name: pma
links:
- mysql
environment:
PMA_HOST: db
PMA_PORT: 3306
PMA_ARBITRARY: 1
UPLOAD_LIMIT: 300M
restart: always
ports:
- 8081:80
volumes:
buenosaires-mysql-data:
O con un contenedor aparte a demanda:
docker run -d \
--name buenosaires-phpmyadmin \
--network buenosaires \
-e PMA_HOST=buenosaires-mysql \
-p 8080:80 \
phpmyadmin/phpmyadmin:latest
Recuerda que previamente debes tener descargado la imagen de phpmyadmin se puede hacer con la siguiente linea de comando:docker pull phpmyadmin/phpmyadmin:latest
Consejos:
Para ingresar al motor de base de datos desde la bash puedes usar el siguiente comando:mysql -h 127.0.0.1 -u root -pPASS
Para ingresar a phpmyadmin, con el campo servidor vacio, el usuario root y la contraseña del root de mysql:
Para cualquier consultoría, automatización, personalización o manejo profesional de contenedores con Docker o Kubernetes puedes contactarnos y te ayudaremos