この記事について
この記事は、「Django + MySQLの環境構築を通じてDockerの使い方を学ぶ」に関連する記事群の Part.2 です。
- venvを利用してPythonの仮想環境を構築する
- Dockerfileの記述を考える ( 当記事 )
- docker-compose.ymlの記述を考える
- 設定ファイルを編集し docker-compose up を実行する
- 依存関係にあるサービス間のコンテナ立ち上げタイミングを調整する
はじめに
この記事では、Django
向けのDockerイメージを作成するため、Dockerfile
の記述について考えていきます。
Dockerイメージについては、( あくまで"頭の中のイメージ"としては ) ホストマシンとは独立したOSで動く、プロジェクトを動かすための小さな専用のマシンのようなものだと捉えています。
公式によって用意されているPython
のイメージを、Dockerfile
内の記述を通してDjango
プロジェクト向けに設計します。記述そのものは公式ドキュメントに書いてあるものとほぼ同じ内容です。ここでは、今後必要に応じて設計・カスタマイズを行うことができるよう、その記述の意味を考えていきます。
なお、Dockerのインストール等はすでに済んでいるものとして進めていきます。
Dockerfile
は前回作成したプロジェクトのディレクトリの直下に作成します。
記述内容
先に、ファイル全体の記述としては、以下の通りです。
FROM python:3.7
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
COPY . /code/
EXPOSE 8000
記述の意味を考える
上から順番に、
FROM python3.7
1行目、すでに作成されているイメージの中から、どのイメージを使うか、を指定します。前回の記事で作成した仮想環境に合わせて、ここではPython3.7
を指定しています。
ENV PYTHONUNBUFFERED 1
2行目、ENV
で環境変数を指定しています。環境変数PYTHONUNBUFFERED
の値を1
にするということです。標準入出力に関するPythonのバッファリングを無効にするために設定しておきます。
RUN mkdir /code
飛んで4行目、RUN
で構築時に実行するコマンドを指定できます。ここでは、code
ディレクトリを作成しています。
WORKDIR /code
5行目、ワークディレクトリを指定します。以後のRUN
やCMD
を、どのディレクトリから実行するかの指定を行なっています。
COPY requirements.txt /code/
間を開けて7行目、前回作成した**requirements.txt
をcode
ディレクトリ下にコピー**します。ADD
でも同じことができますが、用途の広さの関係などから、純粋なファイルのコピーにはCOPY
が推奨されているようです。( 公式ドキュメント参照 )
RUN pip install --upgrade pip
8行目で、pip
そのものをアップグレードしておき、
RUN pip install -r requirements.txt
9行目、先ほどコピーしたrequirements.txt
に記述されているパッケージ群をインストールします。
COPY . /code/
11行目、これでホストPC ( Mac ) のプロジェクトルート ( Dockerfile が配置されている階層 )以下の全てのディレクトリ/ファイルが、後ほど生成されるコンテナへとコピーされます。
EXPOSE 8000
最後は、利用するポートの番号を宣言します。慣例上はライブラリ/フレームワークで使われている標準的な数字にすることが多いようなので、ここではDjango
でデフォルトの8000
番を指定しています。( 別の数字の宣言も試しましたが、サーバー実行時のコマンドライン引数や後ほど作成するdocker-compose.yml
内の記述と整合性を持たせれば動作に問題はなさそうでした。 )
現時点でのディレクトリ構成
django_starter
├── config
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── Dockerfile <- New!
├── manage.py
├── .venv
│ └── (略)
└── requirements.txt
終わりに
これで、Django
の環境を作るためのDockerfile
の記述は一区切りです。
続いて、今回作成したDockerfile
を元にdocker-compose.yml
の記述について考えていきます。
次の記事はこちらから↓
「 3. docker-compose.ymlの記述を考える 」
ご覧いただきありがとうございました。