Django プロジェクトをコンテナにデプロイし、ローカル ブラウザでアクセスします。

1. Docker がインストールされ、構成されていることを確認します。

2. デモ プロジェクトのルート ディレクトリに次のような Dockerfile という名前のファイルを作成します。

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"]

この Dockerfile は Python 3.9 イメージから構築され、PYTHONUNBUFFERED 環境変数を設定し、作業ディレクトリを /app に設定します。次に、依存関係をインストールし、プロジェクト全体をコンテナーの /app ディレクトリにコピーします。

3. プロジェクトのルート ディレクトリにrequirements.txtというファイルを作成し、その中にあるDjangoプロジェクトの依存関係をすべてリストします。次に例を示します。

Django==3.2.4
psycopg2-binary==2.8.6

プロジェクトのニーズに応じて依存関係を追加または削除できます。
プロジェクトが mysql に依存している場合は、Docker コンテナーの起動方法を定義する docker-compose.yml ファイルを作成する必要もあります。
このファイルは、Dockerfile と同じディレクトリに配置できます。

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:

この構成ファイルでは、db と app という 2 つのサービスを定義します。db サービスは、Docker Hub 上の MySQL 8.0 イメージを使用し、いくつかの環境変数とデータ ボリュームを設定します。アプリ サービスは Django イメージを使用し、コンテナーのポート 8000 をホストのポート 8000 にマップします。また、MySQL データベースに接続するためのいくつかの環境変数を設定します。最後に、永続的な MySQL データベース データのデータ ボリュームを定義します。

この構成ファイルでは、DB_HOST 環境変数を db に設定します。これは、Django コンテナーが db サービスの MySQL データベースに接続することを意味します。データベース名、ユーザー名、パスワードなどの他の環境変数も設定します。これらの環境変数は、Django コンテナーの起動時にアプリケーションに渡され、MySQL データベースに接続できるようになります。

最後に、MySQL データベースのデータをローカル ホストに永続的に保存する db-data というデータ ボリュームを定義します。このデータ ボリュームにより、Docker コンテナーが削除または再作成された場合でも、データベース データが確実に保持されます。

4. 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. 次のコマンドを使用して、Docker コンテナを構築して実行します。

docker-compose up --build

6. コンテナに入る

#进入docker-compose.yml文件所在目录
docker-compose exec web bash

または:

docker exec -it <container_name> bash

埋め込む:

python manage.py runserver 0.0.0.0:8000

7.http://localhost:8000/アクセスした
。 docker Inspection コマンドの出力では、コンテナの IP アドレスが [Networks] フィールドに表示されます。NetworkSettings.Networks はコンテナのネットワーク設定、IPAddress はコンテナのネットワーク設定です。コンテナのIPアドレス。
次のコマンドを使用して、コンテナの IP アドレスを取得できます。

docker inspect -f '{
    
    {range .NetworkSettings.Networks}}{
    
    {.IPAddress}}{
    
    {end}}' <CONTAINER_NAME>

その後、 を使用して djangohttp://$IP:8000/

docker-compose up --build と docker build の違いは次のとおりです。

docker-compose up --build は、docker-compose.yml ファイルで定義された複数のサービス コンテナーを使用してアプリケーションを構築し、起動します。イメージが存在しない場合は、docker-compose が自動的にイメージを構築します。イメージがすでに存在する場合、ビルドは繰り返されません。このコマンドは、必要なネットワークとボリュームも作成します。

docker build は、Docker イメージをビルドし、現在のディレクトリで Dockerfile を探すだけです。コンテナーを起動したり、ネットワークやボリュームを作成したりしません。

したがって、マルチコンテナー アプリケーションをビルドして起動する場合は、 docker-compose up --build を使用する必要があります。Docker イメージをビルドするだけの場合は、docker build コマンドを使用する必要があります。

おすすめ

転載: blog.csdn.net/liulanba/article/details/130516307