Dockerfile之间的重复

时间:2018-09-01 15:28:33

标签: docker duplicates dockerfile

我现在正在安装OpenStack Keystone。 对于独立的Keystone,需要三个组件:mysql,python和apache2。

绝对不能将它们全部都作为基础,我将python作为基础映像,并且将其他作为RUN语句插入以安装mysql和apache2。

我认为RUN语句是重复的,因为这三个组件都存在于Docker Public Registry中。

是否有任何好的解决方案或适当的方法可以重用现有的外部Dockerfile?

2 个答案:

答案 0 :(得分:0)

在这里,关于Dockerfile的功能似乎有些困惑:它定义了一个Docker映像。通常,在Docker中运行应用程序的推荐方法是为每个服务都有一个容器,并根据需要将它们连接到其他容器中的其他服务。

在您的情况下,听起来您的应用程序由OpenStack Keystone(需要运行Python和Apache)和MySQL组成。因此,我将在您的Dockerfile中安装Python和Apache,然后将MySQL(可能仅使用公共存储库中的映像)设置为一个单独的容器,OpenStack容器将通过网络连接到该容器。

如上所述,此方案是运行Docker应用程序的推荐方法-它遵循Unix范式“每个应用程序仅做一件事,但做得很好”。每个容器仅做一件事,并连接到其他容器中的任何其他服务。但是可以在同一个容器中运行多个服务-例如Keystone在同一容器中的Apache / python和MySQL上运行。如果这是您的目标,那么您将编写一个Dockerfile来安装所有内容并使所有内容一起运行。这个Dockerfile可能非常复杂,并且需要一个使MySQL和Apache一起工作的ENTRYPOINT。您很可能会重复复制标准MySQL和Apache映像中已经完成的许多工作。

答案 1 :(得分:0)

您可以使用Docker Compose来运行具有mysql, python, and apache2.的应用程序

使用Docker compose将允许您使用单个命令来控制应用程序设置。您只需要编写一个DockerCompose.yml文件以及与您将要设置的容器相对应的Dockerfile。

在您的情况下,您可以具有用于设置python和apache2容器的dockerfile,以及具有mysql作为用于设置所述容器的基本映像的其他Dockerfile。