如果基础镜像已更新,如何自动更新您的 docker 容器

新手上路,请多包涵

假设我有一个基于 ubuntu:latest 的简单容器。现在有一个安全更新,并且 ubuntu:latest 在 docker repo 中更新。

  1. 我怎么知道我的本地映像及其容器在后面运行?

  2. 是否有一些自动更新本地图像和容器以遵循 docker repo 更新的最佳实践,这实际上会给你在传统的 ubuntu 机器上运行无人值守升级的相同好处

原文由 hbogert 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 777
2 个回答

一种方法是通过您的 CI/CD 系统来驱动它。构建父映像后,请使用该父映像扫描您的 git 存储库以查找图像。如果找到,然后您将发送拉取请求以碰撞到图像的新版本。如果所有测试都通过,拉取请求将被合并,并且您将拥有一个基于更新父级的新子图像。可以在此处找到采用这种方法的工具示例: https ://engineering.salesforce.com/open-sourcing-dockerfile-image-update-6400121c1a75。

如果你不控制你的父图像,如果你依赖官方的 ubuntu 图像,你可以编写一些工具来检测父图像标签或校验和的变化(不一样事物,标签是可变的)并相应地调用子图像构建。

原文由 Ma3oxuct 发布,翻译遵循 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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进