我有一个关于docker compose的问题。我是docker的新手,我无法弄清楚部署的“正确”流程。
让我们假设我们有一个“Dockerfile”,其中包含从项目源文件构建图像的步骤。 我们有一个“docker-compose.yml”,它实际上构建了这个“Dockerfile”以及另外两个服务。 这里并不重要,但可以说它们是,nginx,webapi(实际项目)和mongodb。
所以,如果我在我的机器上运行“docker compose up” - 它将创建3个图像(webapi,nginx,mongodb)并运行它们。这里的一切都很完美。
问题是,我需要做些什么才能将其部署到生产中。我尝试了什么:
我可以在生产服务器上查看git并运行“docker compose up”,它会起作用。但我认为这不是可行的方法 - 使用生产服务器来构建项目似乎很愚蠢。
我可以在本地运行“docker compose build”,获取3张图片,将它们推送到docker存储库,从存储库转到生产下载图像并逐个启动它们。在这种情况下,我根本没有在“docker compose”中看到一点,我正在失去轻松定义卷和图像之间关系的方法,我可以用docker撰写。它还需要大量的手动活动或一些自定义脚本来自动化它。
似乎有一种方法可以使用“docker machine”连接到远程服务器并使用“docker compose up”,但我无法让它起作用。由于某些原因,无法在Linux上从Windows连接到远程docker。 在进一步使用该选项之前,我需要了解/确认,远程docker的情况,以及“docker compose up”,构建将在何处发生?如果我在“docker-compose.yml”中定义了一些卷,它们是在本地计算机上还是在远程计算机上创建的?
答案 0 :(得分:0)
对于我的项目,我选择了类似于你的第二个提案,但更自动一点。 CI正在执行docker build webapi
,因为这是我的系统中实际构建的唯一部分。 Ci也在我的私人存储库中docker push
。下一步是在生产中运行docker-compose up
。 compose不构建webapi,它只是配置它而不是使用build
部分使用image
。 Docker compose还配置了所需的其他服务(nginx,mongo)和网络以供它们进行通信。即使您为其他服务创建了自定义映像,也不需要完整的开发环境来创建它们。为了完全自动化,您可以使用docker machine远程执行它。请注意,如果已经docker-compose up
已经docker pull
执行了{/ 1}},那么docker将不会更新图片。