假设我有一个基于 ubuntu:latest
的简单容器。现在有一个安全更新,并且 ubuntu:latest
在 docker repo 中更新。
我怎么知道我的本地映像及其容器在后面运行?
是否有一些自动更新本地图像和容器以遵循 docker repo 更新的最佳实践,这实际上会给你在传统的 ubuntu 机器上运行无人值守升级的相同好处
原文由 hbogert 发布,翻译遵循 CC BY-SA 4.0 许可协议
假设我有一个基于 ubuntu:latest
的简单容器。现在有一个安全更新,并且 ubuntu:latest
在 docker repo 中更新。
我怎么知道我的本地映像及其容器在后面运行?
是否有一些自动更新本地图像和容器以遵循 docker repo 更新的最佳实践,这实际上会给你在传统的 ubuntu 机器上运行无人值守升级的相同好处
原文由 hbogert 发布,翻译遵循 CC BY-SA 4.0 许可协议
我们使用一个脚本来检查正在运行的容器是否以最新的图像启动。我们还使用 upstart 初始化脚本来启动 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 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
和 init 看起来像
docker run -t -i --name $NAME $im /bin/bash
原文由 bsuttor 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答840 阅读✓ 已解决
1 回答686 阅读✓ 已解决
1 回答630 阅读
一种方法是通过您的 CI/CD 系统来驱动它。构建父映像后,请使用该父映像扫描您的 git 存储库以查找图像。如果找到,然后您将发送拉取请求以碰撞到图像的新版本。如果所有测试都通过,拉取请求将被合并,并且您将拥有一个基于更新父级的新子图像。可以在此处找到采用这种方法的工具示例: https ://engineering.salesforce.com/open-sourcing-dockerfile-image-update-6400121c1a75。
如果你不控制你的父图像,如果你依赖官方的
ubuntu
图像,你可以编写一些工具来检测父图像标签或校验和的变化(不一样事物,标签是可变的)并相应地调用子图像构建。