Stellen Sie das Django-Projekt im Container bereit und greifen Sie in einem lokalen Browser darauf zu

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.

Supongo que te gusta

Origin blog.csdn.net/liulanba/article/details/130516307
Recomendado
Clasificación