【问题标题】:Deploy Go Service in production with Docker使用 Docker 在生产环境中部署 Go 服务
【发布时间】:2019-09-27 11:39:57
【问题描述】:

我正在使用 Docker 开发 Go 服务,并认为当它被编译时,要在生产中部署代码,我只需要 docker compose 和在我的注册表上发布的 Docker 映像。

由于我来自 PHP 世界,我习惯于克隆我的整个项目来部署它。

有什么方法可以只使用 docker-compose 文件来部署我的项目?

我在this post看到我只能git clone一个文件,但是感觉这不是一个好办法,用Docker部署一个Go微服务的最佳实践是什么?

【问题讨论】:

  • 事实上,您应该能够使用推送到 Docker 注册表的映像和提及该注册表的 docker-compose.yml 文件来部署您的项目。 Go 和 PHP 都是如此。您遇到了什么具体问题?
  • @David Maze 我没问题,但我正在寻找一个好的工作流程来部署到使用 docker 的 prod 并继续。我知道不需要我的整个源代码,但是如果我没有从 git 获取我的 docker-compose 文件,我应该如何获取它?
  • 当然你可以在Docker中部署Go程序。这已经完成了数千或数百万次。你试过什么?显示您的相关代码/配置/Dockerfile。你遇到了什么问题?
  • @filmzy,不问是否可能!这不是关于代码,而是关于工作流。

标签: git docker go


【解决方案1】:

您的问题中有两个不同的问题,我不确定您要寻找哪些问题的答案。

Q1:为我的 Go 项目创建 Dockerfile 的好方法是什么 A1:看看这里的例子:https://docs.docker.com/develop/develop-images/multistage-build/。如果您需要 git clone,请克隆整个源代码树,就像使用 php...

Q2:现在我有了自己的图像,如何在生产中使用它。 A2:确保它在某个存储库(公共或私有)上可用。然后在启动容器时引用该映像(使用它的全名,其中包括 repo 服务器的 FQDN,如果您不使用 Docker Hub)。此时无需“git clone”任何东西......

【讨论】:

  • 感谢您的回答,弗兰克。我对 q1 没有意见。我已经在 AWS ECR 上有一个 docker 映像。现在我明白不需要源代码了,所以将它放在服务器上可能是一个不好的做法,但是我应该在本地编写我的 docker compose 吗?
  • 这取决于您希望如何部署到生产环境。它是独立的 docker 主机吗?那么 docker-compose.yaml 文件将是最好的解决方案,因为该文件将描述您的应用程序(图像、它可能需要的卷、暴露的端口等),并且该文件可以/应该存储在 git 中,因此它在版本之下控制。如果您要部署到 Swarm 集群,您可以使用相同的文件来创建“堆栈”。如果您要部署到 Kube 集群,那么 kube deployment.yaml 文件将是更好的选择。但最主要的是您的应用程序在图像中。所以你不需要服务器上的源文件。
  • 现在我坚持使用 docker compose,因为我的应用程序中有多个容器。问题是,我应该将我的部署文件与我的源代码放在同一个仓库中吗?将所有内容都放在一个仓库中是一种不好的做法吗?
  • 这个问题没有正确和错误的答案。我会将撰写文件保存在同一个存储库中,因为它与该软​​件相关联......但是我知道由于权限而将它们保存在单独的存储库中的公司。
  • 好的,我在一家初创公司工作,所以我的团队不够大,不会出现这种问题。但是对于安全性来说,尽可能少地公开源代码不是更好吗?如果我让 docker 在同一个 git 中编写文件,我会将服务器链接到我的源代码。这是我的担心。
猜你喜欢
  • 2021-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-15
  • 1970-01-01
  • 1970-01-01
  • 2017-11-19
  • 2020-09-05
  • 2016-03-10
相关资源
最近更新 更多