Este README describe los pasos necesarios para preparar un entorno Docker con MySQL 8 en una VM con Ubuntu y utilizando el método de autenticación legacy (solo contraseña, sin SSL/RSA/Tunelización SSH) para development sencillo, incluyendo instalación de Docker, permisos, firewall, ejecución de scripts y backups. El script contempla la creación de una base de datos a utilizar en desarrollo, 2 credenciales para 2 desarrolladores con privilegios de root en MySQL, y una credencial extra con acceso limitado a la base de datos creada para usar en los ajustes de conexión de tus apps. Editar para cubrir más o menos necesidades.
Antes de ejecutar cualquier comando, asegúrate de estar en el directorio donde están los archivos:
cd <ruta_del_proyecto>Esto garantiza que los scripts
deploy-legacy.shyinit-users-legacy.shfuncionen correctamente y que Docker Compose pueda encontrar el archivodocker-compose-legacy.yml.
Nota: el repositorio oficial de Docker no está en los repos estándar de Ubuntu.
- Instalar dependencias esenciales:
sudo apt update
sudo apt install -y ca-certificates curl gnupg- Agregar la clave GPG de Docker:
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg- Agregar el repositorio oficial de Docker:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" \
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null- Actualizar la lista de paquetes:
sudo apt update- Instalar Docker y el plugin de Compose:
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin- Verificar la instalación:
docker run hello-world
docker compose version- Dar permisos de ejecución a los scripts:
chmod +x deploy-legacy.sh
chmod +x init-users-legacy.sh- Abrir el puerto 3306 en el firewall:
sudo ufw allow 3306/tcp
sudo ufw reloadEsto permite que herramientas externas se conecten al contenedor MySQL.
También es importante que se abra el puerto en los ajustes de red de tu VM. En mi caso estoy utilizando una VM de Oracle, por lo que debo ingresar a detalles de la instancia en mi dashboard de Oracle Cloud.
Edita el archivo .env en el directorio del proyecto con las siguientes variables:
MYSQL_DATABASE=<nombre_base_de_datos>
TZ=<Zona Horaria a usar en la BD>
MYSQL_ROOT_PASSWORD="<tu_contraseña_inicial_root>"
USER1_NAME=<desarrollador_root_1>
USER1_PASSWORD="<contraseña_desarrollador_1>"
USER2_NAME=<desarrollador_root_2>
USER2_PASSWORD="<contraseña_desarrollador_2>"
USER_FOR_API_NAME=<usuario_app>
USER_FOR_API_PASSWORD="<contraseña_usuario_app>"Ajusta los nombres y contraseñas según tu entorno.
- Bajar contenedores previos y limpiar volúmenes:
docker compose -f docker-compose-legacy.yml down -v- Desplegar contenedor con Docker Compose:
./deploy-legacy.sh- Verificar que el contenedor esté corriendo:
docker psSi el contenedor no arranca automáticamente, se puede iniciar manualmente:
docker start mysql-legacyNota: Si el contenedor se detiene luego de hacer el deploy, es porque sucedió algún error en las sentencias SQL del script
init-users-legacy.sh.
- Ingresar como root desde bash del contenedor:
docker exec -it mysql-legacy bash
mysql -uroot -p- Ingresar como usuario normal:
mysql -u<tu_usuario> -pPara realizar un backup de la base de datos <tu_base> desde el contenedor:
docker exec mysql-legacy /usr/bin/mysqldump -u<usuario> -p<contraseña> <tu_base> > backup.sqlEjemplo usando root:
docker exec mysql-legacy /usr/bin/mysqldump -uroot -p<MYSQL_ROOT_PASSWORD> <tu_base> > backup.sqlEsto genera un archivo
backup.sqlen la máquina host con todo el contenido de la base de datos.
Para restaurar desde un archivo backup.sql:
docker exec -i mysql-legacy /usr/bin/mysql -uroot -p<MYSQL_ROOT_PASSWORD> <tu_base> < backup.sql- Si utilizas contraseñas con caracteres especiales, asegúrate de envolverlas entre comillas en
.envo dentro de los scripts. - Los scripts
init-users-legacy.shydeploy-legacy.shdeben ejecutarse después de configurar el firewall y las variables de entorno. - Para cualquier cambio en usuarios de MySQL, puedes editar directamente el script
init-users-legacy.shy redeployar si es necesario. - Los archivos fuente deben estar en el formato correspondiente para el sistema en el que van a ser utilizados. En este caso, como se trata de Ubuntu, los archivos fuente tienen texto tipo UNIX. Esto es importante por cómo son interpretados los saltos de línea y otros símbolos según el sistema operativo del Host.
- Recomiendo MobaXterm para conectar con la VM, ya que tiene herramientas útiles como explorador SFTP y editor de archivos de texto donde revisar el formato de texto (UNIX/DOS/MAC) y los símbolos ocultos.