Vous n'avez pas besoin de vous familiariser avec python ou Django car le serveur de base de données se concentre sur la construction d'un environnement «postgres». Pour démarrer le projet, créez un répertoire de travail n'importe où. Lorsque vous utilisez docker-compose, le nom du répertoire dans lequel se trouve le fichier docker-compose.yml est utilisé comme préfixe pour le nom du conteneur et le nom du volume, donc dans l'environnement réel, le nom du projet, etc. est ** significatif. Créez un nom de répertoire **.
-#Créer un répertoire appelé django
% mkdir django
-#Déplacer vers le répertoire django
% cd django
N'incluez pas de fichiers inutiles car le répertoire django est le contexte de construction.
% vim Dockerfile
Dockerfile
#Spécifiez l'image de l'environnement d'exécution de python3
FROM python:3
#Spécifiez 1 pour la variable d'environnement PYTHONUNBUFFERED. Vous pouvez invalider le tampon en définissant quelque chose dans cette variable d'environnement.
ENV PYTHONUNBUFFERED 1
#Créer un répertoire de code
RUN mkdir /code
#Déplacer le répertoire de travail vers le répertoire de code
WORKDIR /code
#Exigences sur le contexte de construction.Mettre txt dans le répertoire de code
COPY requirements.txt /code/
#Vous exécutez une installation pip. pip est un outil de package python
# -exigences spécifiées par r.Effectuez l'installation du package décrit dans txt.
# requirements.txt est créé dans le contexte de construction mais décrit le nom du package des pilotes django et Postgres.
RUN pip install -r requirements.txt
#Tout le contenu du contexte de construction/Il est placé dans le code.
COPY . /code/
% vim requirements.txt
-# version2.0 Installation de Django
Django==2.0
-#Pilote de connexion à postgres avec python
psycopg2
docker-compose.yml
version: '3'
services:
db:
image: postgres
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
web:
build: .
command: python3 manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
On suppose que deux conteneurs, "db" et "web", démarreront dans ** services **. Étant donné que les points sont définis dans build in ** web **, créez et utilisez l'image à partir du Dockerfile défini précédemment. Utilisez l'image SQL "postgres" pour db. ** commande ** signifie la commande exécutée au démarrage du conteneur. Ici, "manage.py" est exécuté avec "python3", et l'adresse IP et le numéro de port à écouter sont spécifiés comme "runserver" pour démarrer un serveur léger pour le développement comme argument. "Manage.py" est un fichier qui est généré automatiquement lors de l'installation de Django. Cependant, les commandes décrites ici seront écrasées si les commandes sont passées lorsque le conteneur est exécuté. Par conséquent, si vous ne passez pas la commande comme argument, la commande docker-compose sera exécutée. ** valunes ** bind monte le répertoire courant sur / code. ** ports ** est publié à 8000 et spécifié pour être transféré au conteneur 8000. Il est nécessaire de faire correspondre le numéro de port du "serveur d'exécution" avec le numéro de port de la destination de transfert. ** depend_on ** Définissez une dépendance pour que le service "db" soit démarré avant le démarrage du service "web".
% docker -compose run web django-admin.py startproject examplepj .
Spécifiez le service "web" défini en yml dans l'argument de l'exécution de docker-compose. Après cela, la commande à exécuter lorsque le conteneur du service Web est démarré. django-admin.py est également créé en installant Django. Ici, django-admin.py est exécuté et un projet django est créé avec "start project". Le nom du projet est examplepj et la destination de sauvegarde est le répertoire courant. Le répertoire actuel sera le répertoire / code spécifié dans le Dockerfile.
% ls -l
Vous pouvez voir que le répertoire courant actuel et le répertoire / code du conteneur sont montés en liaison.
% vim examplepj/settings.py
settings.py
ALLOWED_HOSTS = ['*']
----réduction----
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql', #Spécifiez postgresql pour ENGINE
'NAME': 'postgres', #Spécifier les postgres
'USER': 'postgres', #Spécifier les postgres
'PASSWORD': 'password',
'HOST': 'db', #docker-Étant donné que le conteneur lancé par compose peut effectuer la résolution de noms par le nom du service, l'hôte peut être spécifié en tant que db.
'PORT': 5432, #Spécifiez le port par défaut 5432 de postgresql
}
}
% docker-compose up -d
Starting django_db_1 ... done
Creating django_web_1 ... done
Il peut être confirmé que la connexion est établie avec Ip: 8000. Notez que si vous exécutez un script administratif tel que manage.py, il peut échouer si vous ne l'exécutez pas dans un conteneur. Puisque l'environnement d'exécution de python est préparé dans le conteneur, l'exécution du script de python lui-même est exécutée dans le conteneur.
-#Créer un fichier d'application de sondages dans le projet
% docker-compose run web python3 manage.py startapp polls
-# views.modifications de la page py
% vim polls/views.py
views.py
from django.http import HttpResponse
# Create your views here.
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
Ceci définit le message qui sera affiché lors de l'accès à l'URL "sondages".
% vim polls/urls.py
urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
Il est défini pour afficher le résultat de la méthode d'index créée.
% vim examplepj/urls.py
urls.py
urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
Cela affichera la page d'index à l'adresse ip: 8000 / polls /. En ajoutant le code source de cette manière, vous pouvez poursuivre le développement tout en exécutant django dans le conteneur.
% docker-compose stop
Recommended Posts