如果基础图像被更新,如何自动更新您的码头容器 [英] How to automatically update your docker containers, if base-images are updated

查看:156
本文介绍了如果基础图像被更新,如何自动更新您的码头容器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

说我有一个基于 ubuntu的最简单的容器:最新的。现在有一个安全更新程序,ubuntu:最新的在docker repo中更新。



1)知道我的本地图像和容器是否在后面运行? 2)是否有一些最佳做法,可以自动更新本地图像和容器,以便遵循docker repo更新,这实际上会给您提供无人值守升级的相同优点在传统的ubuntu机器上运行

解决方案

我们使用一个脚本来检查运行容器是否以最新的映像启动。我们还使用upstart init脚本来启动Docker映像。

 #!/ 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 $ CID
do
LATEST =`docker inspect --format {{.Id}}$ IMAGE`
RUNNING =`docker inspect --format{{.Image}}$ im`
NAME ='docker inspect --format'{{。 Name}}'$ im |最后:$ LATEST
echo运行:$ RUNNING
如果[$ RUNNING!=$ LATEST ];然后
echoupgrade $ NAME
stop docker- $ NAME
docker rm -f $ NAME
start docker- $ NAME
else
回调$ NAME最新
fi
done

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


Say I have a trivial container based on the ubuntu:latest. Now there is a security update and ubuntu:latest is updated in the docker repo .

1) How would I know my local image and its containers are running behind?

2) Is there some best practice for automatically updating local images and containers to follow the docker repo updates, which in practice would give you the same niceties of having unattended-upgrades running on a conventional ubuntu-machine

解决方案

We use a script which checks if a running container is started with the latest image. We also use upstart init scripts for starting the docker image.

#!/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

And init looks like

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

这篇关于如果基础图像被更新,如何自动更新您的码头容器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆