python - 为 CI 预先安装依赖项的 Docker 映像
问题描述
执行 CI 的常见建议(示例)是使用具有预安装依赖项的映像。不幸的是,对于像我这样的 n00b,有问题的链接没有进一步详细说明。
当我寻找 docker 教程时,似乎通常会教你如何将应用程序容器化,而不是像 Python 那样预先安装一些依赖项。
例如,如果这是我的.gitlab-ci.yml
文件的样子:
image: "python:3.7"
before_script:
- python --version
- pip install -r requirements.txt
stages:
- Static Analysis
flake8:
stage: Static Analysis
script:
- flake8 --max-line-length=120
如何使用一些预安装的依赖项(这里是 中的依赖项requirements.txt
)将 Python 容器化,以及我应该如何更改.gitlab-ci.yml
文件,以便 CI 过程运行得更快?
解决方案
为了让它更快,我建议创建您的自定义 Dockerfile,基于python:3.7
它在构建期间安装了所有依赖项。因此,这将节省您的时间,并且您的工作不需要在每个工作构建期间安装依赖项。
FROM python:3.7
RUN python --version
# Create app directory
WORKDIR /app
# copy requirements.txt
COPY local-src/requirements.txt ./
# Install app dependencies
RUN pip install -r requirements.txt
# Bundle app source
COPY src /app
您可以阅读有关此实践的更多信息docker-python-pip-requirements和write-effective-docker-files-with-python
另一种选择是在 Dockerfile 中添加 git 客户端并在创建容器期间拉取代码。
推荐阅读
- python - 使用 python 在 s3 存储桶之间复制文件
- c++ - 为什么我的 g++ Makefile 会导致未定义的引用错误?
- reactjs - 如何在 React Native Stript Calendar 上实现多选日历?
- android - Kotlin 制作所选项目的数组
- sql - 如何在 SQL 中构建产品过期时间?
- rust - 一个引用在它引用的对象被删除后保持有效多长时间?
- javascript - 如何将 mysql 代码拆分并导出到其他文件中,并且可以在 Reactjs 中的任何地方使用
- javascript - 如何从另一个函数调用一个函数以及如何调用?
- python - tqdm 在上次迭代后未更新新的 set_postfix
- android - 在 Flutter 中设置谷歌地图多边形的不透明度颜色