Tutorial: Instalar y ejecutar MySQL en Docker con y sin manifiesto .yml

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

Dejá una respuesta