docker - 开发在 Docker 容器中运行的 Golang 应用程序的最佳实践/方法

标签 docker go development-environment

基本上就是标题所说的...是否有最佳实践或有效方法来开发将被 Dockerized 的 Golang 应用程序?我知道您可以挂载卷以指向您的源代码,它非常适用于不需要编译代码的 PHP 等语言。但是对于 Go 来说,与 Docker 一起开发似乎会很痛苦,因为我猜你几乎只有两个选择。

首先是要有一个 Dockerfile,它只是 onbuild 这样它会在容器运行时启动 go 应用程序,因此必须在每次更改时构建一个新图像(无论它是否很小)。或者,您确实将源代码目录挂载到容器目录,然后附加到容器本身并像往常一样自己手动构建/运行。

这两种方式实际上是我看到它发生的唯一方式,除非你不在 docker 容器中开发你的 Go 应用程序。只需像往常一样开发它,然后使用临时镜像方法将 Go 预先构建为二进制文件,然后在准备好运行时将其复制到容器中。我认为这可能是可行的方法,但我想就此问题询问更多专业人士,并可能获得有关该主题的一些反馈。

最佳答案

不确定这是最好的做法,但这是我的方式。

  1. Makefile 是强制性的
  2. 使用我的本地机器和我的 go 工具进行小的迭代
  3. 使用基于golang:{1.X,latest}的专用构建容器,挂载代码目录构建release,主要是保证我的代码在CI上正确构建。 (提示,这是我用于发布构建的标准 go build 命令:CGO_ENABLED=0 GOGC=off go build -ldflags -s -w)
  4. 测试代码
  5. 然后使用FROM scratch构建发布容器(复制bin+入口点)
  6. 将您的图像推送到您的注册表

步骤 3 到 6 是 CI 的任务。

重要说明:由于新的多阶段构建功能,这正在改变:https://docs.docker.com/engine/userguide/eng-image/multistage-build/ ,不再构建与发布容器。

构建容器和发布容器将合并到一个多阶段构建中,因此一个 Dockerfile 具有(不确定语法是否正确,但您会明白):

FROM golang:latest as build
WORKDIR /go/src/myrepos/myproject
RUN go build -o mybin

FROM scratch
COPY --from=build /go/src/myrepos/myproject/mybin /usr/local/bin/mybin
ENTRYPOINT [ "/usr/local/bin/mybin" ]

关于docker - 开发在 Docker 容器中运行的 Golang 应用程序的最佳实践/方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44061696/

相关文章:

docker - TravisCI-Docker-Exec失败

selenium - 自定义 Selenium Hub 官方 docker 镜像返回 'Permission denied'

go - 与 make channel 相关的奇怪死锁

GO:从列表中输入断言

docker - 我自己对 boot2docker 的自定义没有反射(reflect)到 iso 镜像中

docker - 如何验证我的 docker-compose.yml?

html - 从 Google 搜索结果页面中提取 URL

python - 如何将环境变量添加到 Django 项目中

docker - 在 Docker 中设置 Go Glide

ruby-on-rails - RAILS_ENV vs Rails.env?为什么值不同?