gpt4 book ai didi

go - 为 golang 静态二进制文件构建、部署、推送 docker 镜像

转载 作者:数据小太阳 更新时间:2023-10-29 03:35:24 25 4
gpt4 key购买 nike

我正在寻找解决简单配置问题的方法;它已经困扰我很长一段时间了。 :)

我在 github 上有一个 golang 项目,它为我提供了一个静态二进制文件,并使用了 godeps。

现在我想确保 godep go install ... 命令可以在 git clone 和 docker 容器从本地新建的二进制文件构建之后运行。

作为一个选项,用户应该能够将其推送到 docker hub 或适用的私有(private)仓库。

我正在考虑使用 Makefile,但这似乎太复杂了(设置 gopath,然后是 godep build,动态修改 Dockerfile 以指向二进制文件所在的位置,然后是 docker build)。

有更简单的方法吗?

最佳答案

到目前为止,当我遇到你的情况时,我总是想出一个 Makefile 来完成所有工作,正如你所说,这从来都不是一件简单的事情。虽然它从来都不是简单的,但我已经使用至少 2 种不同的方法完成了它,具体取决于您希望构建过程和开发环境之间的依赖程度。

正如您所说,最简单的方法是将您自己执行的步骤放入 Makefile 中。您可以使用 Dockerfiles ARGuments 来参数化二进制名称,这样您就不必在构建期间修改 Dockerfile。

这里有一个快速而肮脏的(有效的)Makefile,我刚刚为帮助您入门而编写:

APP_IMAGE=group/example
APP_TAG=1.0
APP_BINARY=example

.PHONY: clean image binary

all: image

clean:
if [ -r $(APP_BINARY) ]; then rm $(APP_BINARY); fi
if [ -n "$$(docker images -q $(APP_IMAGE):$(APP_TAG))" ]; then docker rmi $(APP_IMAGE):$(APP_TAG); fi

image: binary
docker build --build-arg APP_BINARY=$(APP_BINARY) -t $(APP_IMAGE):$(APP_TAG) $(dir $(abspath $(lastword $(MAKEFILE_LIST))))

binary: $(APP_BINARY)

$(APP_BINARY): main.go
go build -o $@ $^

Makefile 应与 Dockerfile 位于同一目录中。

这是一个最小的(有效):

FROM alpine:3.5
ARG APP_BINARY
ADD ${APP_BINARY} /app
ENTRYPOINT /app

我已经测试过在与 Makefile 和 Dockerfile 相同的顶级项目目录中有一个 main.go,以防你有一个 main.go 嵌套在某个内部目录中(“ROOT/cmd/bla”是常见的) 那么您应该更改“go build”行以说明这一点。

虽然我已经做了一段时间这样的事情,但现在我看到(并思考)了你的问题,我开始看到一个专门知道如何做到这一点的专用工具可能会很棒。特别是一个模仿“go build/get/install”但可以构建 docker 镜像的工具...因此您可以在其中运行以下命令来获取二进制文件:

go install github.com/my/program

您还可以运行以下命令来获取简单的 docker 镜像:

goi install github.com/my/program

听起来怎么样?有没有这样的东西存在?我应该开始吗?

关于go - 为 golang 静态二进制文件构建、部署、推送 docker 镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41722442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com