Como ya hemos dicho el contenedor no debe contener estado alguno que lo convierta en una elemento valioso e irremplazable con datos. Tenemos varios mecanismos para hacer esto, pero el que vamos a ver hoy en acción es el de los volúmenes de docker. Se trata de mapear un directorio del host anfitrión para que sea accesible dentro del contenedor. Lógicamente lo que dejemos ahí desde cualquier extremo (host o contenedor) es visible para el contrario.
Siguiendo con el tema de la base de datos, supongamos que tenemos la carpeta /home/usuario/db y que es donde vamos a ubicar los schemas de nuestra mysql.
Creamos el contenedor desde cero indicando este volumen. La novedad es el switch -v:
$ sudo docker run --name mimysql2 -p 13307:3306 \ -v /home/usuario/db:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=mi-secreto -d mysql ebe6d5b6c4854a86a781e48386c5d6107b05ec6e10b16654feb5282028254257Nos conectamos a ella y alteramos el estado.
$ mysql --host=127.0.0.1 --port 13307 -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. 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> use prueba Database changed mysql> create table tabla_datos(id int(4), nota varchar(20)); Query OK, 0 rows affected (0.00 sec) mysql> insert into tabla_datos values (1,'hola mundo'); Query OK, 1 row affected (0.01 sec) mysql> select * from tabla_datos; +------+------------+ | id | nota | +------+------------+ | 1 | hola mundo | +------+------------+ 1 row in set (0.01 sec)
Eliminamos el contenedor “mimysql”
$ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ebe6d5b6c485 mysql:latest "/entrypoint.sh mysq About a minute ago Up About a minute 0.0.0.0:13307->3306/tcp mimysql 89a8e4f3e3d4 mysql:latest "/entrypoint.sh mysq About an hour ago Up 51 minutes 0.0.0.0:13306->3306/tcp some-mysql $ sudo docker rm -f ebe6d5b6c485 ebe6d5b6c485
Volvemos a crear un nuevo contenedor y le montamos el volumen donde está la base de datos.
$ sudo docker run --name mimysql -p 13307:3306 \ -v /home/usuario/db:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=mi-secreto -d mysql 83f848a88181a04f4c55b782bfe8bea988fa6d7a5c5b7936ae3f112db246f01aNos conectamos a la base de datos y vemos si existe el schema que creamos con el otro contenedor.
$ mysql --host=127.0.0.1 --port 13307 -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. mysql> show schemas; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | prueba | | sys | +--------------------+ 5 rows in set (0.00 sec) mysql> use prueba; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> select * from tabla_datos; +------+------------+ | id | nota | +------+------------+ | 1 | hola mundo | +------+------------+ 1 row in set (0.00 sec)Si te has quedado con ganas de mucho más, aquí tienes algunos enlaces interesantes:
No hay comentarios:
Publicar un comentario