python docker装依赖慢_为Python项目构建Docker映像时如何避免重新安装软件包?

本文展示了如何利用Docker的构建缓存来优化Python项目的构建过程,避免每次构建时都重新安装软件包。通过调整Dockerfile,使得只有在requirements.txt更改时才会执行`pip install`,从而提高构建效率。
摘要由CSDN通过智能技术生成

小编典典

尝试使用以下Dockerfile进行构建。

FROM my/base

WORKDIR /srv

ADD ./requirements.txt /srv/requirements.txt

RUN pip install -r requirements.txt

ADD . /srv

RUN python setup.py install

ENTRYPOINT ["run_server"]

如果.(您的项目)有某些更改,则docker pip install通过使用缓存跳过行。

Docker仅pip install在您编辑requirements.txt文件时在构建上运行。

我写简单的Hello, World!程序。

$ tree

.

├── Dockerfile

├── requirements.txt

└── run.py

0 directories, 3 file

# Dockerfile

FROM dockerfile/python

WORKDIR /srv

ADD ./requirements.txt /srv/requirements.txt

RUN pip install -r requirements.txt

ADD . /srv

CMD python /srv/run.py

# requirements.txt

pytest==2.3.4

# run.py

print("Hello, World")

下面是输出。

Step 1 : WORKDIR /srv

---> Running in 22d725d22e10

---> 55768a00fd94

Removing intermediate container 22d725d22e10

Step 2 : ADD ./requirements.txt /srv/requirements.txt

---> 968a7c3a4483

Removing intermediate container 5f4e01f290fd

Step 3 : RUN pip install -r requirements.txt

---> Running in 08188205e92b

Downloading/unpacking pytest==2.3.4 (from -r requirements.txt (line 1))

Running setup.py (path:/tmp/pip_build_root/pytest/setup.py) egg_info for package pytest

....

Cleaning up...

---> bf5c154b87c9

Removing intermediate container 08188205e92b

Step 4 : ADD . /srv

---> 3002a3a67e72

Removing intermediate container 83defd1851d0

Step 5 : CMD python /srv/run.py

---> Running in 11e69b887341

---> 5c0e7e3726d6

Removing intermediate container 11e69b887341

Successfully built 5c0e7e3726d6

我只更新run.py并尝试再次构建。

# run.py

print("Hello, Python")

下面是输出。

Sending build context to Docker daemon 5.12 kB

Sending build context to Docker daemon

Step 0 : FROM dockerfile/python

---> f86d6993fc7b

Step 1 : WORKDIR /srv

---> Using cache

---> 55768a00fd94

Step 2 : ADD ./requirements.txt /srv/requirements.txt

---> Using cache

---> 968a7c3a4483

Step 3 : RUN pip install -r requirements.txt

---> Using cache

---> bf5c154b87c9

Step 4 : ADD . /srv

---> 9cc7508034d6

Removing intermediate container 0d7cf71eb05e

Step 5 : CMD python /srv/run.py

---> Running in f25c21135010

---> 4ffab7bc66c7

Removing intermediate container f25c21135010

Successfully built 4ffab7bc66c7

正如您在上面看到的,Docker使用构建缓存。这次我更新了requirements.txt。

# requirements.txt

pytest==2.3.4

ipython

下面是输出。

Sending build context to Docker daemon 5.12 kB

Sending build context to Docker daemon

Step 0 : FROM dockerfile/python

---> f86d6993fc7b

Step 1 : WORKDIR /srv

---> Using cache

---> 55768a00fd94

Step 2 : ADD ./requirements.txt /srv/requirements.txt

---> b6c19f0643b5

Removing intermediate container a4d9cb37dff0

Step 3 : RUN pip install -r requirements.txt

---> Running in 4b7a85a64c33

Downloading/unpacking pytest==2.3.4 (from -r requirements.txt (line 1))

Running setup.py (path:/tmp/pip_build_root/pytest/setup.py) egg_info for package pytest

Downloading/unpacking ipython (from -r requirements.txt (line 2))

Downloading/unpacking py>=1.4.12 (from pytest==2.3.4->-r requirements.txt (line 1))

Running setup.py (path:/tmp/pip_build_root/py/setup.py) egg_info for package py

Installing collected packages: pytest, ipython, py

Running setup.py install for pytest

Installing py.test script to /usr/local/bin

Installing py.test-2.7 script to /usr/local/bin

Running setup.py install for py

Successfully installed pytest ipython py

Cleaning up...

---> 23a1af3df8ed

Removing intermediate container 4b7a85a64c33

Step 4 : ADD . /srv

---> d8ae270eca35

Removing intermediate container 7f003ebc3179

Step 5 : CMD python /srv/run.py

---> Running in 510359cf9e12

---> e42fc9121a77

Removing intermediate container 510359cf9e12

Successfully built e42fc9121a77

码头工人不使用构建缓存。如果它不起作用,请检查您的码头工人版本。

Client version: 1.1.2

Client API version: 1.13

Go version (client): go1.2.1

Git commit (client): d84a070

Server version: 1.1.2

Server API version: 1.13

Go version (server): go1.2.1

Git commit (server): d84a070

2020-06-17

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值