Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 我们可以在Dockerfile中不缓存的情况下连接多个运行指令吗_Go_Dockerfile - Fatal编程技术网

Go 我们可以在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

我正在写一个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 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是否以及如何使用缓存层没有任何影响,我也不清楚你为什么会这么认为。连接多个运行指令的目的是为了缓存。在上面的示例中,一条被连接的指令没有使用缓存,这意味着不会使用缓存层。请纠正我的理解。