为什么gcloud build每次都要重新生成PIP包?
我现在使用的是 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
。