Skip to content

taquero-programador/docker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Docker

Crear una macvlan

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_red

En cada archivo compose se añade así:

networks:
  nombre_red:
    ipv4_address: ip_range

networks:
  nombre_red:
    external: true

Crear 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_net

Añadir al final de cada archivo compose.

networks:
  default:
    name: my_net
    external: true

Ahora se pueden comunicar usando el nombre de servicio y en la misma red.

Variables de entorno

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 convert

Las 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 logs

El 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.tesd

Por cada servicio debe existir un archivo .env.

Crear multiple base de datos al levantar un container

Crear un directorio en la raíz del proyecto junto a compose, dentro un archivo .sql.

mdkir init && touch init/01.sql

Dentro 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.d

Al 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 -p

Validar que un container se puede comunicar con otro

docker exec -it container1 ping container2

About

Notes and files to Docker.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages