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 コマンドを使用する必要があります。