Base de datos MySQL local con Docker

Uno de los mejores casos de uso de Docker en un entorno de desarrollo local es la posibilidad de ejecutar, cuando lo necesitemos, una o varias instancias de servicios como bases de datos. Podemos usar Docker a nuestro favor para crear y ejecutar exactamente las versiones de la base de datos que requerimos al instante y, cuando deje de ser necesario, detener los servidores para ahorrar recursos en nuestros equipos locales.

Empezando por un ejemplo bastante general, el siguiente comando funcionará para crear un contenedor de base de datos:

docker run --name mysql-dev-5.7 \
     -p 3306:3306 \
     -e MYSQL_ROOT_PASSWORD=supersecurepassw0rd \
     -d mysql:5.7

Los parámetros del comando son:

  • El nombre del contenedor especificado con la bandera --name, que debería ser un nombre bastante descriptivo para futura referencia, por ejemplo, cuando hagamos un docker start mysql-dev-5.7.
  • El enlace del puerto del contenedor a un puerto local, hecho especificando -p seguido de los números de puerto local y luego el puerto del contenedor. En este caso es bastante simple: El puerto 3306 local quedará enlazado al puerto 3306 del contenedor.
  • La contraseña de la base de datos, pasada como una variable de entorno -e. De acuerdo a la documentación de MySQL en Docker Hub la variable de entorno MYSQL_ROOT_PASSWORD especifica la contraseña del usuario root de la base de datos. En este ejemplo usamos una contraseña bastante genérica que servirá bien para propósitos de desarrollo en un entorno local.
  • Finalmente lo más importante: El nombre de la imagen a usar y su tag (versión) asociada. En este caso el comando creará un contenedor con la versión más reciente dentro de la rama 5.7 de MySQL. Si deseas, por ejemplo, ejecutar un servidor con la versión 8 simplemente tendrías que usar -d mysql:8.0.

La documentación de la imagen de MySQL en Docker Hub especifica más ejemplos. Revísala para tener una mejor referencia.

Y finalmente para más detalles sobre las opciones adicionales puedes revisar la referencia del comando docker run.