lunes, 14 de marzo de 2016

Docker: crear una base de datos mysql (1/2)

Vamos con un ejemplo concreto de uso de contenedores docker. En esta entrada vamos a crear una base de datos de usar y tirar sin necesidad de enturbiar nuestro sistema host.

Concretamente vamos a crear un contenedor docker que:
  • El contenedor se llamará "mimysql". Recuerda que el nombre es único. Si repites el experimento te toca eliminar cada vez el contenedor o usar otro nombre.
  • Si no tenemos ninguna imagen mysql ya descargada, la imagen es la del registry y la versión será la última disponible (no la hemos especificado).
  • El demonio mysqld escuchará internamente (en el contenedor) en el puerto 3306 interno pero se mapeará al puerto 13306 del localhost (externo).
  • La contraseña del root de mysql será "mi-secreto".


Creación del contenedor

$ sudo docker run --name mimysql -p 13306:3306 \
           -e MYSQL_ROOT_PASSWORD=mi-secreto -d mysql
89a8e4f3e3d4673a8fd1b34ace7ac9a60dd90265dea6b9f92fe5fcdcd355cc54



Comprobamos que se ha creado

$ sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                     NAMES
89a8e4f3e3d4        mysql:latest        "/entrypoint.sh mysq   9 seconds ago       Up 8 seconds        0.0.0.0:13306->3306/tcp   mimysql


Conexión a la base de datos

$ mysql --host 127.0.0.1 --port=13306 -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.11 MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
Y vemos que es funcional
mysql> show schemas;
+--------------------+                                                              
| Database           |                                         
+--------------------+                                         
| information_schema |                                         
| mysql              |                                           
| performance_schema |                                         
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql> create schema prueba;
Query OK, 1 row affected (0.00 sec)

mysql> show schemas;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| prueba             |
| sys                |
+--------------------+
5 rows in set (0.00 sec)



Como se puede ver hemos alterado el estado de la base de datos creando un schema y por tanto del contenedor. Después de pararla de forma abrupta (kill) y de arrancarla (start), el contenido de la base de datos se mantiene.

Aunque el ejemplo demuestra que es posible alterar el estado del contenedor, eso va contra la naturaleza de los mismos. Los contenedores tienen que ser reemplazables y por tanto no contener datos ni las modificaciones de los mismos. En un próximo post voy a mostrar como hacerlo, pero si lo que quieres es una base de datos de prueba o test donde importar un backup y que puedes borrar sin problemas tal vez este post te sirva tal cual.

No hay comentarios: