Как полностью удалить виртуальную среду в Docker?
Я пытаюсь создать контейнер Django и Postgre с помощью docker-compose. Я следовал этому руководству: https://docs.docker.com/samples/django/.
Я использую Windows и выполнил следующую команду:
docker-compose run web django-admin startproject composeexample .
После этого я изменил свой Dockerfile, включив в него apt-get update
# syntax=docker/dockerfile:1
FROM python:3
RUN apt-get update
RUN apt-get install -y libgdal-dev
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
WORKDIR /usr/src/app
COPY requirements.txt /usr/src/app/
RUN pip install -r requirements.txt
COPY . /usr/src/app/
Я удалил созданную папку composeexample и папку data, и запустил команду снова.
docker-compose run web django-admin startproject composeexample .
На этот раз. Я получаю следующую ошибку:
CommandError: /usr/src/app/manage.py уже существует. Наложение проекта на существующий каталог не заменит конфликтующие файлы. ОШИБКА: 1
Почему-то Docker считает, что файлы все еще существуют с первого выполнения. Даже если я изменю имя родительского каталога, чтобы изменить имя контейнера, я все равно получаю ошибку.
Как я могу полностью удалить окружение из моего 1-го выполнения?
Согласно руководству, которому вы следовали, в файле docker-compose.yml объявляется том для монтирования в контейнер docker:
web:
...
volumes:
- .:/usr/src/app
...
В вашем файле docker вы копируете содержимое локального каталога в объявленный рабочий каталог /usr/src/app
.
Вот что я бы предложил:
- измените место расположения файлов ресурсов, которые будут использоваться для сборки вашего контейнера docker.
В своих проектах я обычно полагаюсь на такую структуру каталогов:
web/
- Dockerfile
+ build-src/
... the needed files to build the container image ..
- requirements.txt
+ data/
.. the data files and folders needed/resulting of running ..
- измените файл docker на что-то вроде этого:
# syntax=docker/dockerfile:1
FROM python:3
RUN apt-get update
RUN apt-get install -y libgdal-dev
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
WORKDIR /usr/src/app
COPY ./web/build-src/requirements.txt /usr/src/app/
RUN pip install -r requirements.txt
После успешной сборки вы получите образ контейнера docker, в который встроены все необходимые требования для запуска вашего Python-приложения. Пока не собирайте контейнер ;)
ПРИМЕЧАНИЕ: каждая команда docker создает новый слой. Когда вы выполняете команду RUN
для установки нового пакета, вы скорее хотите, чтобы она была "oneline" и удаляла временные файлы, которые могут занимать некоторое дисковое пространство впустую. Следующая команда приведет к тому же результату, что и ваша, но потребует меньше дискового пространства и создаст меньшие образы промежуточных слоев:
RUN apt-get update && \
apt-get install -y \
libgdal-dev && \
rm -fr /var/lib/apt/lists
- измените часть docker compose
web
на что-то вроде этого:
web:
...
build:
context: web
volumes:
- ./web/data:/usr/src/app
...
- Пересоберите и запустите ваш контейнер(ы) из верхней директории проекта:
$ docker-compose build
$ docker-compose up
В случае, если это не решит вашу проблему, это (по крайней мере) поможет вам изолировать файлы сборки от файлов выполнения (т.е.: файлы, необходимые для сборки образа контейнера, от файлов, которые либо используются, либо производятся/изменяются контейнером).