Créez un environnement de développement Django à l'aide de Docker et de docker-compose. Il existe déjà des articles écrits par d'autres personnes qui créent un environnement de développement avec Docker, mais beaucoup utilisent requirements.txt pour la gestion de la bibliothèque, et la gestion actuelle des packages utilise principalement Pipenv ou Poetry. Je pense qu'il y a une tendance qui devient
Citation: Meilleures pratiques de gestion des packages Python pour 2020
J'ai pensé qu'il serait préférable d'utiliser Poetry, qui vous permet de voir les dépendances en un coup d'œil, même lorsque vous développez avec Docker.
De plus, personnellement, je n'aime pas démarrer le conteneur avec la commande Docker dans l'environnement de développement (docker-compose est plus facile), donc j'écris comment démarrer le conteneur avec docker-compose.
Comprenez les commandes de base du docker et de la poésie. Docker est déjà installé docker-compose est également installé
J'omettrai la méthode d'installation car il existe de nombreux articles écrits par d'autres personnes.
Créer un Dockerfile vide
$ touch Dockerfile
Utilisez l'image officielle de Docker Hub Python. Écrivez le Dockerfile comme suit. Comme la construction alpine prend beaucoup de temps, nous utiliserons la base ubuntu normale.
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/*
#mise à jour pip
RUN pip install --upgrade pip setuptools wheel
#Installer la poésie
RUN pip install poetry
#Désactiver la création d'un environnement virtuel dans le conteneur
RUN poetry config virtualenvs.create false
RUN poetry config virtualenvs.in-project true
CMD ["bash"]
Les paramètres par défaut de Poetry tenteront de créer un environnement virtuel lors de l'installation poetry config virtualenvs.create false poetry config virtualenvs.in-project true Désactivons-le avec.
Générez le Dockerfile créé. Cette fois, nous allons créer une image nommée "django".
$ docker build -t django .
$ docker run -itd --name django-setting django
Allez à l'intérieur du conteneur et installez les bibliothèques requises et créez un nouveau projet Django.
# django-Entrez dans le conteneur de réglage
$ docker exec -it django-setting bash
#Vérifiez si Poetry est installé
<récipient>:/app# pip list | grep poetry
poetry 1.0.3
#Paramètres initiaux de la poésie
<récipient>:/app# poetry init
Oui ou sauter est 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]
Assurez-vous que pyproject.toml est créé sous / app et installez django
<Dans le container>:/app# ls
pyproject.toml
<Dans le container>:/app# poetry add django
#Le nom du projet est project.
<Dans le container>:/app# django-admin startproject project .
#Confirmez qu'il a été créé
<Dans le container>:/app# ls
manage.py poetry.lock project pyproject.toml
Quittez le conteneur avec ctrl + d.
Copiez le projet créé de l'intérieur du conteneur dans le répertoire src de l'hôte
#Vérifiez l'ID du conteneur
$ docker ps
$ docker cp <ID du conteneur>:/app/ src
Mettez à jour le Dockerfile. Décrivez la copie de pyproject.toml qui a été copiée du conteneur vers l'hôte plus tôt dans le conteneur. En faisant l'installation de poésie, la bibliothèque écrite en pyproject.toml Il sera installé sur pip dès la création de l'image.
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 #ajouter à
RUN poetry install #ajouter à
CMD ["bash"]
J'ai réécrit le Dockerfile, alors supprimez l'ancien conteneur
$ docker ps #Confirmer l'ID du conteneur
$ docker rm -f <ID du conteneur> # django-conteneur de paramètres supprimé
Créer un docker-compose.yml vide
$ touch docker-compose.yml
Maintenant que le Dockerfile est prêt, configurons docker-compose.yml.
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
Annuaire final
.
├── 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 Vous devriez pouvoir le voir lorsque vous y accédez!
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"
Je peux gérer les paquets!
Je vous remercie pour votre travail acharné.
Source: https://github.com/k4ssyi/django-docker
https://twitter.com/k4ssyi
Recommended Posts