Aufbau einer Django-Entwicklungsumgebung mit Docker-Compose (persönliches Memorandum)

Einführung

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 **.

Ein Verzeichnis erstellen

-#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.

Erstellen Sie eine Docker-Datei, um ein Image der Python-Ausführungsumgebung zu erstellen.

% 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/

Anforderungs.txt erstellen

% vim requirements.txt
-# version2.0 Django-Installation
Django==2.0
-#Treiber für die Verbindung zu Postgres mit Python
psycopg2

Docker-compose.yml erstellen

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.

Erstellen eines Django-Projekts

% 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.

Beschreiben Sie die Datenbankeinstellungen und starten Sie den Entwicklungswebserver.

% 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
    }
}

Starten Sie jeden Dienst

% 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.

Das Django-Tutorial fragt nach der Anwendungserstellung

-#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.

Routeneinstellung für polls.index

% 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.

Stellen Sie ein, dass die erstellte urls.py aus der Haupt-urls.py gelesen werden soll.

% 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.

Behälter stoppen

% docker-compose stop

Recommended Posts

Aufbau einer Django-Entwicklungsumgebung mit Docker-Compose (persönliches Memorandum)
Erstellung einer Datenanalyseumgebung mit Docker (persönliches Memorandum)
Rails API-Serverumgebungskonstruktion mit Docker-Compose
Erstellen einer Entwicklungsumgebung mit IntelliJ IDEA + Maven + Tomcat 9
Java Entwicklungsumgebung Konstruktion
Konstruktionshandbuch für eine stabile Entwicklungsumgebung für "Rails6" mit "Docker-compose"
Was ist Docker-Compose (persönliches Memorandum)
Umgebungskonstruktion für die Entwicklung von Servlet-Anwendungen
[Unity] Konstruktionsverfahren für die Android-Entwicklungsumgebung
Aufbau einer Laravel-Entwicklungsumgebung mit Docker (Mac)
Sapper × Go (Echo) × Aufbau einer Docker-Entwicklungsumgebung
Erstellen einer Entwicklungsumgebung für Universal Robotics UR Caps
Konstruktionsnotiz für die Java-Entwicklungsumgebung auf dem Mac
Erstellen einer Kotlin-Entwicklungsumgebung mit SDKMAN
[Docker] Entwicklung der Entwicklungsumgebung Rails6 / Ruby2.7 / MySQL8
Konstruktionsmemorandum zur Redmine-Umgebung (Scrum, Agile Plug-In)
Aufbau der Spring Boot + Docker Java-Entwicklungsumgebung
[Persönliches Memo] Die Java-Entwicklungsumgebung ist bereit
Einfache Konstruktion der Docker + Django-Entwicklungsumgebung
Bereiten Sie mit Docker-Compose eine Nuxt (Web) + Laravel (API) -Entwicklungsumgebung im selben Repository vor
[Jakarta EE 8 Anwendungsentwicklung mit Gradle] 1. Umgebungskonstruktion
Optimierung der Web-Systementwicklung mit Docker-Compose und Git
Umgebungskonstruktionsverfahren für die Verwendung von PowerMock mit JUnit
Erstellen einer Kaggle-Umgebung mit offiziellem Docker und vscode
Datenverwaltung mit Volume in Docker (persönliches Memorandum)
Einfache Erstellung der Docker Compose + Django-Entwicklungsumgebung
[Hinweis] Struts2-Umgebungskonstruktion mit Gradle in Eclipse
Ermöglichen Sie die Entwicklung in einer Eclipse-Umgebung mit dem iPLAss SDK
Konstruktions- und Entwicklungsverfahren für lokale WordPress-Umgebungen mit Docker
Java-Entwicklungsumgebung
[Frühling] Umweltbau
Erstellen Sie eine Java-Entwicklungsumgebung mit jenv auf Ihrem Mac
Einführung in Slay the Spire Mod Development (2) Konstruktion der Entwicklungsumgebung
Erstellen Sie eine Java-Entwicklungsumgebung auf Mac-JDK Install (2020-Aufbewahrungsversion).
[Mac] VS Code-Entwicklungsumgebungskonstruktion (Java, Gradle, Node.js)
Datenverwaltung mit Docker's bindmount und tmpfs (persönliches Memorandum)
TDD-Studie Nr. 1 Umweltbau & erste testgetriebene Entwicklung (6. Juli 2020)
Versuchen Sie, mit Docker eine Java-Entwicklungsumgebung zu erstellen
Erstellen Sie eine Java + Spring-Entwicklungsumgebung mit VirtualBox + Ubuntu (Xfce4).