Cómo actualizar automáticamente los contenedores Docker desde su registro de imágenes

Docker es una herramienta que facilita la ejecución de aplicaciones en contenedores portátiles. Uno de los principales beneficios de la creación de contenedores es que las actualizaciones se administran fácilmente: todo lo que necesita hacer es reiniciar con un nuevo contenedor y existen herramientas que pueden automatizar todo este proceso.

RELACIONADO: Cómo actualizar contenedores Docker para aplicar actualizaciones de imágenes

Implementación automática de contenedores Docker

Docker es una excelente opción para canalizaciones de integración continua/implementación continua (CI/CD), ya que ayuda a automatizar ambos pasos del proceso. Los propios Dockerfiles brindan una forma de crear la imagen de su aplicación, y es bastante fácil configurar compilaciones de contenedores automatizadas desde la fuente en servicios como Github. Una vez construido y enviado a un «registro de imágenes», cualquier servidor que ejecute Docker puede descargarlo y ejecutarlo.

Esto es genial, pero aún implica ejecutar comandos en el servidor cada vez que desea actualizar. Si desea que sea realmente automático, entonces puede estar interesado en un herramienta llamada Atalaya.

Watchtower es una utilidad que se ejecuta en su host Docker y verifica periódicamente si hay actualizaciones para los contenedores. Si detecta una nueva versión de una imagen del registro del contenedor, eliminará automáticamente el contenedor y lo reiniciará de inmediato.

Esta es una característica muy atractiva, pero antes de instalarla, es importante analizar las desventajas. Hacer actualizaciones de forma completamente automática significa que tendrá menos control sobre el tiempo y las pruebas previas de la implementación, ya que cada vez que se realiza la confirmación en su repositorio y activa una compilación, los contenedores en ejecución se actualizarán. Si no es el propietario de la imagen que se está ejecutando, es posible que se actualice inesperadamente si no la excluye de Watchtower.

Si no realiza actualizaciones todos los días, es mejor que utilice una GUI de Docker como Portainer, que le permite explorar contenedores en ejecución en sus servidores y hacer clic en un botón para actualizarlos automáticamente. Esto le da más control sobre el proceso y puede ayudar a evitar actualizaciones inesperadas.

Pantalla de detalles del contenedor de Portainer

Si desea comenzar a usar Portainer, puede leer nuestra guía para configurarlo para obtener más información.

RELACIONADO: Cómo comenzar con Portainer, una interfaz de usuario web para Docker

Usando la Atalaya

Watchtower está empaquetado como un contenedor de Docker, por lo que es bastante fácil de instalar: solo un comando lo pondrá en funcionamiento:

docker run -d 
--name watchtower 
-v /var/run/docker.sock:/var/run/docker.sock 
containrrr/watchtower

Esto lanza un contenedor Watchtower y también crea un enlace que monta el docker.sock del host para que pueda interactuar con la API de Docker. De forma predeterminada, esto escanea todos los contenedores en ejecución en busca de actualizaciones cada 24 horas, que se pueden cambiar con el --interval bandera.

También puede crear un docker-compose.yml archivo para iniciar Watchtower como un servicio:

version: "3"
services:
  watchtower:
    image: containrrr/watchtower
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /root/.docker/config.json:/config.json
    command: --interval 300

«Todos los contenedores en ejecución» probablemente incluye algunas cosas que preferiría que no se actualizaran inesperadamente, incluidas las imágenes de Docker Hub sobre las que no tiene control. Puede excluir contenedores de las actualizaciones, pero solo colocando una etiqueta en el contenedor que se escanea.

Deberá configurar este indicador en la línea de comando durante docker runo especifíquelo en el proceso de construcción del contenedor usando el LABEL directiva.

docker run -d --label=com.centurylinklabs.watchtower.enable=false nginx

LABEL com.centurylinklabs.watchtower.enable="false"

También puede hacer lo contrario, pasando el --label-enable marcar al iniciar Watchtower y configurar los contenedores en «verdadero».

Ejecutar Watchtower como un servicio Docker Compose

Un mejor método, especialmente cuando solo necesita ejecutar Watchtower para un solo contenedor, es empaquetarlo en un contenedor existente. docker-compose.yml archivo y cree un alcance para que Watchtower lo busque. En este ejemplo, la imagen de NGINX recibe el alcance «nginx» y Watchtower está configurado para actualizar solo los contenedores con esa etiqueta de alcance.

version: '3'

services:
  nginx:
    image: nginx
    labels:
      - "com.centurylinklabs.watchtower.scope=nginx"

  watchtower:
    image: containrrr/watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    command: --interval 300 --scope nginx
    labels:
      - "com.centurylinklabs.watchtower.scope=nginx"

Si solo usa Watchtower de esta manera, empaquetado en un archivo de redacción con un alcance, le permitirá ejecutar varias instancias. Sin embargo, si ejecuta Watchtower sin un alcance en el mismo sistema, anulará estas instancias.

Uso de registros de terceros

Por defecto, Watchtower solo funciona con Docker Hub y cualquier otro registro público. Esto excluye ciertos servicios como el Registro de contenedores de Github, que requiere un nombre de usuario y un token de acceso personal (PAT) para extraer imágenes.

Puede agregar configuraciones para registros privados creando un config.json archivo con el siguiente contenido:

{
    "auths": {
        "ghcr.io": {
            "auth": "credentials"
        }
    }
}

El valor de «credenciales» debe establecerse en una cadena codificada en base64 de su username:password combo, o token de acceso personal en el caso de Github.

echo -n 'username:password' | base64

Luego, cuando ejecute Watchtower, pase una montura adicional para este config.json expediente.

docker run -d 
    -v config.json:/config.json
    -v /var/run/docker.sock:/var/run/docker.sock 
    containrrr/watchtower

Deja un comentario

En esta web usamos cookies para personalizar tu experiencia de usuario.    Política de cookies
Privacidad