如何使用docker-compose和Dockerfile构建项目的图像?

时间:2017-12-12 23:55:14

标签: docker docker-compose gitlab dockerfile

我有一个使用docker-compose

在本地开发中运行的项目

作为gitlab和部署的组织要求的一部分,应用程序需要构建到单个Docker镜像中。

我理解这可以通过向项目添加Dockerfile来完成。

但是,我想知道是否有关于如何通过docker-compose将应用程序代码库运行多项服务的项目包含到Dockerfile部署的单个映像中的任何建议或建议,谢谢。

编辑:从我可以收集到的,方法是使用Dockerfile从应用程序代码库构建一个新映像,然后将其包含在部署环境的docker-compose.yml文件中?

编辑2:为混乱道歉。我是Docker的新手,有一点学习曲线!在这种情况下,似乎可以在gitlab注册表中构建应用程序映像,然后将该映像包含在docker-compose中进行部署,将尝试使用它。

1 个答案:

答案 0 :(得分:3)

<强> TL; DR

单个Dockerfile通常不足以替换用docker-compose制作的整个容器编排,并且不一定是一个不错的选择。

关于将docker-compose.yml文件转换为Dockerfile:

您可以将docker-compose.yml文件中的一些信息传递给您的Dockefile(例如运行的命令),但这不会是等效的,您不能对所有docker-compose.yml文件传递信息。 1}}文件内容。

您可以使用命令行替换docker-compose.yml文件(因为docker-compose正好替换它)。

<强> BUT

请注意 Dockerfilesdocker-compose serve two whole different purposes.

  • Dockerfile适用于图像构建,用于定义构建图像的步骤。

  • docker-compose是一个启动和编排容器 来构建应用程序的工具(您可以添加一些信息,如构建上下文路径或您需要的图像的名称,但不是Dockerfile内容本身的名称。

所以要求“将docker-compose.yml file转换为Dockerfile”并不是真正相关。

这更多的是将docker-compose.yml文件转换为一个(或几个)命令行以手动启动容器。

docker-compose的目的正是为了摆脱这些命令行以使事情更简单(它使其自动化)。

单个容器中的多个进程:

来自docker documentation

  

拥有多个流程是可以的,但要从中获得最大的收益   Docker,避免一个容器负责多个方面   你的整体申请

因此,如果您的入口点允许您启动多个流程,或者您使用主管,那么您可以这样做,但也许这不是最好的主意。

修改

由于我不确定你是否也清楚,这里是the difference between a container and an image

真的应该检查一下,并在使用Docker之前尝试理解这一点,因为这是非常必要的事情。