containers - 是否可以从正在运行的单个应用程序创建单个容器映像(其中包含多个容器映像)?

为了在 docker 容器上托管 WordPress 站点,我使用了 WordPress 和 MySQL 容器映像,并创建了一个 docker-compose.yaml 文件,使其完美运行。

是否可以创建正在运行的 WordPress 应用程序的单个图像(在后台使用 WordPress 和 MySQL 容器图像),以便下次我可以继续使用该创建的图像并运行该图像来托管相同的 WordPress站点(带有 WordPress 和 MySQL 数据库)在同一个图像中可用,而不是使用 2 个单独的图像?

回答1

这是可能的,但它是一种反模式。

通过将多个不相关的东西塞进一个图像中,你最终会遇到几个问题:

  1. 每次要升级 mysql 或 wordpress 时,都必须重建映像并重新部署 containers。当您有单独的图像时,您可以部署新版本的 wordpress,而无需重新启动数据库。
  2. 您不能利用上游维护的官方图像(如官方 mysqlwordpress 图像)。
  3. 您将始终对 Docker 隐藏服务错误。 mysqlwordpress 在不同的图像中运行,Docker 守护进程知道什么时候崩溃并且可以重新启动它(给定一个适当的重新启动策略),但是如果你有一些东西在后台运行,这是不可能的.
  4. 您大大降低了灵活性:使用单独的图像,您可以将 mysql 图像替换为 Galera 集群,或者您可以运行多个 Wordpress containers 以实现负载平衡,所有这些都指向同一个后端数据库。如果您将所有内容捆绑到单个图像中,这将变得不那么方便。

也就是说,你的 CMDENTRYPOINT 脚本可以做任何你想做的事情:如果你想在开始最终的前台进程之前在后台启动一些东西,你可以这样做!如果您想启动某种流程主管,您也可以这样做!

但我认为您最好尽可能多地使用官方图像,并使用 docker-compose (或其他更高级别的编排器)从多个部分组合应用程序。

相似文章