Skip to main content
 首页 » 编程设计

python之Docker & Python,当你的 requirements.pip 列表很大时加速

2024年11月01日29powertoolsteam

假设你有一个相当大的需求.pip

当您修改 requirements.pip 时,构建 Docker 镜像需要很长时间,因为它必须下载并安装 requirements.pip

中的所有包

有没有办法在修改长度 requirements.pip 时加快 docker 镜像构建过程?

我的 docker

.... 
 
 
 
 
 COPY ./momsite/requirements.pip /requirements.pip 
 RUN pip install -r /requirements.pip \ 
   && rm -rf /root/.cache 
 
 COPY ./momsite /app/momsite 
 
 COPY ./compose/production/web/etc /etc 
 
 COPY ./compose/production/web/start.sh / 
 RUN chmod +x /start.sh 
 
 
 WORKDIR /app 
 RUN chown www-data:www-data /app/momsite/reload 
 
 CMD ["/start.sh"] 

需求.pip

 amqp==2.1.4 
 anyjson==0.3.3 
 apns2==0.3.0 
 argh==0.24.1 
 arrow==0.5.4 
 asgi-redis==0.14.1 
 asgiref==3.2.3 
 asn1crypto==0.22.0 
 astroid==1.2.1 
 async-timeout==3.0.1 
 attrs==19.3.0 
 autobahn==19.10.1 
 Automat==0.7.0 
 autopep8==1.2.1 
 awscli==1.10.46 
 Babel==2.3.4 
 BabelDjango==0.2.2 
 backcall==0.1.0 
 backports-abc==0.4 
 backports.csv==1.0.7 
 backports.shutil-get-terminal-size==1.0.0 
 backports.ssl-match-hostname==3.4.0.2 
 bcdoc==0.12.2 
 beautifulsoup4==4.6.0 
 billiard==3.5.0.2 
 bleach==2.1.1 
 boto==2.42.0 
 boto3==1.9.146 
 botocore==1.12.146 
 braintree==3.24.0 
 cachetools==3.1.0 
 celery==4.0.2 
 certifi==2018.11.29 
 cffi==1.10.0 
 channels==2.3.1 
 chardet==3.0.4 
 cluster==1.1.2 
 colorama==0.3.3 
 confusable-homoglyphs==3.2.0 
 constantly==15.1.0 
 contextlib2==0.4.0 
 coreapi==2.3.3 
 coreschema==0.0.4 
 cron-descriptor==1.2.5 
 croniter==0.3.12 
 cryptography==2.8 
 cssselect==0.9.1 
 cssutils==1.0.1 
 cycler==0.10.0 
 Cython==0.24 
 daphne==2.3.0 
 dateutils==0.6.6 
 decorator==4.1.2 
 defusedxml==0.5.0 
 Delorean==0.4.1 
 derpconf==0.7.3 
 diff-match-patch==20121119 
 dj-database-url==0.3.0 
 dj-email-url==0.0.4 
 Django==2.2.5 
 django-absolute==0.3 
 django-admin-rangefilter==0.3.8 
 django-advanced-filters==1.1.1 
 django-annoying==0.9.0 
 django-appconf==1.0.2 
 django-autocomplete-light==3.3.5 
 -e git://github.com/justinmayer/django-autoslug.git@4dc75083d84265e019a900d636273c731457193d#egg=django_autoslug 
 django-avatar==2.0 
 django-baton==1.3.6 
 django-bower==5.0.1 
 django-braces==1.13.0 
 django-cache-url==1.0.0 
 django-cacheops==3.2.1 
 django-categories==1.6.1 
 django-celery-results==1.0.1 
 django-classy-tags==0.5 
 django-compat==1.0.15 
 django-configurations==0.8 
 django-constance==2.0.0 
 django-cors-headers==0.12 
 django-countries==3.4.1 
 django-crispy-forms==1.7.2 
 django-dashing==0.3 
 django-db-readonly==0.3.2 
 django-debug-panel==0.8.3 
 django-debug-toolbar==2.0 
 django-debug-toolbar-line-profiler==0.4.0 
 
... total 383 line 

请您参考如下方法:

您可以在不同的文件中自行划分不太可能更改的需求和最可能更改的需求。

然后你有两个不同的 RUN 阶段,比如

RUN pip install -r less_likely_to_change.txt 
RUN pip install -r most_likely_to_change.txt 

这将创建一个层,其中包含您的大部分需求,因此您可以加快该过程,因为您不会经常更改 less_likely_to_change.txt。