Docker-升级基本映像

时间:2019-10-30 23:06:03

标签: docker kubernetes dockerfile docker-image

我有一个可供100个应用程序使用的基准。所有100个应用程序的Dockerfile中都有通用的基本映像。现在,我正在升级基本映像以进行OS升级或其他升级,并增加版本,并标记最新版本。  在这里,问题是,每当我更改基础映像时,所有100个应用程序都需要更改其dockerfile中的基础映像,并重建应用程序以使用最新的基础映像。  有没有更好的方法来解决这个问题?

注意:-我正在Kubernetes中运行我的容器,每个应用程序的GIT中都有Dockerfile。

4 个答案:

答案 0 :(得分:1)

如果每个应用使用Dockerfile,则无需为每个应用更改base-image:latest。基本图片更新后,您将不得不重新构建应用程序图片。之后,您需要更新应用程序以使用新图像。

例如使用this答案中的建议

答案 1 :(得分:1)

您可以使用Dockerfile ARG指令来修改FROM行(请参阅Dockerfile文档中的Understand how ARG and FROM interact)。一种可能的方法是让您的CI系统注入基础图像标签。

ARG base=latest
FROM me/base-image:${base}
...

这有可能个别开发人员会基于较旧的基础映像来构建测试映像;如果映像之间的差异仅仅是操作系统补丁,那么只要将正式映像投入生产,您就可以认为这是一个很小的可接受的风险。

除此之外,除了修改各个Dockerfiles之外,没有太多选择。您可以编写脚本

# Individually check out everything first
BASE=$(pwd)
TAG=20191031
for d in *; do
  cd "$BASE/$d"
  sed -i.bak "s@FROM me/base-image.*@FROM:me/base-image:$TAG/" Dockerfile
  git checkout -b "base-image-$TAG"
  git commit -am "Update Dockerfile to base-image:$TAG"
  git push
  hub pull-request --no-edit
done

那里也有自动的依赖关系更新工具,这些工具可能能够为您管理脚本的脚本方面。

答案 2 :(得分:0)

每当我更改基本映像时,所有100个应用程序都需要更改其dockerfile中的基本映像,并重建应用程序以使用最新的基本映像。

这是一个功能,而不是错误;在继续使用新映像之前,所有100个应用程序都需要运行测试(并可能修复任何回归)...

有一些工具可以扫描所有存储库,并自动将拉取请求提交给100个应用程序(或者,如果Dockerfile中没有普通的“ FROM”行,则可以编写自定义请求)。

答案 3 :(得分:-1)

如果需要部署基础映像的最新版本,可以,您需要再次构建,标记,推送,拉出和部署每个容器。如果您的基本映像未正确标记,则需要在所有100个文件上更改dockerfile。

但是您有一些选择,例如使用 sed 替换您的dockerfile中所有出现的内容,并执行 sh文件中指向所有应用程序目录的所有构建命令。 / p>

使用docker-compose,您可以使用一个命令更新正在运行的100个应用程序:

docker stack deploy --compose-file docker-compose.yml

但仍然需要重建容器。

编辑: 使用docker compose,您也可以使用一个命令来构建100个容器,您需要在一个compose文件中定义所有容器,并检查停靠处的compose file

相关问题