在多阶段 docker 构建中使用变量

2024-01-05

我想在多阶段 docker 构建中使用变量。如同这个问题 https://stackoverflow.com/questions/52904847/(在撰写本文时尚未得到答复。)

我的具体用例是在builder阶段并保存目录。这是在变量中完成的,并在下一阶段使用相同的变量:BUILD_DIR多变的。

我的 Dockerfile 是(注释行中的示例不起作用。):

FROM golang:1.11.5 as builder

WORKDIR /project-name
# What I want to do:
#ENV BUILD_DIR /project-name
#WORKDIR ${BUILD_DIR}


# Vendored dependencies of my project:
COPY ./vendor ./vendor
COPY ./*.go ./
# Source code:
COPY ./go.* ./

RUN GOFLAGS=-mod=vendor GOOS=linux go build .

FROM something-else:some-version

WORKDIR some-folder

# Executable from previous stage:
COPY --from=builder /project-name/executable-name .
# Config files:
COPY ./conf ./conf

# What I want to do to copy the executable:
#COPY --from=builder /${BUILD_DIR}/executable-name .

ENTRYPOINT ["./executable-name"]

为了发送变量,我们可以使用“ARG”解决方案、“base”解决方案和“file”解决方案。

ARG version_default=v1

FROM alpine:latest as base1
ARG version_default
ENV version=$version_default
RUN echo ${version}
RUN echo ${version_default}

FROM alpine:latest as base2
ARG version_default
RUN echo ${version_default}

另一种方法是对多个阶段使用基础容器:

FROM alpine:latest as base
ARG version_default
ENV version=$version_default

FROM base
RUN echo ${version}

FROM base
RUN echo ${version}

您可以在这里找到更多详细信息:https://github.com/moby/moby/issues/37345 https://github.com/moby/moby/issues/37345

您也可以在第一阶段将哈希值保存到文件中,并在第二阶段复制该文件,然后在其中读取并使用它。

据我了解,您希望将构建的程序复制到新的 docker 中进行多阶段构建,输出大小更小。 基本上,您不需要发送一个变量,您需要知道您是否在第一个图像中构建了它并从那里复制它

FROM golang:alpine as gobuilder
RUN apk update && apk add git

COPY sources/src/ $GOPATH/src/folder/
WORKDIR $GOPATH/src/folder/
#get dependencies
RUN go get -d -v
#build the binary
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -installsuffix cgo -ldflags="-w -s" -o /go/bin/myGoProgram myGoSource.go

FROM alpine:latest
COPY --from=gobuilder /go/bin/myGoProgram /usr/local/bin/myGoProgram
ENTRYPOINT ["myGoProgram"] # or ENTRYPOINT ["/usr/local/bin/myGoProgram"]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在多阶段 docker 构建中使用变量 的相关文章

随机推荐