【发布时间】:2018-11-04 07:35:33
【问题描述】:
我有一个 Go 项目,其中有一个大的 vendor/ 目录,几乎从不改变。
我正在尝试使用新的 go 1.10 构建缓存 功能来加速我在本地 Docker 引擎中的构建。
避免重新编译我的vendor/ 目录就足够优化了。所以我正在尝试为 Python 做这种常见的 Dockerfile 模式的 Go 等价物:
FROM python
COPY requirements.txt . # <-- copy your dependency list
RUN pip install -r requirements.txt # <-- install dependencies
COPY ./src ... # <-- your actual code (everything above is cached)
我也试过了:
FROM golang:1.10-alpine
COPY ./vendor ./src/myproject/vendor
RUN go build -v myproject/vendor/... # <-- pre-build & cache "vendor/"
COPY . ./src/myproject
但是,这会给出“找不到包”错误(可能是因为您也无法正常直接在 vendor/ 中构建东西)。
有没有人能解决这个问题?
【问题讨论】:
-
您说过,您不能直接构建供应商包。为什么不直接构建
myproject? -
因为我有 300 多个供应商包(380 万行代码)我每次都必须重新构建(结果没有缓存),而
myproject只有 530 行代码。 :) -
但是构建 mypackage 将构建并缓存所有供应商的包,这似乎正是您想要做的。
-
@JimB 但是为了让 Docker 的缓存有效,构建所有供应商的包和构建项目本身需要 2 个单独的步骤,因此在 Docker 映像中创建了 2 个层。