Es gibt viele irrelevante Artikel im Internet, daher habe ich diese Veröffentlichung vorbereitet. Grundsätzlich habe ich mich beim Schreiben des Artikels auf das Beispiel der Konfiguration von Docker für Django in der Docker-Dokumentation gestützt .
Hier beschreiben wir das Docker-Setup für das Django-Framework und die MySQL-Datenbank, die außerhalb des Containers gespeichert werden, sodass Sie sich keine Sorgen machen müssen, dass etwas mit unserem Container passiert.
Beim Schreiben dieses Handbuchs wurde Folgendes verwendet:
- Ubuntu 20.04
- Docker 19.03.12
- Docker-Compose 1.26.2
- Python 3.8
- MySQL 5.7
- django 3.1.1
- mysqlclient 2.0.1
- django-mysql 3.8.1
Einrichtung des Arbeitsbereichs
Bevor Sie mit dem Setup beginnen, müssen Sie den Arbeitsbereich vorbereiten:
- Installieren Sie Docker und Docker-Compose . Der Installationsprozess ist in der Docker-Dokumentation beschrieben.
- Erstellen Sie ein Verzeichnis, in dem sich unser Projekt befindet (in diesem Beispiel Projekt). Erstellen Sie in diesem Verzeichnis ein weiteres Verzeichnis, in dem die Konfiguration zum Ausführen des Python-Images (in diesem Beispiel Web) gespeichert wird.
./project
/web
Damit ist die Vorbereitung abgeschlossen und Sie können mit der Einrichtung unseres kleinen Projekts beginnen.
Anforderungen.txt
Erstellen Sie im Webverzeichnis eine Datei mit dem Namen require.txt.
In dieser Datei deklarieren wir Pakete, damit unsere Django-Anwendung funktioniert.
/project/web/requirements.txt
Django==3.1.1
mysqlclient==2.0.1
django-mysql==3.8.1
Wie Sie sehen können, ist Django selbst hier registriert, ebenso wie Pakete für die Kommunikation mit der MySQL-Datenbank.
.
Dockerfile
web Dockerfile.
Dockerfile . .
:
/project/web/Dockerfile
FROM python:3.8
ENV PYTHONUNBUFFERED 1
RUN mkdir /web_django
WORKDIR /web_django
COPY requirements.txt /web_django/
RUN pip install --upgrade pip && pip install -r requirements.txt
ADD . /web_django/
python , , . web_django .
pip (--upgrade pip), .. , .
docker-compose.yml
docker-compose.yml.
. - . compose , Docker , , . , .
.
/project/docker-compose.yml
version: '3'
services:
web:
build: ./web
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/web_django
ports:
- '8000:8000'
depends_on:
- db
db:
image: mysql:5.7
ports:
- '3306:3306'
environment:
MYSQL_DATABASE: 'db_django'
MYSQL_USER: 'root'
MYSQL_PASSWORD: 'password'
MYSQL_ROOT_PASSWORD: 'password'
restart: always
volumes:
- ./db_django:/var/lib/mysql
web/Dockerfile . django 8000 . mysql.
mysql. : , , , ( , , ) , . , , , , mysql .
. django .
django
(project/) . django web_django.
sudo docker-compose run web django-admin startproject web_django .
:
drwxr-xr-x 6 root root 4,0K 16 21:49 db_django
-rw-rw-r-- 1 kafka kafka 466 16 21:31 docker-compose.yml
-rwxr-xr-x 1 root root 666 16 21:34 manage.py
drwxrwxr-x 2 kafka kafka 4,0K 16 21:31 web
drwxr-xr-x 3 root root 4,0K 16 21:34 web_django
, .. root .
sudo chown -R $USER:$USER web_django
Öffnen Sie die Django-Einstellungsdatei des Projekts unter dem Pfad web_django / settings.py.
In dieser Datei ersetzen wir die Einstellungen für die Datenbankverbindung , die wir in docker-compose.yml angegeben haben.
/project/web_django/settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db_django',
'USER': 'root',
'PASSWORD': 'password',
'HOST': 'db',
'PORT': '3306',
}
}
Jetzt ist alles fertig und Sie können Docker-Compose ausführen.
Start des Projekts
Führen Sie diesen Befehl aus, um Container zu starten
docker-compose up
Um Container im Hintergrund auszuführen, müssen Sie ein zusätzliches Argument angeben
docker-compose up -d
Um Bilder neu zu erstellen, können Sie den Befehl ausführen
docker-compose build
Datenbankmigration
Führen Sie die folgenden Befehle aus, um die Datenbank zu migrieren:
docker-compose run web python manage.py makemigrations
docker-compose run web python manage.py migrate