将更新/升级语句放在 Dockerfile 中是一个好习惯吗?

Mor*_*Fam 8 docker

Docker 的新手,我正在努力使其正确。

我想创建一个 docker 容器来“深度冻结”使用 bash 脚本和大量依赖项创建的应用程序,这样我就不必再维护它了。我认为 docker 会帮助我解决这个问题。将更新/升级语句放在 Dockerfile 中(如“apt-get upgrade”)是一个好习惯吗?这不会在未来破坏应用程序,这是 docker 应该阻止的吗?

Håk*_*ist 5

您想要使用更新的基本映像(它本身是从最新的包构建)或自己更新它(例如,apt-get upgrade)的主要原因是为了获得安全修复以及其他错误修复。

你不会说太多关于那里有什么软件,但“很多依赖项”可能意味着会有安全修复程序需要跟踪。

使用容器的总体思路是,你用你需要的软件构建一个最新的镜像,测试它,然后它在整个生命周期中保持冻结状态,然后在发布新版本和新镜像时作为一个整体被丢弃已部署。

从安全角度来看,这当然意味着定期发布。

至于您将在 Debian 中获得的更新包(如果我们假设 Debian,根据您的使用apt-get),它们具有稳定(即不变)的版本。即,他们不提供打包软件的新版本(极少数例外),而是将修复程序向后移植到他们的打包版本。
这可能对您的“深度冻结”工作有所帮助,因为行为改变的可能性远低于新版本。


Nee*_*koy 1

如果你想运行,apt你将需要更新,因为它的存储库在 Docker 初始化时是空的。

从升级开始,如果您真的想“深度冻结”它,我不会建议您这样做。最好的选择是从 开始apt update,然后安装依赖项的特定版本,这样您就不会在将来的某个时候获取不兼容的版本。

除此之外 - 是的,apt当您的应用程序具有不需要位于其自己的容器中的依赖项时,在容器中运行是完全正常的。