martes, 18 de febrero de 2020

Docker: inicio automatico de contenedores

Docker e inicio automatico de contenedores

Cuando implementamos un contendor, queremos usualmente que siga corriendo, a pesar que el usuario se desconecte o que el servidor sea reiniciado.

Como mantener el proceso en ejecución tras la desconexión del usuario

Para resolver el primer punto, que siga corriendo cuando el usuario que lo inició se desconecte, debemos iniciar el contenedor como un demonio. Para esto simplemente usamos el parámetro -d.

Como mantener el proceso en ejecución tras el reinicio del servidor

En un escenario más complejo, optaremos por automatizar el proceso de los contenedores a través de docker-compose, el cual nos permite incluir un archivo yaml con la configuración deseada, incluyendo imagen, puntos de montaje, puertos, etc.

En el mismo archivo yaml, se puede añadir la opción "restart: always", lo que hará que cada vez que se reinicie el servidor (VM), se reinicien automáticamente los contenedores listados con esa opción.

Resumen

En resumen, para iniciar los contenedores, que estos sigan corriendo al desconectarse y que inicien cada vez que el servidor es reiniciado, usaremos el siguiente comando:

sudo docker-compose up -d

Archivo YAML ejemplo

Un archivo YAML de ejemplo es el siguiente:

Nombre de archivo: docker-compose.yml

Contenido del archivo:

# ###################
version: '1'

services:

  postgres:
    container_name: postgres
    image: postgres
    restart: always

  nginx:
  image: nginx
  volumes:
   - ./mysite.template:/etc/nginx/conf.d/mysite.template
  ports:
   - "8080:80"
  environment:
   - NGINX_HOST=foobar.com
   - NGINX_PORT=80
  command: /bin/bash -c "envsubst < /etc/nginx/conf.d/mysite.template > /etc/nginx/conf.d/default.conf && exec nginx"

    depends_on:
     - postgres