1. Stellen Sie sicher, dass Docker installiert und konfiguriert ist
2. Erstellen Sie im Stammverzeichnis des Demoprojekts eine Datei mit dem Namen Dockerfile. Der Inhalt der Datei lautet wie folgt:
FROM python:3.9
# 设置 Python 环境变量
ENV PYTHONUNBUFFERED 1
# 安装 MySQL 客户端库
RUN apt-get update && apt-get install -y default-libmysqlclient-dev
# 创建项目目录并设置工作目录
RUN mkdir /app
WORKDIR /app
# 复制项目依赖文件并安装依赖
COPY requirements.txt /app/
RUN pip install -r requirements.txt
# 复制项目文件
COPY . /app/
# 设置环境变量
ENV DB_HOST=db
ENV DB_NAME=database_name
ENV DB_USER=user_name
ENV DB_PASSWORD=user_password
# 运行 Django 项目
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
Diese Docker-Datei wird aus dem Python 3.9-Image erstellt, legt die Umgebungsvariable PYTHONUNBUFFERED fest und legt das Arbeitsverzeichnis auf /app fest. Installieren Sie dann Abhängigkeiten und kopieren Sie das gesamte Projekt in das /app-Verzeichnis des Containers.
3. Erstellen Sie eine Datei mit dem Namen „requirements.txt“ im Stammverzeichnis des Projekts und listen Sie darin alle Django-Projektabhängigkeiten auf, zum Beispiel:
Django==3.2.4
psycopg2-binary==2.8.6
Abhängigkeiten können je nach Projektanforderungen hinzugefügt oder entfernt werden.
Wenn das Projekt von MySQL abhängt, müssen Sie außerdem eine Datei „docker-compose.yml“ erstellen, um zu definieren, wie der Docker-Container gestartet wird.
Diese Datei kann im selben Verzeichnis wie die Docker-Datei abgelegt werden:
version: '3'
services:
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: mysecretpassword
MYSQL_DATABASE: database_name
MYSQL_USER: user_name
MYSQL_PASSWORD: user_password
volumes:
- db-data:/var/lib/mysql
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/app
ports:
- "8000:8000"
depends_on:
- db
volumes:
db-data:
In dieser Konfigurationsdatei definieren wir zwei Dienste: db und app. Der Datenbankdienst verwendet das MySQL 8.0-Image auf Docker Hub und legt einige Umgebungsvariablen und Datenvolumina fest. Der App-Dienst verwendet Ihr Django-Image und ordnet Port 8000 des Containers Port 8000 des Hosts zu. Außerdem legen wir einige Umgebungsvariablen für die Verbindung zur MySQL-Datenbank fest. Abschließend definieren wir ein Datenvolumen für persistente MySQL-Datenbankdaten.
In dieser Konfigurationsdatei setzen wir die Umgebungsvariable DB_HOST auf db, was bedeutet, dass der Django-Container eine Verbindung zur MySQL-Datenbank im db-Dienst herstellt. Wir legen auch einige andere Umgebungsvariablen fest, darunter den Datenbanknamen, den Benutzernamen und das Passwort. Diese Umgebungsvariablen werden beim Start des Django-Containers an die Anwendung übergeben, damit diese eine Verbindung zur MySQL-Datenbank herstellen kann.
Abschließend definieren wir ein Datenvolumen namens db-data, das die Daten der MySQL-Datenbank dauerhaft auf dem lokalen Host speichert. Dieses Datenvolumen stellt sicher, dass die Datenbankdaten auch dann erhalten bleiben, wenn der Docker-Container gelöscht oder neu erstellt wird.
4. Ändern Sie die Datei „settings.py“.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': os.getenv('DB_NAME'),
'USER': os.getenv('DB_USER'),
'PASSWORD': os.getenv('DB_PASSWORD'),
'HOST': os.getenv('DB_HOST'),
'PORT': '3306',
}
}
5. Verwenden Sie die folgenden Befehle, um den Docker-Container zu erstellen und auszuführen:
docker-compose up --build
6. Betreten Sie den Container
#进入docker-compose.yml文件所在目录
docker-compose exec web bash
oder:
docker exec -it <container_name> bash
implementieren:
python manage.py runserver 0.0.0.0:8000
7. Geben Sie die http://localhost:8000/
aufgerufene
. In der Ausgabe des Docker-Inspect-Befehls finden Sie die IP-Adresse des Containers im Feld „Netzwerke“, wobei NetworkSettings.Networks die Netzwerkeinstellung des Containers und IPAddress die ist IP-Adresse des Containers.
Sie können den folgenden Befehl verwenden, um die IP-Adresse des Containers abzurufen:
docker inspect -f '{
{range .NetworkSettings.Networks}}{
{.IPAddress}}{
{end}}' <CONTAINER_NAME>
Dann können Sie http://$IP:8000/
über Django zugreifen
Der Unterschied zwischen docker-compose up --build und docker build ist wie folgt:
docker-compose up --build erstellt und startet eine Anwendung mit mehreren Service-Containern, die durch die Datei docker-compose.yml definiert sind. Wenn das Image nicht vorhanden ist, erstellt Docker-Compose das Image automatisch. Der Build wird nicht wiederholt, wenn das Image bereits vorhanden ist. Dieser Befehl erstellt auch die erforderlichen Netzwerke und Volumes.
Docker Build erstellt lediglich ein Docker-Image und sucht im aktuellen Verzeichnis nach einer Docker-Datei. Es startet weder Container, noch erstellt es Netzwerke oder Volumes.
Wenn Sie also eine Multi-Container-Anwendung erstellen und starten möchten, sollten Sie docker-compose up --build verwenden. Wenn Sie nur ein Docker-Image erstellen müssen, sollten Sie den Befehl docker build verwenden.