2017-02-03 24 views
0

我是新來使用docker-compose所以我不確定我是否使用正確的方法來構建代碼中的更改。 docker-compose教程說,爲了更新代碼中的任何更改,只需進行更改並刷新鏈接,並且輸出將被刷新(在代碼自行構建之後)。這不會發生在我身上。我必須停止正在運行的docker-compose,然後運行再次構建系統的命令docker-compose up --build。現在,我的問題是,它下載了python項目中的所有requirements。目前這些庫的數量並不是很多,但是它們會增加,在這種情況下,一次又一次下載所有內容將非常耗時。當我只對代碼進行更改而不是requirements.txt文件時,應該怎麼做才能避免這樣做。如何在Docker-compose中緩存構建環境

這裏是我設置的例子:
泊塢窗,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 

回答

1

我找到了我的答案here

我不得不改變這些行:

volumes: 
    - ./webapp:/opt/webapp 

到:

volumes: 
    - .:/code 

,因爲該目錄是在我的Dockerfile提到的。我也可以改變我的Dockerfile。