Subiendo un nivel en Docker con Docker Compose
Volvemos con un artículo sobre Docker, ésta vez subiendo un poco el nivel ya que me metí con Docker-Compose, pero ¿qué es Docker-Compose?
Básicamente es un archivo yaml en el que podemos poner todas las configuraciones de todos los contenedores que necesitamos para que con un solo comando se creen que todos a la misma vez, o incluso, se actualicen.
Es mucho más fácil usar éste archivo que tener que estar corriendo cada comando largo de docker para levantar uno por uno cada contenedor que tengamos. Y si tenemos mucho seguramente será super engorroso hacerlo. Imagínense 10 contenedores en el que en cada uno de ellos tenés que ejecutar un comando parecido a éste:
docker run -d \
--name NombreServerDLNA \
--net=host \
--restart=always \
-v /ruta/a/tu/contenido:/media \
-e MINIDLNA_MEDIA_DIR=/media \
-e MINIDLNA_FRIENDLY_NAME=MyMiniDLNA \
vladgh/minidlna
Vos te acordarías de todas esa variables y rutas y parámetros para levantar el contenedor? No lo creo verdad?
Con Docker-Compose lo único que tenemos que hacer es armar el archivo adecuadamente y ejecutarlo.
Les paso un ejemplo de mi docker-compose:
version: "3"
services:
pihole:
container_name: pihole
image: pihole/pihole:latest
ports:
- "53:53/tcp"
- "53:53/udp"
- "67:67/udp"
- "8080:80/tcp"
- "4443:443/tcp"
environment:
TZ: 'America/Argentina/Buenos_Aires'
WEBPASSWORD: 'password'
# Volumes store your data between container upgrades
volumes:
- './etc-pihole/:/etc/pihole/'
- './etc-dnsmasq.d/:/etc/dnsmasq.d/'
dns:
- 127.0.0.1
- 1.1.1.1
cap_add:
- NET_ADMIN
restart: always
minidlna:
container_name: ServerDLNA
image: vladgh/minidlna:latest
environment:
MINIDLNA_MEDIA_DIR: '/media'
MINIDLNA_FRIENDLY_NAME: ServerDLNA
volumes:
- '/media/:/media'
network_mode: host
restart: always
jellyfin:
container_name: jellyfin
image: jellyfin/jellyfin:latest
environment:
- UID=1000
- GID=100
volumes:
- /media/docker/jellyfin/config:/config
- /media/Peliculas:/media/Movies
- /media/Series:/media/TV
- /media/docker/jellyfin/cache:/cache
network_mode: host
restart: always
portainer:
container_name: portainer
image: portainer/portainer:latest
volumes:
- '/var/run/docker.sock:/var/run/docker.sock'
- '/media/docker/portainer_data:/data'
ports:
- 9000:9000/tcp
network_mode: host
restart: always
transmission:
container_name: transmission
image : jaymoulin/transmission
command: transmission-daemon -f -g /config
volumes:
- /media/docker/transmission/config:/config
- /media/torrent/finish:/finish
- /media/torrent/temp:/temp
ports:
- 9091:9091
- 51413:51413
- 51413:51413/udp
expose:
- 9091
restart: always
Con éste simple archivo ya configurado podemos tener 5 servicios andando a partir de un solo comando. Como hacemos para poder levantar todos esos servicios a la vez? Con el simple comando:
$ docker-compose up -d
Este comando hará que Docker busque en el directorio en donde está el archivo docker-compose.yml o .yaml y leerá cada configuración y levantará (en el caso que esté bien configurado) cada contenedor que tenga ese archivo por lo que hace que la tarea de armar y administrar los contenedores sea mucho más fácil. Es más, si necesitás varios servicios que se interconecten tenés todo armado en un solo archivo y podés ver bien como está cada servicio conectado al otro.
Sé que puede ser engorroso o hasta dificil arrancar a usar Docker Compose pero la verdad es una gran solución a la hora de tener varios servicios andando en nuestra RaspberryPi. Si a nosotros nos resulta útil imagínensea a los que trabajan entre 8 y 10 horas administrando servidores, contenedores y servicios.
No olviden seguirnos en las redes sociales (consultas también):
- Twitter: @NeoSiteLinux
- Facebook: NeoSiteLinux
- Instagram: @neositeproducciones
- Telegram (canal): @NeoSiteLinux
- Telegram (canal de audios): @NeoSiteLinuxPodcast
- Telegram (grupo de chat): @NeoSiteLinuxgrupo
- Youtube: NeoSiteLinux
- iTunes: Plataforma en Español
- Patreon: NeoSiteLinux en Patreon
- Swoot: Cuenta en Swoot