【问题标题】:Docker compose deploymentDocker 组合部署
【发布时间】:2024-01-05 18:29:01
【问题描述】:

我有一个关于 docker compose 的问题。我是 docker 新手,我不知道部署的“正确”流程。

假设我们有一个 "Dockerfile",其中包含从项目源文件构建映像的步骤。 我们有一个 "docker-compose.yml",它实际上是在构建这个 "Dockerfile" 以及另外 2 个服务。 这里不重要,但可以说它们是 nginx、webapi(实际项目)和 mongodb。

所以,如果我要在我的机器上运行 "docker compose up" - 它会创建 3 个映像(webapi、nginx、mongodb)并运行它们。这里的一切都很完美。

问题是,我需要做些什么才能将其部署到生产中。我尝试过的:

  • 我可以在生产服务器上签出 git 并运行 "docker compose up",它会工作。但我认为这不是要走的路——使用生产服务器来构建项目似乎很愚蠢。

  • 我可以在本地运行"docker compose build",得到3个镜像,推送到docker仓库,去生产从仓库下载镜像并一个一个启动。在这种情况下,我根本看不到 "docker compose" 的意义,我失去了轻松定义图像之间的体积和关系的方法,我可以使用 docker compose 来完成。它还需要大量手动活动,或一些自定义脚本来自动化它。

似乎有一种方法可以使用 "docker machine" 连接到远程服务器并使用 "docker compose up",但我无法让它起作用。由于某些原因,无法从 Windows 连接到 Linux 上的远程 docker。 在进一步使用该选项之前,我需要了解/确认远程 docker 和 “docker compose up” 的情况,构建将在哪里进行?如果我在 "docker-compose.yml" 中定义了一些卷,它们是在本地机器上创建还是在远程机器上创建?

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    对于我的项目,我选择了类似于您的第二个提案但更自动的选项。 CI 正在执行docker build webapi,因为这是我系统中唯一实际从源代码构建的部分。 Ci 也在对我的私人存储库执行docker push。下一步是在生产中运行docker-compose up。 compose 没有构建 webapi,它只是配置它,而不是使用 build 部分,它使用 image。 Docker compose 还配置了其他所需的服务(nginx、mongo)和网络以供它们通信。即使您为其他服务创建了自定义映像,您也不需要完整的开发环境来创建它们。对于完全自动化,您可以使用 docker machine 远程执行它。请注意,如果图像已在 docker-compose up 执行时下载,则 docker 不会更新图像,您需要 docker pull 它们。

    【讨论】:

    • 感谢 Rafal 的回复,但我希望有另一种更有效的方法。