如果基础图像被更新,如何自动更新您的码头容器 [英] How to automatically update your docker containers, if base-images are updated
问题描述
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屋!