Go 我们可以在Dockerfile中不缓存的情况下连接多个运行指令吗
我正在写一个Dockerfile,我将几个运行指令连接成一个,以便进行适当的缓存,但我意识到其中一个运行指令没有缓存。你能告诉我这里的缓存是如何工作的吗Go 我们可以在Dockerfile中不缓存的情况下连接多个运行指令吗,go,dockerfile,Go,Dockerfile,我正在写一个Dockerfile,我将几个运行指令连接成一个,以便进行适当的缓存,但我意识到其中一个运行指令没有缓存。你能告诉我这里的缓存是如何工作的吗 RUN go mod download \ && apk update --no-cache \ && apk add git \ && CGO_ENABLED=0 go build -o golang-sdk . apk更新--no-cache没有意义。点击它并将git安装修改为 RUN ap
RUN go mod download \
&& apk update --no-cache \
&& apk add git \
&& CGO_ENABLED=0 go build -o golang-sdk .
apk更新--no-cache
没有意义。点击它并将git安装修改为
RUN apk add git --no-cache \
&& go mod download \
&& CGO_ENABLED=0 go build -o golang-sdk .
更好的方法是:进行两阶段构建:
FROM golang:latest AS build
WORKDIR /go/src/github.com/you/project/
RUN [yourstuff]
COPY app.go .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /usr/local/bin
COPY --from=build /go/src/github.com/you/project/app .
CMD ["/usr/local/bin/app"]
这样,你可以在建筑时做你喜欢的所有事情,而无需考虑图像大小,对于
app
我的问题是,当一条指令没有缓存,而另一条指令试图下载依赖项时,缓存是如何工作的。@SudhirKumar--no cache是apk
的一条有很好文档证明的指令apk update
用于下载最新的软件包信息,并且--no cache
告诉它放弃它们。--no cache标志是一个apk选项。它对docker是否以及如何使用缓存层没有任何影响,我也不清楚你为什么会这么认为。连接多个运行指令的目的是为了缓存。在上面的示例中,一条被连接的指令没有使用缓存,这意味着不会使用缓存层。请纠正我的理解。