我使用Go
语言编写了一个应用程序,并为它创建了一个Dockerfile
,如下所示。问题是,每次我重新启动docker容器时,所有模块都会再次下载。
FROM golang:1.15-alpine
WORKDIR /my-app
COPY . .
RUN go run main.go
我该怎么解决这个问题?
Docker将缓存每一层,如果它们与上一次运行相同,则使用它们。Dockerfile
的问题在于,您没有添加用于下载模块的层,也没有构建应用程序(每次都在运行它(。我假设您正在使用go
模块作为依赖项,因此以下是针对Dockerfile
的修复程序
FROM golang:1.15-alpine
WORKDIR /my-app
COPY go.mod .
COPY go.sum .
RUN go mod download
COPY . .
RUN go build -i -o ./build/my-app
ENTRYPOINT ["./build/my-app"]
有了这个Dockerfile
,下载过程将缓存并在每次重新启动时重用(除非您更改依赖项(。