在 Docker 中,如果可能的话我应该重用基础镜像吗?

在 Docker 中,如果可能的话我应该重用基础镜像吗?

我开始在 Kubuntu 桌面上使用 Docker。在学习教程的过程中,它帮助我理解了它的工作原理,但我遇到了以下情况:

我希望至少为以下三个部署容器:

  • Web 服务器 (Apache)
  • SQL 兼容数据库 (MariaDB/MySQL)
  • Java风俗SDK(基于OpenSDK)

在搜索操作方法时,人们强烈建议使用基于 Alpine 的基础镜像,因为它们仅使用 5-6 MB 的磁盘存储空间,这非常好。只要 Docker Hub 中已经制作了基础镜像,这就可以解决我的 Web 服务器和数据库问题。

但问题在于 Java SDK,我刚刚构建了我自己的定制开发环境需要使用 Ubuntu 16.04 基础镜像(我可以将它移植到 Alpine,但是会产生太多我不想解决的问题)。

如果我理解 Docker 的工作原理,如果多个 dockerfile 使用相同的基础映像,则无需再次下载,因为每个需要它的容器都会使用它。

那么,使用 Ubuntu 16.04 基础镜像来部署 Web 服务器和数据库(以及更多容器,如果有的话)是不是一个好主意?因为使用 Docker Hub 中提到的 Alpine 版本也需要下载它们的 Alpine 基础镜像(即使它们是仅 5 MB)。

提前致谢。

只是为了澄清一下:我不要想要改变我目前正在使用的工具,这不是问题,我只是想了解 Docker 及其良好的实践。

答案1

是的,如果您对所有三个容器使用相同的基础映像,则可以节省磁盘空间,因为该基础层是这三个映像所共有的。话虽如此,Alpine 并不大,因此如果您的 DB 和 Apache 映像是基于 Alpine 的,那么情况并不像看起来那么糟糕。但是,如果您使用卷容器(例如,为 Apache 服务器提供静态内容),则可以将其基于任何现有映像,并且它将使用的唯一磁盘空间将用于您添加的内容。

相关内容