Instalación de MySQL y phpMyAdmin con Docker

Instalación de MySQL y phpMyAdmin con Docker

Prerequisitos

docker-machine instalado en Windows, ya sea por Docker for Windows o por Docker Toolbox for Windows
Oracle VM VirtualBox instalado en Windows (Docker Toolbox for Windows lo trae en la instalación), en el caso de Docker for Windows no es necesario ya que utiliza Microsoft Hyper-V

Instalación usando Docker for Windows

Crear y montar la carpeta local en el que quedarán las bases de datos de MySQL

En Windows
Crear la carpeta para MySQL
C:\mysql

En el icono de Docker Desktop ubicado en el área de notificación (caso Docker for Windows)
Abrir menú con click derecho
 Seleccionar Settings
  Ir a Shared Drivers
   Seleccionar el disco que se quiere compartir y botón Apply

Crear la red para MySQL

En la consola
Crear la red llamada mysql-red
C:\WINDOWS\system32>docker network create mysql-red

Verificar la red mysql-red
C:\WINDOWS\system32>docker network ls

Crear el container para MySQL

Crear el container mysql-con con conexión a la red mysql-red
C:\WINDOWS\system32>docker run -d \
    --name mysql-con \
    --network mysql-red \
    -e MYSQL_ROOT_PASSWORD=P4ssw0rd \
    -v /mysql:/var/lib/mysql \
    -p 3306:3306 \
    mysql:8.0 --innodb_use_native_aio=0

Verificar el acceso a MySQL
C:\WINDOWS\system32>docker exec -it mysql-con mysql -uroot -p

Crear en MySQL los permisos para permitir conexión por phpMyAdmin
mysql> ALTER USER root IDENTIFIED WITH mysql_native_password BY 'P4ssw0rd';

Salir de MySQL
mysql> exit

Crear el container para phpMyAdmin

Crear el container phpmyadmin-con con conexión a la red mysql-red y al container mysql-con
C:\WINDOWS\system32>docker run -d \
    --name phpmyadmin-con \
    --network mysql-red \
    -e PMA_HOST=mysql-con \
    -p 8080:80 \
    phpmyadmin/phpmyadmin:edge

Verificar el acceso web

En Windows
Acceder por un navegador con la ip asignada en DOCKER_HOST en las variables de creación y con el puerto definido en el container de phpMyAdmin
http://192.168.99.100:8080/index.php


Instalación usando Docker Toolbox for Windows

Creación de una maquina para MySQL

En la consola
docker-machine create --driver virtualbox mysql-machine

Verificar la creación de la maquina
docker-machine ls

Ver las variables de creación de la máquina
docker-machine env mysql-machine

Crear y montar la carpeta local en el que quedarán las bases de datos de MySQL

Apagar la maquina mysql-machine
docker-machine stop mysql-machine

En Windows
Crear la carpeta para MySQL
C:\mysql

En VirtualBox
Seleccionar la maquina virtual mysql-machine
 Ir a Configuración
  Ir a Carpetas compartidas
   Ir a Agregar nueva carpeta compartida
    En Ruta carpeta: C:\mysql
    En Nombre carpeta: mysql
    Seleccionar Automontar y botón Aceptar

En la consola
Iniciar la maquina mysql-machine
docker-machine start mysql-machine

Ingresar a la maquina mysql-machine
docker-machine ssh mysql-machine

Verificar la carpeta para MySQL
docker@mysql-machine:~$ df

Crear la red para MySQL

Crear la red llamada mysql-red
docker@mysql-machine:~$ docker network create mysql-red

Verificar la red mysql-red
docker@mysql-machine:~$ docker network ls

Crear el container para MySQL

Crear el container mysql-con con conexión a la red mysql-red
docker@mysql-machine:~$ docker run -d \
    --name mysql-con \
    --network mysql-red \
    -e MYSQL_ROOT_PASSWORD=P4ssw0rd \
    -v /mysql:/var/lib/mysql \
    -p 3306:3306 \
    mysql:8.0 --innodb_use_native_aio=0

Verificar el acceso a MySQL
docker@mysql-machine:~$ docker exec -it mysql-con mysql -uroot -p

Crear en MySQL los permisos para permitir conexión por phpMyAdmin
mysql> ALTER USER root IDENTIFIED WITH mysql_native_password BY 'P4ssw0rd';

Salir de MySQL
mysql> exit

Crear el container para phpMyAdmin

Crear el container phpmyadmin-con con conexión a la red mysql-red y al container mysql-con
docker@mysql-machine:~$ docker run -d \
    --name phpmyadmin-con \
    --network mysql-red \
    -e PMA_HOST=mysql-con \
    -p 8080:80 \
    phpmyadmin/phpmyadmin:edge

Verificar el acceso web

En Windows
Acceder por un navegador con la ip asignada en DOCKER_HOST en las variables de creación y con el puerto definido en el container de phpMyAdmin
http://192.168.99.100:8080/index.php

Permitir el acceso web desde otro equipos de la LAN

En VirtualBox
Seleccionar la maquina virtual mysql-machine
 Ir a Configuración
  Ir a Red
   Ir al Adaptador que aparece Conectado a: NAT
    Desplegar a Avanzadas
     Seleccionar botón Reenvío de puertos
      Ir a Agrega una nueva regla de reenvío
       Nombre: Rule LAN
       Protocolo: TCP
       IP anfitrión:
       Puerto anfitrión: 8080
       IP invitado:
       Puerto invitado: 8080
      Seleccionar botón Aceptar

Referencias y Fuentes

  1. Sitio Oficial de Docker www.docker.com
  2. Install Docker for Windows docs.docker.com/docker-for-windows/install
  3. Install Docker Toolbox on Windows docs.docker.com/toolbox/toolbox_install_windows
  4. Documentación Oficial de Docker para docker-machine docs.docker.com/machine
  5. Repositorio Oficial de Docker para MySQL hub.docker.com/_/mysql
  6. Repositorio Oficial de Docker para phpMyAdmin hub.docker.com/r/phpmyadmin/phpmyadmin
  7. How to install MySQL and phpMyAdmin with Docker blog.thenets.org/how-to-install-mysql-and-phpmyadmin-with-docker
  8. Solución para el bug de conexión de MySQL a la carpeta local stackoverflow.com/questions/48239668/fails-to-initialize-mysql-database-on-windows-10
  9. Solución para el bug en la conexión de phpMyAdmin a MySQL 8.0 stackoverflow.com/questions/49948350/phpmyadmin-on-mysql-8-0

Comentarios