如何在docker compose中缓存构建环境

如何在docker compose中缓存构建环境,docker,docker-compose,Docker,Docker Compose,我不熟悉使用docker compose,因此我不确定是否使用了正确的方法来构建代码更改。docker compose教程说,为了更新代码中的任何更改,只需进行更改并刷新链接,输出将被刷新(在代码自行构建之后)。这对我来说是不可能的。我必须停止运行docker compose,然后运行命令docker compose up--build,该命令将再次构建系统。现在,我的问题是它下载python项目中的所有需求。目前,这些库并不多,但它们将不断增加,在这一点上,反复下载所有内容将非常耗时。当我只更

我不熟悉使用
docker compose
,因此我不确定是否使用了正确的方法来构建代码更改。docker compose教程说,为了更新代码中的任何更改,只需进行更改并刷新链接,输出将被刷新(在代码自行构建之后)。这对我来说是不可能的。我必须停止运行docker compose,然后运行命令
docker compose up--build
,该命令将再次构建系统。现在,我的问题是它下载python项目中的所有
需求。目前,这些库并不多,但它们将不断增加,在这一点上,反复下载所有内容将非常耗时。当我只更改代码而不更改
requirements.txt
文件时,应该如何避免这样做

以下是我的设置示例:
docker-compose.yml

version: '2'
services:
  web:
    build: .
    ports:
      - "5000:5000"
    env_file: .env
    depends_on:
      - db
    volumes:
      - ./webapp:/opt/webapp

  db:
    image: postgres:latest
    ports:
      - "5432:5432"

  redis:
    image: redis:alpine
    ports:
      - "6379:6379"
Dockerfile:

FROM python:3.4-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
对于我在代码中所做的每一次更改和测试,我都必须经历以下所有步骤:

Building web
Step 1/5 : FROM python:3.4-alpine
 ---> 765c483d587c
Step 2/5 : ADD . /code
 ---> ce6f587fe477
Removing intermediate container bceef7c06a89
Step 3/5 : WORKDIR /code
 ---> cd3f4951f718
Removing intermediate container 5022780e47eb
Step 4/5 : RUN pip install -r requirements.txt
 ---> Running in 2dfe61c2537e
Collecting flask (from -r requirements.txt (line 1))
  Downloading Flask-0.12-py2.py3-none-any.whl (82kB)
Collecting redis (from -r requirements.txt (line 2))
  Downloading redis-2.10.5-py2.py3-none-any.whl (60kB)
Collecting itsdangerous>=0.21 (from flask->-r requirements.txt (line 1))
  Downloading itsdangerous-0.24.tar.gz (46kB)
Collecting click>=2.0 (from flask->-r requirements.txt (line 1))
  Downloading click-6.7-py2.py3-none-any.whl (71kB)
Collecting Werkzeug>=0.7 (from flask->-r requirements.txt (line 1))
  Downloading Werkzeug-0.11.15-py2.py3-none-any.whl (307kB)
Collecting Jinja2>=2.4 (from flask->-r requirements.txt (line 1))
  Downloading Jinja2-2.9.5-py2.py3-none-any.whl (340kB)
Collecting MarkupSafe>=0.23 (from Jinja2>=2.4->flask->-r requirements.txt (line 1))
  Downloading MarkupSafe-0.23.tar.gz
Installing collected packages: itsdangerous, click, Werkzeug, MarkupSafe, Jinja2, flask, redis
  Running setup.py install for itsdangerous: started
    Running setup.py install for itsdangerous: finished with status 'done'
  Running setup.py install for MarkupSafe: started
    Running setup.py install for MarkupSafe: finished with status 'done'
Successfully installed Jinja2-2.9.5 MarkupSafe-0.23 Werkzeug-0.11.15 click-6.7 flask-0.12 itsdangerous-0.24 redis-2.10.5
 ---> 6adce98b4bd0
Removing intermediate container 2dfe61c2537e
Step 5/5 : CMD python app.py
 ---> Running in 554d0f0d4635
 ---> c28028d2c0de
Removing intermediate container 554d0f0d4635
Successfully built c28028d2c0de
Starting dockercompose_redis_1
Starting dockercompose_db_1
Recreating dockercompose_web_1
Attaching to dockercompose_db_1, dockercompose_redis_1, dockercompose_web_1
我找到了答案

我不得不更改这些行:

volumes:
  - ./webapp:/opt/webapp
致:

因为这个目录是我的Dockerfile中提到的目录。我也可以改变我的Dockerfile

volumes:
  - .:/code