Permite crear un puente a la puerta de enlace, y asignar a cada container una ip desde el router.
Desde docker
docker network create -d macvlan \
--subnet=192.168.0.0/24 \
--gatewaye=192.168.0.1 \
-o parent=driver_equipo nombre_redEn cada archivo compose se añade así:
networks:
nombre_red:
ipv4_address: ip_range
networks:
nombre_red:
external: trueCrear directamete desde el compose.
# asignar a cada container una ip
networks:
nombre_red:
ipv4_address: ip_range
networks:
nombre_red:
driver: macvlan
driver_opts:
parent: driver_equipo
ipam:
config:
- subnet: "192.168.0.0/24"
- gatewaye: "192.168.0.1"Crear una red docker para que todos los container se conecten y se puedan ver, usando el nombre de servicio o el container_name
docker network create my_netAñadir al final de cada archivo compose.
networks:
default:
name: my_net
external: trueAhora se pueden comunicar usando el nombre de servicio y en la misma red.
Se puede crear un archivo .env en el mismo lugar donde esta el archivo compose, en cada variable de entorno de compose el valor sera ${VARIABLE}.
# insatalar el docker compose plugin
sudo apt install docker-compose-plugin
# validar el resultado sin construir el container
docker compose convertLas variables de entorno del shell tienen prioridad sobre los archivos .env.
Ver los logs es un contenedor en ejecución.
# usando docker. el comando se puede ejecutar desde cualquier lugar/directorio.
docker logs nombre_container
# usando el plugin. el comando se ejecuta en el directorio del proyecto
docker compose logsEl archivo se puede colocar en otro directorio diferente al de compose, para mandarlo llamar se usa env_file: - ./path/.env, el archivo tambien puede cambiar de nombre; .env.test, .env.prod.
# quitar enviroment y los valores debajo
# despues de image
env_file:
- /path/env.tesdPor cada servicio debe existir un archivo .env.
Crear un directorio en la raíz del proyecto junto a compose, dentro un archivo .sql.
mdkir init && touch init/01.sqlDentro del archivo añadir las reglas de creación y permisos de usuario.
CREATE DATABASE IF NOT EXISTS `name_databse`;
GRANT ALL ON `name_databse`.* TO 'name_user'@'%';Caso adicional para crear user, db y asignarle permisos.
# crear password para mysql
mysqladmin --user=root --password "pass"
# phpmyadmin no soporta el inicio con root, crear un nuevo user
CREATE USER 'phpmyadmin'@'localhost' IDENTIFIED BY 'password';
# permisos de super admin (acceso general)
GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION;
# crear DB y usuario con permisos root solo para esa DB
CREATE DATABASE 'docker_test';
# user para esa DB
CREATE USER 'userdockertest'@'localhost' IDENTIFIED BY 'passuserdocker';
# permiso root solo para esa DB
GRANT ALL ON 'docker_test'.* TO 'userdockertest'@'localhost' IDENTIFIED BY 'passuserdocker' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;En volumes añadir los siguiente:
volumes:
- ./init/:/docker-entrypoint-initdb.dAl levantar el archivo compose, se crea la base definida por defecto y las que estan dentro del archivo .sql.
# o acceder al container y ejecutar el proceso manualmente
docker exec -it mariadb bash
mysql -pdocker exec -it container1 ping container2