Un résumé de la procédure de création d'un projet et d'une application à l'aide de Django sur docker et son affichage sur le navigateur à l'aide du serveur de développement
mkdir django
cd django
Créez un fichier qui spécifie le package à installer.
touch requirements.txt
requirements.txt
Django>=3.0,<4.0
psycopg2-binary>=2.8
Installez Django et Psycopg.
Psycopg est un outil pour une utilisation efficace de PostgreSQL. -binary est une version linguistique uniquement pour le système d'exploitation, donc aucune compilation n'est requise.
Créez un fichier docker pour créer une image python3.
touch dockerfile
dockerfile
FROM python:3
ENV PYTHONUNBUFFERED=1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
・ À partir du nom de l'image
Extrayez l'image spécifiée du hub docker. (Trouver local sinon sur dockerhub)
・ ʻENV nom de la variable` Définition des variables d'environnement. Mettez 1 dans la variable PYTHONUNBUFFERED. Faites la sortie standard (stdout) et la sortie d'erreur standard (stderr) de la sortie de la console immédiatement lorsqu'une erreur se produit (désactivez le tampon, comme l'option -u de python).
・ Répertoire WORKDIR
Fait du répertoire spécifié (/ code) le répertoire racine
· COPIER le conteneur hôte
Copiez l'hôte requirements.txt sous / code / du conteneur
· Pip install -r chemin du fichier
Installez le package écrit dans le fichier spécifié.
Généralement, le fichier utilise requirements.txt. 「-r」 = 「--requirement」
touch docker-compose.yml
docker-compose.yml
version: "3.8"
services:
db:
image: postgres
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8100:8000"
depends_on:
- db
Préparez deux conteneurs dans l'image.
・ Version:" 3.8 "
Spécifiez la version de la méthode de description de docker-compose.yml.
Il est nécessaire de préciser car la méthode d'écriture diffère selon la version.
・ Services
Le conteneur à créer. Créez deux, db et web.
・ ʻImages` Spécifiez l'image à utiliser. Créez un conteneur en extrayant les postgres du hub docker.
・ ʻEnvironnement` Définissez les variables d'environnement. Définissez DB sur postgres. le nom d'utilisateur et PW sont facultatifs.
· Chemin du répertoire de construction
Créez un conteneur à partir du dockerfile dans le répertoire spécifié.
Si aucun nom de fichier n'est spécifié, sélectionnez le fichier docker. Si vous avez un nom différent, spécifiez également le nom du fichier.
・ Commande
Une commande à exécuter à l'intérieur d'un conteneur. Démarrez le serveur sur localhost: 8000.
Exécutez runserver dans manage.py. manage.py est un utilitaire de ligne de commande. Importez des commandes utiles.
· Volumes: -Hôte: Conteneur
Liez (montez) le répertoire hôte avec le répertoire spécifié dans le conteneur.
Le dossier de projet sur l'hôte et / code dans le conteneur sont synchronisés. ** Pour les fichiers que vous ne souhaitez pas synchroniser, créez .dockerignore ** et décrivez le nom du fichier / dossier.
Accès localhost: 8100 mène au port 8000 dans le conteneur.
・ Dépend_on
Connectez le conteneur Web au conteneur db. Auparavant, le lien était utilisé, mais pour la version 2.0 et supérieure, les conteneurs de docker-compose.yml peuvent être connectés via un réseau sans aucune description particulière. (Cela dépend-il de inutile?)
docker-compose run web django-admin startproject mysite
-Docker-compose run [nom du service] [commande]
Créez un conteneur avec le nom de service spécifié et exécutez la commande.
Créez une image basée sur le fichier docker-comopse.yml dans le dossier exécuté, créez un conteneur et démarrez tout en même temps.
Ici, démarrez le service Web.
・ Nom de Jjango-admin startporject PJ
Créez un PJ.
Un répertoire est créé avec le nom PJ spécifié (mysite).
Fichier à créer
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
mysite/settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'postgres',
'USER': 'postgres',
'PASSWORD': 'postgres',
'HOST': 'db',
'PORT': 5432,
}
}
(Référence) Description par défaut
# Database
# https://docs.djangoproject.com/en/3.1/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
docker-compose up
réduction
web_1 | Django version 3.1.2, using settings 'mysite.settings'
web_1 | Starting development server at http://0.0.0.0:8100/
web_1 | Quit the server with CONTROL-C.
Démarrez le conteneur créé.
Le serveur spécifié démarre. Pour voir l'état, ouvrez une autre fenêtre bash et exécutez docker ps
.
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9615ecd4098f django_web "python manage.py ru…" 16 minutes ago Up About a minute 0.0.0.0:8100->8000/tcp django_web_1
Si vous voulez qu'il démarre en arrière-plan, utilisez ʻup -d`.
La page s'ouvre lorsque vous accédez à localhost: 8100 (vous pouvez accéder à loaclhost: 8000 dans le conteneur)
##Lancer bash dans un conteneur en cours d'exécution
$ docker exec -it django_web_1 bash
root@faef5f41e1c7
##Créer une application django
root@faef5f41e1c7:/code# python manage.py startapp polls
##Vérifiez le dossier
root@faef5f41e1c7:/code# ls
Dockerfile docker-compose.yml manage.py mysite polls requirements.txt
Réussir à créer des sondages dans le conteneur. Un répertoire est également créé côté hôte. (Parce que le volume est spécifié et synchronisé)
La commande django exécute des commandes similaires, startproject et startapp.
django-admin startproject mysite
python manage.py startapp polls
Il n'y a qu'un seul projet et il peut y avoir plusieurs applications.
Une seule application appelée polls est créée dans le projet appelé mysite.
L'éditeur n'étant pas installé dans le conteneur, quittez le conteneur une fois.
root@faef5f41e1c7:/code# exit
polls/views.py
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, This is Django Polls")
polls/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
mysite/urls.py
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
Reconnaissez les urls.py des sondages comme un chemin et rendez-le accessible avec polls /.
Après l'écriture, chargez la page avec localhost: 8100 / polls
.
L'affichage est terminé avec succès.