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

Dav*_*mas 2 gitlab docker dockerfile docker-compose

我有一个在本地开发中运行的项目,使用 docker-compose

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

我知道这可以通过向Dockerfile项目添加 a来完成。

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

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

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

vmo*_*eco 6

TL; 博士

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

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

您可以将docker-compose.yml文件中的一些信息传递给您的Dockefile(例如要运行的命令),但这并不等效,并且您无法对所有docker-compose.yml文件内容执行此操作。

你可以docker-compose.yml用命令行替换你的文件(就像docker-compose替换它一样)。


请记住这一点,Dockerfilesdocker-compose 服务于两个完全不同的目的。

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

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

因此,要求“将 a 转换docker-compose.yml file为 a Dockerfile”并不真正相关。

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

的目的docker-compose正是摆脱这些命令行,使事情变得更简单(它自动化)。

单个容器中的多个进程:

docker 文档

拥有多个进程是可以的,但是为了从 Docker 中获得最大收益,请避免一个容器负责整个应用程序的多个方面

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

编辑

由于我也不确定您是否清楚,这里是container 和 image 之间的区别

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