Страницы

Поиск по вопросам

воскресенье, 29 декабря 2019 г.

Как не загружать модули с requirements при каждом старте контейнера docker?

#python #docker #docker_compose


Всем привет,

docker-compose.yml

version: '2'

services:
  web:
    build: .
    command: python3 testDj/manage.py runserver 0.0.0.0:8000
    ports:
      - "8888:8000"


Dockerfile

FROM python:3


WORKDIR /opt/web/app
COPY . /opt/web/app


RUN pip3 install -r requirements.txt


Как закэшировать загруженные модули?

При старте докера выполняется загрузка модулей пайтоне, а это долго.

Запускаю докер с pycharm docker-compose
    


Ответы

Ответ 1



Необходимо сначала скопировать requirements.txt, и поставить пакеты, а потом копировать весь проект. Т.к. докер собирает слоями, то он начнет с того места, где произошли изменения, и не будет ставить пакеты заново. Dockerfile должен будет выглядеть следующим образом: FROM python:3 COPY requirements.txt /opt/web/app RUN pip3 install -r requirements.txt WORKDIR /opt/web/app COPY . /opt/web/app

Ответ 2



docker-compose.yml version: '2' services: web: image: python:3 container_name: python_web volumes: - ./:/opt/web/app working_dir: /opt/web/app command: python3 testDj/manage.py runserver 0.0.0.0:8000 ports: - "8888:8000" В этом случаи Dockerfile вовсе не нужен. Makefile # Start docker container start-container: docker-compose up -d # Stop docker container stop-container: docker-compose stop # Dependencies dep-install: pip3 install -r requirements.txt # Dependencies install into container dep-install-into-container docker-compose exec web bash -c "make dep-install" В любой момент можно поставить зависимости не останавливая контейнер, правда я не знаю, как это будет взаимодействовать с уже запущенном приложении. С питоном никогда не работал. Я бы так сделал

Комментариев нет:

Отправить комментарий