Saltar al contenido principal
Página

Tema 3.3 - MySQL con Docker

¿Qué es un contenedor interactivo?

Son aquellos contenedores con los cuales es posible interactuar, es decir, tener entradas y salidas de ellos.


Práctica No 2

(Creación de contenedor interactivo de MySQL)


MySQL con Docker

Descargar la imagen de SQL oficial de la página de docker hub por medio del comando “docker pull mysql”

Verificar que la imagen de MySQL haya sido correctamente descarga. Para ello usamos el comando “docker images” y deberemos ver algo parecido a esto




Nota: Recordar que todo lo que se genere por medio de una imagen se va a perder, así que, para persistir los datos generados, tenemos que indicarle a docker que no guarde los datos dentro del contenedor, sino que los guarde en un directorio del sistema operativo anfitrión.

Ahora lo que haremos será crear el contenedor de la imagen de MySQL haciendo uso del comando “docker run” pero pasándole algunos parámetros adicionales

  • -v [Ruta del directorio del host]:[Ruta dentro del contenedor] Esta bandera se usa para indicarle a docker el directorio del host,  en el cual se almacenará la data generada por el contenedor. El segundo parámetro se usa para indicar la ruta interna del contenedor donde se almacenan los datos, en el caso de MySQL la ruta es /var/lib/mys

  • -p: Por medio de esta bandera se indica cuál es el puerto que se va a usar. Siempre va en pares, es decir, el puerto del contenedor : puerto del host. Para el caso de mysql el puerto es 3306, por lo tanto para nuestro caso será: 3306:3306.

  • --name: Se usa para asignarle un nombre al contenedor y el cual nos servirá para identificar el contenedor por este nombre en vez del ID. Para nuestro caso le pondremos como nombre: --name mysql.

  • También será necesario pasar algunos parámetros propios de MySQL, como lo son: la contraseña del usuario root de la bd, para ello se hace uso del parámetro -e el cual nos permite definir variables de entorno: -e MYSQL_ROOT_PASSWORD=root.

  • Finalmente usamos la bandera -d para indicarle a docker que el contenedor se ejecute como un demonio y no destruya el contenedor, seguido del nombre del nombre de la imagen base. -d mysql.

  • Adicional a las banderas anteriores se pueden pasar muchas otras, esto dependerá de la imagen que se haya descargado. Para el caso de MySQL lo que haremos será pasarle un valor que nos permita establecer el encoding de la BD. Esto se hace por medio del parámetro --character-set-server-=utf8mb4. Y un parámetro para indicar el uso de colecciones en la BD: --collation-server=utf8mb4_unicode_ci.
Para nuestro caso el comando completo para la creación del contendor Docker de MySQL será: docker run -p 3307:3307 --name mysql -v "C:\Users\UserQV\Documents\Documentos Docker\mysql":/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql --character-set-server=utf8 --collation-server=utf8_unicode_ci



Es posible que docker solicite las credenciales de Windows para permitir el acceso a los archivos del sistema.


Si al momento de lanzar el comando de Docker para crear el contenedor, sale un error como el siguiente:



Se deben listar los contenedores de docker y luego eliminarlo. Esto se logra con los siguientes comandos, “docker container ls --all” para listar todos los contenedores creados y luego eliminar el contenedor que está generando el error por medio del comando “docker rm [Id Contenedor]”


Una vez creado el contenedor, docker nos dará un código Hash, el cual es el que se utiliza para identificar al contenedor, pero si recordamos en el comando a través del parámetro --name se indicó el nombre con el que se identificará el contenedor, que en nuestro caso es mysql.

Esto lo podemos verificar listando los contenedores por medio del comando “docker ps”



Acá vemos que el contenedor se encuentra arriba. Ahora, para acceder al contenedor y poder trabajar con él, lo que debemos hacer es acceder por medio del comando “docker exec -it [nombre] [comando a ejecutar dentro del contenedor]”.

docker exec -it mysql mysql -uroot -p


Como vemos en la imagen ahora estamos conectados a mysql, pero el mysql del contenedor, y dentro de él podemos realizar las tareas que queramos, por ejemplo ver las bases de datos:

mysql> show databases;


















Ahora para verificar que los datos generados en el contenedor sean persistidos en el host, los que haremos será crear una nueva base de datos en el mysql del contenedor y veremos cómo esta es almacenada en la ruta que se indicó al momento de crear el contenedor. Para ello ingresaremos un pequeño script para la crear la BD “CREATE DATABASE IF NOT EXISTS Peliculas;”



Ahora algunas consideraciones a tener en cuenta:

  • Una vez se crea un contenedor con el comando run, ya no es necesario volver a usar este comando para subir el contenedor, sino que lo hacemos por medio del comando docker start [nombre contenedor].
  • Para detener un contenedor se usa el comando docker stop [nombre contenedor]
  • Para eliminar un contenedor se usa el comando docker rm [nombre contenedor]. Al eliminar un contenedor se elimina su instancia mas no los datos generado por éste (siempre y cuando se le haya indicado el volumen del host para que los persistaSi se llegará a necesitar un cliente gráfico para la administración de la base de datos, bastaría con pasar la ip de mysql y las credenciales usadas al momento de la instalación.
  • Los contenedores son objetos inmutables (No pueden cambiar). Para trabajar con aplicaciones complejas o entrelazadas entre sí, la idea es que se tenga un contenedor por cada servicio. 




Última modificación: lunes, 11 de mayo de 2020, 21:37