Saltar al contenido

Cómo actualizar automáticamente sus contenedores de Docker, si se actualizan las imágenes base

Solución:

Usamos un script que verifica si un contenedor en ejecución se inicia con la última imagen. También usamos scripts de inicio advenedizos para iniciar la imagen de la ventana acoplable.

#!/usr/bin/env bash
set -e
BASE_IMAGE="registry"
REGISTRY="registry.hub.docker.com"
IMAGE="$REGISTRY/$BASE_IMAGE"
CID=$(docker ps | grep $IMAGE | awk '{print $1}')
docker pull $IMAGE

for im in $CID
do
    LATEST=`docker inspect --format "{{.Id}}" $IMAGE`
    RUNNING=`docker inspect --format "{{.Image}}" $im`
    NAME=`docker inspect --format '{{.Name}}' $im | sed "s////g"`
    echo "Latest:" $LATEST
    echo "Running:" $RUNNING
    if [ "$RUNNING" != "$LATEST" ];then
        echo "upgrading $NAME"
        stop docker-$NAME
        docker rm -f $NAME
        start docker-$NAME
    else
        echo "$NAME up to date"
    fi
done

Y init parece

docker run -t -i --name $NAME $im /bin/bash

Una ‘forma de docker’ sería usar compilaciones automatizadas de docker hub. La función Vínculos al repositorio reconstruirá su contenedor cuando se reconstruya un contenedor ascendente, y la función Webhooks le enviará una notificación.

Parece que los webhooks están limitados a llamadas HTTP POST. Debería configurar un servicio para detectarlos, o tal vez usar uno de los POST para enviar servicios de correo electrónico.

No lo he investigado, pero el nuevo Plano de control universal de Docker podría tener una función para detectar contenedores actualizados y volver a implementarlos.

Puede usar Watchtower para ver las actualizaciones de la imagen desde la que se crea una instancia de un contenedor y extraer automáticamente la actualización y reiniciar el contenedor usando la imagen actualizada. Sin embargo, eso no resuelve el problema de reconstruir sus propias imágenes personalizadas cuando hay un cambio en la imagen ascendente en la que se basa. Podría ver esto como un problema de dos partes: (1) saber cuándo se ha actualizado una imagen ascendente y (2) hacer la reconstrucción de la imagen real. (1) se puede resolver con bastante facilidad, pero (2) depende mucho de su entorno / prácticas de compilación local, por lo que probablemente sea mucho más difícil crear una solución generalizada para eso.

Si puede usar las compilaciones automatizadas de Docker Hub, todo el problema se puede resolver de manera relativamente limpia utilizando la función de enlaces del repositorio, que le permite activar una reconstrucción automáticamente cuando se actualiza un repositorio vinculado (probablemente uno anterior). También puede configurar un webhook para que le notifique cuando se produzca una compilación automática. Si desea una notificación por correo electrónico o SMS, puede conectar el webhook a IFTTT Maker. Encontré que la interfaz de usuario de IFTTT es un poco confusa, pero debe configurar el webhook de Docker para publicar en https: // maker.ifttt.com / trigger / `docker_xyz_image_built` / with / key /` your_key`.

Si necesita compilar localmente, al menos puede resolver el problema de recibir notificaciones cuando se actualiza una imagen ascendente creando un repositorio ficticio en Docker Hub vinculado a su (s) repositorio (s) de interés. El único propósito del repositorio ficticio sería activar un webhook cuando se reconstruya (lo que implica que se actualizó uno de sus repositorios vinculados). Si puede recibir este webhook, incluso podría usarlo para activar una reconstrucción de su lado.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *