💡

[Django] Dockerファイルとdocker-compose.ymlの違い

2023/01/16に公開

Dockerファイルとdocker-compose.ymlの違い

Dockerfileは、Dockerイメージを構築するために使用される設定ファイルです。Dockerfileには、イメージに含まれるファイルやアプリケーションの設定などが記述されます。

Docker Composeは、複数のDockerコンテナを組み合わせてアプリケーションを実行するためのツールです。docker-compose.ymlは、Docker Composeを使用するための設定ファイルで、複数のコンテナ間の関係や環境変数などが記述されます。

つまり、Dockerfileは単独のDockerイメージを作るための設定ファイルであり、docker-compose.ymlは複数のDockerイメージを組み合わせてアプリケーションを実行するための設定ファイルです。

DjangoにおけるDockerファイルとdocker-compose.yml

DjangoアプリケーションをDockerで実行する場合、Dockerfileとdocker-compose.ymlの両方が必要になることがあります。

Dockerfileは、Djangoアプリケーションを実行するために必要なPythonやDjangoなどの依存関係をインストールしたDockerイメージを構築するために使用します。

docker-compose.ymlは、Djangoアプリケーションを実行するために必要な複数のDockerコンテナを組み合わせるために使用します。Djangoアプリケーションは、Webサーバーとデータベースなどの複数のコンポーネントを必要とするため、docker-compose.ymlを使用してそれらを組み合わせることで、アプリケーションを実行することができます。

ただし、Djangoアプリケーションを単一のコンテナで実行する場合は、docker-compose.ymlは不要です。

Docker ファイル例

FROM python:3.9

ENV PYTHONUNBUFFERED 1

RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install --upgrade pip && pip install -r requirements.txt
COPY . /code/

このDockerfileは、Python3.9イメージをベースにしています。そして、必要なPythonのパッケージをインストールし、アプリケーションのコードをコピーしています。

docker-compose.yml 例

version: '3'
services:
  db:
    image: postgres
    environment:
      - POSTGRES_DB=mydb
      - POSTGRES_USER=myuser
      - POSTGRES_PASSWORD=mypassword
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

このdocker-compose.ymlは、PostgresデータベースとDjangoアプリケーションのWebサーバーを組み合わせています。そして、webサービスはdbサービスに依存しています。

これらのサンプルは、Djangoアプリケーションを実行するための基本的な設定であり、実際のアプリケーションに応じて設定を変更する必要があります

ファイルの実行方法

Dockerfileとdocker-compose.ymlを使用してDjangoアプリケーションを実行するには、以下のようにします。

  1. Dockerfileが存在するフォルダに移動します。
  2. 次のコマンドを実行して、Dockerイメージをビルドします。
docker build -t myimage .
  1. docker-compose.ymlが存在するフォルダに移動します。
  2. 次のコマンドを実行して、Docker Composeを使用してアプリケーションを起動します。
docker-compose up
  1. アプリケーションが起動したら、ブラウザでhttp://localhost:8000にアクセスして、アプリケーションが正常に動作していることを確認します。
  2. アプリケーションを停止するには、次のコマンドを実行します。
docker-compose down

注意: 上記の例は、Dockerfileとdocker-compose.ymlが同じフォルダにあると仮定しています。そうでない場合は、適切なパスを指定する必要があります。

Discussion