我有一个 AWS ECS 服务,其中包含多个几乎相同的容器。 我最初是使用每个图像的 dockerfile 构建的,它工作正常,但构建速度非常慢,需要大量重复工作。 为所有容器构建单个基础映像似乎是 Docker 的方式来做到这一点,但会导致一些开销,并且看起来有点矫枉过正,所以我避免使用它。
我可以通过使用不同的入口点文件启动每个容器来更轻松地解决这个问题,但这意味着至少有一个入口点会安装一两个系统包,这感觉有点“脏”。 我正在谈论诸如
apt-get install ...
之类的事情。 但除了启动速度慢一点之外,我想不出这有什么真正的问题。
这是一个糟糕的主意吗? 在我的入口点而不是在 docker 镜像构建中安装软件包之前,我还应该考虑其他问题吗?
您应该在映像构建中包含所需的所有包。
尝试在图像的入口点脚本中安装内容...
apt-get update && apt-get install
即使在良好的硬件上也至少需要几秒钟,这限制了您的启动时间如果所有内容都包含在您的映像中,然后远程存储库出现中断,您将无法重建映像,直到它们恢复为止,但您仍然可以启动新容器、扩展和扩展下,等等。 如果远程存储库中有包更改,您将不会看到它,直到它通过 CI 系统,并有机会对其运行系统测试。
根据图像的实际相似程度,您也许可以与多个容器共享稍大的图像。 一个常见的例子是 Web 服务器和后台工作人员共享大部分相同的代码库; Worker 本身不需要 Web 服务器,但如果它可以共享相同的图像并覆盖命令,那么您可以保存构建。 同样,共享 Docker 层中的几个额外操作系统包通常不会成为一个大的空间问题。