_Logo

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):