Установка пакета в docker
Я использую docker в проекте django, и установил пакеты, которые указаны в req.txt.
.
Во время проекта мне нужно установить пакет и я сделал это с помощью docker-compose exec web pip install 'package'
и docker-compose up -d --build
, он установился в docker, но я не могу использовать его в моем проекте, который не установлен в проекте.
Вопрос:
- Как установить пакет в docker?
- Можно ли записать установленные пакеты в req.txt с помощью docker?
Dockerfile:
FROM python:3.8
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
docker-compose.yml:
version: '3.9'
services:
web:
build: .
command: python /code/manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- 8000:8000
depends_on:
- db
db:
image: postgres:11
volumes:
- postgres_data:/var/lib/postgresql/data/
environment:
- "POSTGRES_HOST_AUTH_METHOD=trust"
volumes:
postgres_data:
Вот стандартный рабочий процесс, который я бы использовал здесь.
Прежде всего, убедитесь, что у вас есть нормальная рабочая не-Docker среда разработки.
python3 -m venv vpy
. vpy/bin/activate
pip install -e .
Затем отредактируйте ваш setup.cfg
файл, чтобы включить новый пакет и обновите виртуальную среду.
$EDITOR setup.cfg
# add install_requires= package
pip install -e .
Убедитесь, что ваше приложение работает правильно.
pytest
run_the_app # calling a setuptools console_scripts= script
Обновление файла блокировки пакета.
pip freeze > requirements.txt
Все это до сих пор находится на вашем хосте, вне Docker. Теперь вы можете пересобрать образ для запуска интеграционных тестов:
docker-compose build
docker-compose up -d
curl http://localhost:8000
Обратите внимание, что эта установка - совершенно обычный рабочий процесс с зависимостями Python, плюс финальная "сборка образа Docker" в конце. В ней нет ничего специфичного для Docker, и вы не "устанавливаете зависимость в Docker" или "обновляете исходный код хоста из развернутого образа". Подобное можно сделать с помощью более новых инструментов, таких как Pipenv, вместо обычных виртуальных сред.
(Вам не нужен блок Compose volumes:
для скрытия кода в изображении, также не нужна строка Compose command:
для переопределения CMD
в Dockerfile)