在docker入口点脚本中安装系统包是不是“不好”?

问题描述 投票:0回答:1

我有一个 AWS ECS 服务,其中包含多个几乎相同的容器。 我最初是使用每个图像的 dockerfile 构建的,它工作正常,但构建速度非常慢,需要大量重复工作。 为所有容器构建单个基础映像似乎是 Docker 的方式来做到这一点,但会导致一些开销,并且看起来有点矫枉过正,所以我避免使用它。

我可以通过使用不同的入口点文件启动每个容器来更轻松地解决这个问题,但这意味着至少有一个入口点会安装一两个系统包,这感觉有点“脏”。 我正在谈论诸如

apt-get install ...
之类的事情。 但除了启动速度慢一点之外,我想不出这有什么真正的问题。

这是一个糟糕的主意吗? 在我的入口点而不是在 docker 镜像构建中安装软件包之前,我还应该考虑其他问题吗?

docker dockerfile amazon-ecs docker-entrypoint
1个回答
0
投票

您应该在映像构建中包含所需的所有包。

尝试在图像的入口点脚本中安装内容...

  • ...很慢;
    apt-get update && apt-get install
    即使在良好的硬件上也至少需要几秒钟,这限制了您的启动时间
  • ...使您容易受到远程存储库或网络中无法控制的问题
  • ...使您容易受到远程存储库速率的影响,从而限制您重复请求大量软件包安装
  • ...如果远程存储库碰巧包含超出您控制范围的不兼容更改,可能会导致您的映像失败
  • ...所有这些事情都可能在生产中发生

如果所有内容都包含在您的映像中,然后远程存储库出现中断,您将无法重建映像,直到它们恢复为止,但您仍然可以启动新容器、扩展和扩展下,等等。 如果远程存储库中有包更改,您将不会看到它,直到它通过 CI 系统,并有机会对其运行系统测试。

根据图像的实际相似程度,您也许可以与多个容器共享稍大的图像。 一个常见的例子是 Web 服务器和后台工作人员共享大部分相同的代码库; Worker 本身不需要 Web 服务器,但如果它可以共享相同的图像并覆盖命令,那么您可以保存构建。 同样,共享 Docker 层中的几个额外操作系统包通常不会成为一个大的空间问题。

© www.soinside.com 2019 - 2024. All rights reserved.