Por ejemplo, Laravel sail crea por defecto un entorno completo PHP + MySql o cuando creamos un fichero docker-compose es muy normal añadir el contenedor de MySql.
Para separar el contenedor de base de datos, en el artículo nos centramos en MySql, pero la misma filosofía podríamos utilizar para postgreSQL o mongoDB, vamos a crear un proyecto solo para el MySql.
El proyecto tendrá la siguiente estructura:
- Backup, directorio para poner los backups de las bases de datos
- Config, directorio donde pongo el fichero de configuración de MySql o ficheros de creación de bases de datos al arrancar los contenedores.
- Data, es el directorio donde se guardan las base de datos de MySql y se puede poner donde queráis, yo lo dejo en el proyecto por comodidad.
- docker-compose.yml, el fichero de docker con la siguiente configuración
services: mysql: image: 'mysql:8.0' container_name: 'mysql_dev' ports: - '3306:3306' environment: MYSQL_ROOT_PASSWORD: 'root' MYSQL_ROOT_HOST: '%' MYSQL_PASSWORD: 'root' volumes: - './Data:/var/lib/mysql' networks: - net_mysql command: [ 'mysqld', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci' ] networks: net_mysql: driver: bridge
- Makefile, este es un fichero bash para crear comandos y poder ejecutarlos con un alias
#!/bin/bash U_ID = $(shell id -u) up: ## start containers @echo 'Iniciando containers: UserUID=${U_ID} docker-compose up -d' UserUID=${U_ID} docker-compose up -d stop: @echo 'Parando containers: docker-compose stop' UserUID=${U_ID} docker-compose stop down: @echo 'Parando containers: docker-compose down' UserUID=${U_ID} docker-compose down mysql: UserUID=${U_ID} docker exec -it --user ${U_ID} mysql_dev mysql -u root -proot shell: UserUID=${U_ID} docker exec -it --user ${U_ID} mysql_dev bash build: @echo 'Reiniciando containers: UserUID=${U_ID} docker-compose build' UserUID=${U_ID} docker-compose build
- make up se crea el contenedor de MySql
- make stop, se paran
- make down, se paran y se borran
- make mysql, entramos en la consola de MySql
- make shell, entramos en el servidor de MySql
- make build, reconstruir el contenedor
Para utilizar make tenemos que estar en el directorio del proyecto.
Y ahora solo queda probar y arrancarlo.
Podéis descargar el código desde github:
https://github.com/depruebas/docker-compose-mysql
br> Arracamos el container
make up
Ahora vamos a obtener la IP del contenedor de MySql para saber donde tenemos que conectarnos desde otros contenedores.docker inspect 7c1391d6e988 | grep IPAddress
Este numero 7c1391d6e988 es el id del contenedor que lo obtenemos con la instrucción docker psAhora hay que probar si podemos conectarnos al MySql de docker.
Para administrarlo y porbar si funciona se puede utilizar MySql Workbench. Servidor 172.27.0.2:3306 y el usuario y password definido en la creación del contenedor, 172.27.0.2 es la IP que hemos obtenido del contenedor.
Desde la línea de comando podemos hacer lo siguiente:
docker inspect 7c1391d6e988 | grep IPAddress
Por último vamos a conectar otro proyecto creado con docker-compose con el docker de MySql existente.
Para conectar el servidor de MySql recien creado en un docker tenemos que modificar el fichero docker-compose.yml de nuestros proyectos de docker y en el apartado network asignarle la red que crear el docker de MySql, ¿y como veo la red? con
docker network ls
¿Y como se que red es? pues porque tiene el nombre de directorio donde esta el proyecto más el nombre del proyecto, en el ejemplo: docker-compose-mysql_net_mysql y este nombre es el que tenemos que asignar en el apartado networks del docker-compose.yml de la siguiente forma:
networks:
default:
external: true
name: docker-compose-mysql_net_mysql
Para poder probar la conexión desde otro contenedor docker he creado un proyecto de ejemplo, tambien esta en github.
https://github.com/depruebas/proyecto-mysql-docker el proyecto de pruebas es test-mysql-php, este proyecto crea un servidor web con Ubuntu y podeis ver como en el docker-compose asigno la red creada como indico arriba.
Para probarlo también hay un fichero Makefile para interacturar con los dockers.
Recordar que primero siempre se tiene que arrancar el proyecto de MySql, ver que IP nos ha asignado, aunque lo normal es que siempre tenga la misma, y utilizar esa IP desde otros entornos ya sea otros dockers o desde el propio host.
Y esto es todo, feliz programming
Saludos
Alex
/
También puede interesarte:
Configurar Laravel Sail para utilizar un MySql externo existente |
||