[PYTHON] J'ai créé un environnement de développement pour Django 3.0 avec Docker, Docker-compose, Poetry

introduction

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.

table des matières

  1. Prémisse
  2. Environnement d'exploitation
  3. Créer un fichier Docker
  4. Créer un projet Django
  5. Créer docker-compose.yml
  6. Démarrer le conteneur (#a)
  7. Enfin

supposition

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.

Environnement d'exploitation

Créer un Dockerfile

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

Création de projet 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éation de docker-compose.yml

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

Démarrer le conteneur


$ 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!

django-first.png

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!

finalement

Je vous remercie pour votre travail acharné.

Source: https://github.com/k4ssyi/django-docker

https://twitter.com/k4ssyi

Recommended Posts

J'ai créé un environnement de développement pour Django 3.0 avec Docker, Docker-compose, Poetry
[DynamoDB] [Docker] Créer un environnement de développement pour DynamoDB et Django avec docker-compose
Créez un environnement de développement avec Poetry Django Docker Pycharm
Créez un environnement de développement Django avec Docker! (Docker-compose / Django / postgreSQL / nginx)
[Memo] Construire un environnement de développement pour Django + Nuxt.js avec Docker
[Python] Créer un environnement de développement Django avec Docker
[Django] Créez rapidement un environnement de développement de conteneur Django (Docker) avec PyCharm
J'ai fait une application WEB avec Django
J'ai essayé de créer un Dockerfile pour l'environnement de développement de Django
Créer un environnement de développement Django à l'aide de Doker Toolbox
Obtenez un environnement de développement Python rapide avec Poetry
J'ai créé un serveur syslog prêt à l'emploi avec Play with Docker
J'ai créé une fenêtre pour la sortie du journal avec Tkinter
Lancer Django sur un conteneur Docker à l'aide de docker-compose up
Créez un environnement de développement local avec WSL + Docker Desktop pour Windows + docker-lambda + Python
Créer un environnement django avec docker-compose (MariaDB + Nginx + uWSGI)
Construire un environnement Django pour Win10 (avec espace virtuel)
J'ai créé un moniteur de ressources pour Raspberry Pi avec une feuille de calcul
Obtenez un environnement de développement Python propre avec pyenv + pipx + Poetry
Créez un environnement de développement Python simple avec VSCode et Docker Desktop
Créer une application Todo avec Django ① Créer un environnement avec Docker
Déployer l'application Django avec Docker
[Pour les débutants] Django -Construction d'environnement de développement-
J'ai fait une loterie avec Python.
J'ai créé un démon avec Python
Reconstruisez l'environnement de développement de Django avec Docker! !! !! !!
J'ai créé un environnement pour Masonite, un framework WEB Python similaire à Laravel, avec Docker!
Construction de l'environnement de développement Django avec Docker-compose + Nginx + uWSGI + MariaDB (édition macOS)
J'ai créé beaucoup de fichiers pour la connexion RDP avec Python
Construction d'environnement Postgres avec Docker J'ai eu un peu de mal, alors notez
J'ai créé un docset de tableau de bord pour Holoviews
Lecteur RSS simple réalisé avec Django
Créez facilement un environnement de développement avec Laragon
J'ai fait un compteur de caractères avec Python
Créez un environnement d'API rapide avec docker-compose
Obtenez un environnement local pour DynamoDB avec Docker
[Linux] Créer un environnement Jenkins avec Docker
J'ai fait une carte hexadécimale avec Python
J'ai fait un jeu de vie avec Numpy
J'ai fait un générateur Hanko avec GAN
J'ai fait un jeu rogue-like avec Python
Créer un environnement de développement Python pour le développement de l'IA
Créer un environnement de développement pour l'apprentissage automatique
J'ai fait un simple blackjack avec Python
J'ai créé un fichier de configuration avec Python
J'ai fait une bibliothèque pour l'assurance actuarielle
J'ai fait un simulateur de neurones avec Python
[Linux] Construction de l'environnement Docker avec Amazon Linux 2
J'ai créé un conteneur Docker pour utiliser JUMAN ++, KNP, python (pour pyKNP).
[Django] a créé un champ pour saisir des dates avec des nombres à 4 chiffres
Maintenance de l'environnement réalisée avec Docker (je souhaite post-traiter GrADS en Python
J'ai essayé de créer un environnement de développement Mac Python avec pythonz + direnv
J'ai fait une webAPI! Construire un environnement à partir de Django Rest Framework 1 avec EC2
J'ai fait un robot de remplacement de tampon avec une ligne
Créer un environnement de développement de langage C avec un conteneur
J'ai créé un fichier de dictionnaire python pour Neocomplete