Erstellen Sie eine Django-Entwicklungsumgebung mit Docker und Docker-Compose. Es gibt bereits Artikel, die von anderen Personen verfasst wurden, die mit Docker eine Entwicklungsumgebung erstellen, aber viele verwenden require.txt für die Bibliotheksverwaltung, und die aktuelle Paketverwaltung verwendet hauptsächlich Pipenv oder Poetry. Ich denke, es gibt einen Trend, der sich entwickelt
Zitat: Best Practices für die Python-Paketverwaltung für 2020
Ich dachte, es wäre besser, Poesie zu verwenden, mit der Sie die Abhängigkeiten auch bei der Entwicklung mit Docker auf einen Blick sehen können. Deshalb habe ich diesen Artikel geschrieben.
Außerdem persönlich möchte ich den Container nicht mit dem Docker-Befehl in der Entwicklungsumgebung starten (Docker-Compose ist einfacher), daher schreibe ich, wie der Container mit Docker-Compose gestartet wird.
Verstehen Sie die grundlegenden Docker- und Poesiebefehle. Docker ist bereits installiert Docker-Compose ist ebenfalls installiert
Ich werde die Installationsmethode weglassen, da viele Artikel von anderen Personen geschrieben wurden.
Erstellen Sie eine leere Docker-Datei
$ touch Dockerfile
Verwenden Sie das offizielle Docker Hub Python-Image. Schreiben Sie die Docker-Datei wie folgt. Da der Aufbau der Alpen lange dauert, verwenden wir eine normale Ubuntu-Basis.
FROM python:3.8
WORKDIR /app
ENV PYTHONPATH /app
ENV LC_ALL=C.UTF-8 LANG=C.UTF-8
RUN apt-get update && apt-get install -y --no-install-recommends \
git \
vim \
&& rm -rf /var/lib/apt/lists/*
#Pip Update
RUN pip install --upgrade pip setuptools wheel
#Installieren Sie Poetry
RUN pip install poetry
#Deaktivieren Sie das Erstellen einer virtuellen Umgebung im Container
RUN poetry config virtualenvs.create false
RUN poetry config virtualenvs.in-project true
CMD ["bash"]
Die Standardeinstellungen von Poetry versuchen, während der Installation eine virtuelle Umgebung zu erstellen poetry config virtualenvs.create false poetry config virtualenvs.in-project true Deaktivieren wir es mit.
Erstellen Sie die erstellte Docker-Datei. Dieses Mal erstellen wir ein Bild mit dem Namen "django".
$ docker build -t django .
$ docker run -itd --name django-setting django
Gehen Sie in den Container und installieren Sie die erforderlichen Bibliotheken und erstellen Sie ein neues Django-Projekt.
# django-Geben Sie den Einstellungscontainer ein
$ docker exec -it django-setting bash
#Überprüfen Sie, ob Poetry installiert ist
<Container>:/app# pip list | grep poetry
poetry 1.0.3
#Poesie Anfangseinstellungen
<Container>:/app# poetry init
Ja oder überspringen ist OK
console
Package name [app]:
Version [0.1.0]:
Description []:
Author [None, n to skip]: n
License []:
Compatible Python versions [^3.8]:
Would you like to define your main dependencies interactively? (yes/no) [yes]
Search for package to add (or leave blank to continue):
Would you like to define your dev dependencies (require-dev) interactively (yes/no) [yes]
Search for package to add (or leave blank to continue):
Do you confirm generation? (yes/no) [yes]
Stellen Sie sicher, dass pyproject.toml unter / app erstellt wurde, und installieren Sie django
<Im Container>:/app# ls
pyproject.toml
<Im Container>:/app# poetry add django
#Der Projektname ist Projekt.
<Im Container>:/app# django-admin startproject project .
#Bestätigen Sie, dass es erstellt wurde
<Im Container>:/app# ls
manage.py poetry.lock project pyproject.toml
Verlassen Sie den Container mit Strg + d.
Kopieren Sie das erstellte Projekt aus dem Container in das src-Verzeichnis des Hosts
#Überprüfen Sie die Container-ID
$ docker ps
$ docker cp <Container ID>:/app/ src
Aktualisieren Sie die Docker-Datei. Beschreiben Sie die Kopie von pyproject.toml, die zuvor vom Container auf den Host in den Container kopiert wurde. Durch die Installation von Gedichten wird die in pyproject.toml geschriebene Bibliothek Es wird auf pip installiert, sobald das Image erstellt wurde.
FROM python:3.8
WORKDIR /app
ENV PYTHONPATH /app
ENV LC_ALL=C.UTF-8 LANG=C.UTF-8
RUN apt-get update && apt-get install -y --no-install-recommends \
git \
vim \
&& rm -rf /var/lib/apt/lists/*
RUN pip install --upgrade pip setuptools wheel
RUN pip install poetry
RUN poetry config virtualenvs.create false
RUN poetry config virtualenvs.in-project true
COPY src/pyproject.toml pyproject.toml #hinzufügen
RUN poetry install #hinzufügen
CMD ["bash"]
Ich habe die Docker-Datei neu geschrieben, also lösche den alten Container
$ docker ps #Bestätigung der Container-ID
$ docker rm -f <Container ID> # django-Einstellungscontainer gelöscht
Erstellen Sie eine leere docker-compose.yml
$ touch docker-compose.yml
Nachdem die Docker-Datei fertig ist, richten wir docker-compose.yml ein.
docker-compose.yml
version: "3"
services:
django:
build:
context: .
dockerfile: Dockerfile
ports:
- "8000:8000"
volumes:
- ./src:/app
command: "python3 manage.py runserver 0.0.0.0:8000"
tty: true
Endverzeichnis
.
├── Dockerfile
├── docker-compose.yml
└── src
├── manage.py
├── project
├── pyproject.toml
└── poetry.lock
$ docker-compose build
$ docker-compose up
console
Starting django-docker_django_1 ... done
Attaching to django-docker_django_1
django_1 | Watching for file changes with StatReloader
django_1 | Performing system checks...
django_1 |
django_1 | System check identified no issues (0 silenced).
django_1 |
django_1 | You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
django_1 | Run 'python manage.py migrate' to apply them.
django_1 |
django_1 | February 06, 2020 - 09:38:45
django_1 | Django version 3.0.3, using settings 'project.settings'
django_1 | Starting development server at http://0.0.0.0:8000/
django_1 | Quit the server with CONTROL-C.
http://localhost:8000 Sie sollten es sehen können, wenn Sie darauf zugreifen!
cat pyproject.toml
[tool.poetry]
name = "app"
version = "0.1.0"
description = ""
authors = ["Your Name <[email protected]>"]
[tool.poetry.dependencies]
python = "^3.8"
django = "^3.0.3"
[tool.poetry.dev-dependencies]
[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"
Ich kann Pakete verwalten!
Danke für deine harte Arbeit.
Quelle: https://github.com/k4ssyi/django-docker
https://twitter.com/k4ssyi
Recommended Posts