Sie müssen nicht mit Python oder Django vertraut sein, da sich der Datenbankserver auf die Erstellung einer "Postgres" -Umgebung konzentriert. Erstellen Sie zum Starten des Projekts an einer beliebigen Stelle ein Arbeitsverzeichnis. Bei Verwendung von docker-compose wird der Verzeichnisname, in dem sich die Datei docker-compose.yml befindet, als Präfix für den Containernamen und den Datenträgernamen verwendet. In der tatsächlichen Umgebung ist der Projektname usw. also von Bedeutung. Erstellen Sie einen Verzeichnisnamen **.
-#Erstellen eines Verzeichnisses namens django
% mkdir django
-#Wechseln Sie in das Django-Verzeichnis
% cd django
Fügen Sie keine unnötigen Dateien hinzu, da das Django-Verzeichnis der Build-Kontext ist.
% vim Dockerfile
Dockerfile
#Geben Sie das Image der Ausführungsumgebung von Python3 an
FROM python:3
#Geben Sie 1 für die Umgebungsvariable PYTHONUNBUFFERED an. Sie können den Puffer ungültig machen, indem Sie etwas in dieser Umgebungsvariablen festlegen.
ENV PYTHONUNBUFFERED 1
#Codeverzeichnis erstellen
RUN mkdir /code
#Arbeitsverzeichnis in Codeverzeichnis verschieben
WORKDIR /code
#Anforderungen an den Build-Kontext.Legen Sie txt in das Codeverzeichnis
COPY requirements.txt /code/
#Sie führen eine Pip-Installation aus. pip ist ein Python-Paket-Tool
# -Anforderungen von r.Führen Sie die Installation des in txt beschriebenen Pakets durch.
# requirements.txt wird im Build-Kontext erstellt, beschreibt jedoch den Paketnamen der Treiber django und Postgres.
RUN pip install -r requirements.txt
#Alle Inhalte des Build-Kontexts/Es wird in den Code eingefügt.
COPY . /code/
% vim requirements.txt
-# version2.0 Django-Installation
Django==2.0
-#Treiber für die Verbindung zu Postgres mit 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
Es wird angenommen, dass zwei Container, "db" und "web", in ** services ** gestartet werden. Da Punkte in Build in ** Web ** definiert sind, erstellen und verwenden Sie das Image aus der zuvor definierten Docker-Datei. Verwenden Sie das SQL-Image "postgres" für db. ** Befehl ** bezeichnet den Befehl, der ausgeführt wird, wenn der Container gestartet wird. Hier wird "manage.py" mit "python3" ausgeführt, und die IP-Adresse und die Portnummer zum Abhören von "runserver", mit dem ein kompakter Entwicklungsserver gestartet wird, werden als Argumente angegeben. "Manage.py" ist eine Datei, die automatisch generiert wird, wenn Django installiert wird. Die hier beschriebenen Befehle werden jedoch überschrieben, wenn die Befehle bei der Ausführung des Containers übergeben werden. Daher wird der Docker-Compose-Befehl ausgeführt, wenn kein Befehl als Argument übergeben wird. ** valunes ** bind stellt das aktuelle Verzeichnis in / code ein. ** ports ** wird bei 8000 veröffentlicht und für die Übertragung in den Container 8000 angegeben. Die Übertragungsziel-Portnummer muss mit der Portnummer von "runserver" übereinstimmen. ** abhängige_on ** Definieren Sie eine Abhängigkeit, damit der Dienst "db" gestartet wird, bevor der Dienst "web" gestartet wird.
% docker -compose run web django-admin.py startproject examplepj .
Geben Sie den in yml definierten "Web" -Dienst im Argument des Docker-Compose-Laufs an. Danach der Befehl, der ausgeführt werden soll, wenn der Container des Webdienstes gestartet wird. django-admin.py wird auch durch die Installation von Django erstellt. Hier wird django-admin.py ausgeführt und ein Django-Projekt mit "Projekt starten" erstellt. Der Projektname lautet examplepj und das Speicherziel ist das aktuelle Verzeichnis. Das aktuelle Verzeichnis ist das in der Docker-Datei angegebene Verzeichnis / code.
% ls -l
Sie können sehen, dass das aktuelle aktuelle Verzeichnis und das Verzeichnis / code des Containers gebunden sind.
% vim examplepj/settings.py
settings.py
ALLOWED_HOSTS = ['*']
----Kürzung----
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql', #Geben Sie postgresql für ENGINE an
'NAME': 'postgres', #Postgres angeben
'USER': 'postgres', #Postgres angeben
'PASSWORD': 'password',
'HOST': 'db', #docker-Da der von compose gestartete Container eine Namensauflösung anhand des Dienstnamens durchführen kann, kann der Host als Datenbank angegeben werden.
'PORT': 5432, #Geben Sie den Standardport 5432 von postgresql an
}
}
% docker-compose up -d
Starting django_db_1 ... done
Creating django_web_1 ... done
Es kann bestätigt werden, dass die Verbindung mit Ip: 8000 hergestellt wurde. Beachten Sie, dass ein Verwaltungsskript wie "manage.py" möglicherweise fehlschlägt, wenn Sie es nicht in einem Container ausführen. Da die Ausführungsumgebung von Python im Container vorbereitet ist, wird die Skriptausführung von Python selbst im Container ausgeführt.
-#Erstellen Sie eine Umfrage-Anwendungsdatei im Projekt
% docker-compose run web python3 manage.py startapp polls
-# views.py Seite ändert
% 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.")
Dies definiert die Nachricht, die angezeigt wird, wenn auf die URL "Abfragen" zugegriffen wird.
% vim polls/urls.py
urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
Es ist definiert, um das Ergebnis der erstellten Indexmethode anzuzeigen.
% vim examplepj/urls.py
urls.py
urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
Dadurch wird die Indexseite unter ip: 8000 / polls / aufgerufen. Wenn Sie den Quellcode auf diese Weise hinzufügen, können Sie mit der Entwicklung fortfahren, während Sie django im Container ausführen.
% docker-compose stop
Recommended Posts