为什么gcloud build每次都要重新生成PIP包?

0 投票
1 回答
48 浏览
提问于 2025-04-12 21:34

我现在使用的是 Google Cloud SDK 469.0.0, alpha 2024.03.15, beta 2024.03.15, bq 2.1.1, core 2024.03.15, gsutil 5.27

我在多个StackOverflow的帖子上看到,如果我把我的Dockerfile写成这样:

FROM python:3.12
ENV APP_HOME /app
WORKDIR $APP_HOME
COPY requirements.txt ./ 
RUN pip install -r ./requirements.txt
COPY . ./

[CMD]

那么Dockerfile就会缓存pip的安装,这样每次我修改源代码的时候就不需要重复安装了。

但是我发现这在使用 gcloud builds submit --tag gcr.io/... 的时候似乎不太管用。

我是不是需要设置什么东西呢?

1 个回答

0

所以,gcloud确实有一个选项可以存储部分层,谷歌称之为Kaniko缓存。我把PIP包的有效时间设置为8小时。我要做的就是设置两个配置参数:

gcloud config set builds/use_kaniko True
gcloud config set builds/kaniko_cache_ttl 8

在我的情况下,我不仅有requirements.txt,还想对一些东西进行Cython化,所以我把这些内容放在COPY . ./之前。因此:

COPY requirements.txt   setup_pyd.py CoreLoop.pyx  ./ 
RUN pip install -r requirements.txt
RUN python setup_pyd.py build_ext --inplace --include-dir=/usr/local/lib/python3.12/site-packages/numpy/core/include
COPY . ./

这样就完美了,只要requirements.txt没有变化,所有的包就会被安装在一个缓存中,gcloud可以利用这个缓存来构建下一个层。

然后我只需像之前一样运行gcloud build submit --tag gcr.io/xxx/yyy

撰写回答