Eine Zusammenfassung des Verfahrens zum Erstellen eines Projekts und einer Anwendung mit Django on Docker und zum Anzeigen im Browser mithilfe des Entwicklungsservers.
mkdir django
cd django
Erstellen Sie eine Datei, die das zu installierende Paket angibt.
touch requirements.txt
requirements.txt
Django>=3.0,<4.0
psycopg2-binary>=2.8
Installieren Sie Django und Psycopg.
Psycopg ist ein Tool zur effizienten Nutzung von PostgreSQL. -binary ist eine Nur-Betriebssystem-Sprachversion, daher ist keine Kompilierung erforderlich.
Erstellen Sie eine Docker-Datei, um ein Python3-Image zu erstellen.
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/
・ Vom Bildnamen
Ziehen Sie das angegebene Image vom Docker-Hub. (Finden Sie lokale, wenn nicht auf Dockerhub)
・ ENV Variablenname
Umgebungsvariablen einstellen. Geben Sie 1 in die Variable PYTHONUNBUFFERED ein.
Stellen Sie die Standardausgabe (stdout) und die Standardfehlerausgabe (stderr) der Konsolenausgabe sofort ein, wenn ein Fehler auftritt (deaktivieren Sie den Puffer wie bei der Option -u von Python).
・ WORKDIR-Verzeichnis
Macht das angegebene Verzeichnis (/ code) zum Stammverzeichnis
· Host-Container KOPIEREN
Kopieren Sie die Host-Anforderungen.txt unter / code / des Containers
· Pip install -r Dateipfad
Installieren Sie das in der angegebenen Datei geschriebene Paket.
Im Allgemeinen verwendet die Datei die Datei require.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
Bereiten Sie zwei Container im Bild vor.
・ Version:" 3.8 "
Geben Sie die Version der Beschreibungsmethode von docker-compose.yml an.
Es muss angegeben werden, da die Schreibmethode je nach Version unterschiedlich ist.
・ Dienstleistungen
Der zu erstellende Container. Erstellen Sie zwei, db und web.
・ Bilder
Geben Sie das zu verwendende Bild an. Erstellen Sie einen Container, indem Sie Postgres aus dem Docker-Hub ziehen.
・ Umwelt
Umgebungsvariablen festlegen. Setzen Sie DB auf postgres. Benutzername und PW sind optional.
· Verzeichnispfad erstellen
Erstellen Sie einen Container aus der Docker-Datei im angegebenen Verzeichnis.
Wenn kein Dateiname angegeben ist, wählen Sie Docker-Datei. Wenn Sie einen anderen Namen haben, geben Sie auch den Dateinamen an.
・ Befehl
Ein Befehl, der in einem Container ausgeführt werden soll. Starten Sie den Server unter localhost: 8000.
Führen Sie runserver in manage.py aus. manage.py ist ein Befehlszeilenprogramm. Importieren Sie nützliche Befehle.
· Volumes: -Host: Container
Verknüpfen (mounten) Sie das Host-Verzeichnis mit dem angegebenen Verzeichnis im Container.
Der Projektordner auf dem Host und / oder der Code im Container werden synchronisiert. ** Erstellen Sie für Dateien, die Sie nicht synchronisieren möchten, .dockerignore ** und beschreiben Sie den Datei- / Ordnernamen.
Zugriff auf localhost: 8100 führt zu Port 8000 im Container.
・ Depends_on
Verbinden Sie den Webcontainer mit dem Datenbankcontainer. Bisher wurde Link verwendet, aber in Version 2.0 und höher können die Container in docker-compose.yml über ein Netzwerk ohne spezielle Beschreibung verbunden werden. (Ist depon_on unnötig?)
docker-compose run web django-admin startproject mysite
-Docker-compose run [Dienstname] [Befehl]
Erstellen Sie einen Container mit dem angegebenen Dienstnamen und führen Sie den Befehl aus.
Erstellen Sie ein Bild basierend auf der Datei docker-comopse.yml im ausgeführten Ordner, erstellen Sie einen Container und starten Sie alles auf einmal.
Starten Sie hier den Webdienst.
・ Jjango-admin startporject PJ name
Erstellen Sie einen PJ.
Ein Verzeichnis wird mit dem angegebenen PJ-Namen (mysite) erstellt.
Zu erstellende Datei
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,
}
}
(Referenz) Standardbeschreibung
# 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
Kürzung
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.
Starten Sie den erstellten Container.
Der angegebene Server wird gestartet. Um den Status anzuzeigen, öffnen Sie ein anderes Bash-Fenster und führen Sie "Docker ps" aus.
$ 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
Wenn Sie möchten, dass es im Hintergrund beginnt, verwenden Sie up -d
.
Die Seite wird geöffnet, wenn Sie auf localhost: 8100 zugreifen (Sie können im Container auf loaclhost: 8000 zugreifen).
##Starten Sie Bash in einem laufenden Container
$ docker exec -it django_web_1 bash
root@faef5f41e1c7
##Erstellen einer Django-App
root@faef5f41e1c7:/code# python manage.py startapp polls
##Überprüfen Sie den Ordner
root@faef5f41e1c7:/code# ls
Dockerfile docker-compose.yml manage.py mysite polls requirements.txt
Es ist gelungen, Umfragen im Container zu erstellen. Ein Verzeichnis wird auch auf der Hostseite erstellt. (Weil das Volume angegeben und synchronisiert ist)
Der Befehl django führt ähnliche Befehle aus, startproject und startapp.
django-admin startproject mysite
python manage.py startapp polls
Es gibt nur ein Projekt und es können mehrere Apps vorhanden sein.
Ein Status, in dem nur eine App namens Polls in einem Projekt namens mysite erstellt wird.
Da der Editor nicht im Container installiert ist, beenden Sie den Container einmal.
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),
]
Erkennen Sie polls urls.py als Pfad und machen Sie es mit polls / zugänglich.
Laden Sie nach dem Schreiben die Seite mit "localhost: 8100 / polls".
Die Anzeige ist erfolgreich abgeschlossen.
Recommended Posts