我现在正在安装OpenStack Keystone。对于单机版,Keystone需要三个组件: mysql、python和apache2。
我绝对不能把它们都选到基础上,我把python作为基础镜像,其他的则是作为RUN语句插入来安装mysql和apache2的。
我认为RUN语句是重复的,因为这三个组件都存在于Docker公共注册表中。
是否有任何好的解决方案或适当的方式来重用现有的外部Dockerfile?
发布于 2018-09-01 23:58:31
这里似乎对Dockerfile的作用有一些混淆:它定义了一个单一的Docker镜像。一般来说,在Docker中运行应用程序的推荐方式是为每个服务提供一个容器,并根据需要将它们连接到其他容器中的其他服务(稍后将对此进行详细介绍)。
在您的例子中,您的应用程序听起来像是由Python (需要OpenStack和Apache来运行)和MySQL组成的。因此,我将在您的Dockerfile中安装Python和Apache,并将MySQL (可能只使用公共存储库中的映像)设置为OpenStack容器通过网络连接到的单独容器。
如上所述,这个场景是运行Docker应用程序的推荐方式--它遵循Unix的“每个应用程序只做一件事,但做得很好”的范例。每个容器只做一件事,并连接到其他容器中的任何其他服务。但是在同一个容器中运行多个服务是可能的。Keystone在同一个容器中运行在Apache/python和MySQL上。如果这是你的目标,你可以写一个Dockerfile来安装所有的东西,并让所有的东西一起运行。这个Dockerfile文件可能非常复杂,需要一个让MySQL和Apache协同工作的入口点。您很可能会重复标准MySQL和Apache映像中已经完成的大量工作。
发布于 2018-09-02 03:25:39
您可以使用mysql, python, and apache2.来使用Docker Compose来运行您的应用程序
使用Docker compose将允许您使用单个命令控制应用程序设置。你只需要写一个DockerCompose.yml文件以及与你将要设置的容器相对应的Dockerfiles文件。
在您的例子中,您可以有一个dockerfile来设置python和apache2容器,以及其他Dockerfile,它以mysql作为基础镜像来设置所述容器。
https://stackoverflow.com/questions/52129573
复制相似问题