基本上标题是什么......是否有最佳实践或有效的方法来开发将被Docker化的Golang应用程序?我知道你可以安装卷来指向你的源代码,它适用于PHP之类的语言,你不需要编译你的代码。但是对于Go来说,与Docker一起开发似乎很痛苦,因为我猜你几乎只有两个选项。
首先要有一个只是onbuild的Dockerfile,这样它就可以在运行容器时启动go app,因此必须在每次更改时构建一个新图像(无论它是否小)。或者,您将源代码目录挂载到容器目录,然后附加到容器本身并执行手动构建/运行,就像您通常一样。
除非你不在Docker容器中开发你的Go应用程序,否则这两种方式实际上是我看到它发生的唯一方式。只需像往常一样开发它,然后使用临时图像方法,在此之前预先构建Go到二进制文件,然后在准备好运行它时将其复制到容器中。我认为这可能是要走的路,但我想问更多专业人士关于这个问题,并且可能会就这个主题得到一些反馈。
答案 0 :(得分:7)
不确定这是最好的实践,但这是我的方式。
CGO_ENABLED=0 GOGC=off go build -ldflags -s -w
)FROM scratch
构建一个发布容器(复制bin +入口点)步骤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" ]
答案 1 :(得分:1)
最近,我一直在使用 https://github.com/thockin/go-build-template 作为我所有项目的基础。该模板附带一个Makefile,它将在Docker中构建/测试您的应用程序。
答案 2 :(得分:0)
据我所知,您希望有一个正在运行的容器来开发golang应用程序。同样的事情也可以在你的主机上完成。但好的是,如果您可以构建此类应用程序,那么这将被视为云平台即服务(PaaS)。
容器的基本要求是:Ubuntu映像和其他包,如编辑器,golang编译器等。
我建议你看一下docker开发环境。 https://docs.docker.com/opensource/project/set-up-dev-env/
docker开发环境在容器内运行,文件从其中一个主机目录挂载。容器映像是从Ubuntu临时映像构建的,并添加了编译docker源代码所需的必需包。
我希望你几乎得到你想要的东西。