【M1 Mac】Djangoの開発環境をdocker-composeで作成する
当ページのリンクには広告が含まれています。
M1 MacでもDockerでDjango開発環境作れるの?という疑問に答えていきます!
✓目次
この記事の対象者
この記事でやること
- Docker Desktop for Macのインストール
- Dockerfileの作成
- requirements.txtの作成
- docker-compose.ymlの作成
- Djangoプロジェクトの作成
- DB(postgresql)の設定
- 起動
Docker Desktop for Macのインストール
以下の記事にまとめられているインストール方法で問題なく導入できます。
Macbook Pro M1(Apple Silicon) で Dockerを動かす - Qiita
インストールが完了したらバージョンと動作確認。
1 | $ docker --version |
Dockerfileの作成
まずは任意の空のディレクトリを用意して、Dockerfileを用意していきます。
この記事では``django``という名前の空ディレクトリを作ります。
1 | $ mkdir ~/django |
docker-composeを使う場合、docker-compose.ymlがおいてあるディレクトリ名が、コンテナ名やvolume名の接頭字として使用されます。
実際の開発においては、プロジェクトの名前など、意味のあるディレクトリ名にしておいたほうが望ましいです。
例えば、ToDoアプリを作るプロジェクトなら、Todoapppjという名前のフォルダを用意したほうが良いということだね。
また、作成したディレクトリをビルドコンテキストとするので、不要なファイルは含めないようにしましょう。
Dockerfileでは、pythonの実行環境のイメージを作成します。
1 | FROM python:3 |
- Dockerfileの中身を以下にまとめます。
FROM python:3
: イメージ名にpython3の実行環境のイメージを指定ENV PYTHONUNBUFFERED 1
: PYTHONUNBUFFERED`という環境変数に1という値を設定している。環境変数の意味は、pythonの標準出力、標準エラー出力をバッファーにため込まないための設定。1という数字自体に意味はないがこの環境変数に何らかの値を設定するとバッファーを無効化できます。RUN mkdir /code
とWORKDIR /code
: codeディレクトリを作成し、作業ディレクトリをcodeディレクトリに移動しています。COPY requirements.txt /code/
: ビルドコンテキスト上に存在するrequirements.txtをcodeディレクトリ内に置き、RUN pip install -r requirements.txt
でpipインストールを実行しています。pipはpythonのパッケージ管理ツールで、pip installコマンドは、-rで指定した、requirements.txtに記載されているパッケージのインストールを実行します。rewuirements.txtは、この後ビルドコンテキスト内に作成しますが、このファイルにはDjangoとPosgreのドライバのパッケージ名を記載します。COPY . /code/
: ビルドコンテキストの内容をすべて/code内に置いています。
requirement.txtの作成
1 | $ vim requirements.txt |
requirements.txtは、pipインストールコマンドで、インストールするパッケージを定義したもの。
本記事作成時点で最新バージョンの、Djangoパッケージ3.1.2を指定します。
psycopg2は、pythonでPostgreSQLに接続するためにドライバです。こちらについてはバージョンの指定はしません。
1 | Django==3.1.2 |
この時点でフォルダの中には、Dockerfileとrequirements.txtの2つのみが存在しているかな?この2つ以外のファイルがあったら別の場所に移すか削除しようね!
docker-compose,ymlの作成
docker-compose.ymlで最後だから頑張ろう!
1 | $ vim docker-compose.yml |
1 | version: '3' |
各コードの意味を以下にまとめます。
services:
: dbとwebの2つが定義されている。2つのコンテナが起動する想定。dbにはpostgresQLを使用。build
には.
が`定義されているので、先ほど定義したdockerfileからイメージをビルドして使用するcommand:
: コンテナ起動時に実行されるコマンドを意味している。ここでは、python3でmanage.pyを実行し、引数に開発用に軽量なサーバを立ち上げるrunサーバとlistenするIPアドレス、ポート番号を指定している。manage.py
はDjangoをインストールすると自動で生成されるファイル。ただし、ここに記載しているコマンドはコンテナ実行時にコマンドが渡された場合に上書きされる。そのため、引数にコマンドを渡さなかった場合にdocker-composeのコマンドが実行されるvolumes:
: カレントディレクトリを/codeにbindマウントしている。ports:
: 8000番で公開して、コンテナの8000番に転送されるように設定している。転送先のポートは先ほどのrunserverのlistenポートで指定した8000番と合わせる必要がある。depends_on:
: dbが指定されている。これはWebサービスを起動する前にdbサービスが起動するように依存関係を定義している。これによってWebサービスを起動する際は自動的にdbサービスが先に起動するようになる。
これで、コンテナを立ち上げる設定ファイルの準備が完了しました。
Djangoプロジェクトの作成
ここまで作成した、Dockerfile, requirements.txt, docker-compose.ymlの3ファイルのみが配置されているフォルダで、以下のコマンドを実行しましょう。
ここでは、プロジェクト名をexamplepj
としていますが、任意のプロジェクト名でOKです。
1 | $ docker-compose run web django-admin.py startproject examplepj . |
このコマンドは、今いるディレクトリに配置されたdocker-compose.ymlファイルで定義している「web」というコンテナに対して、"django-admin.py startproject examplepj ."というコマンドを実施してね、という命令を出しているんだね。
すると、examplepjフォルダとmanage.pyファイルがカレントディレクトリに自動生成されます。この時点で以下のようなディレクトリ構成になっていると思います。
1 | . |
DBの設定
作成されたexamplepjのsettings.pyファイルに、DBの設定を記述していきます。
1 |
|
PASSWORDは簡単なものにしているけど、ちゃんとした開発のときは注意しようね!
起動
デタッチドモードで各サービスを起動します。
1 | $ docker-compose up -d |
localhost:8000
にブラウザでアクセスすると、以下のようにDjangoの画面が表示されます。
おめでとう!これで開発できるね!
これから本格的にプログラミングを学んでいく方向けに、おすすめのプログラミングスクール・教材を記事にまとめてますので、よろしければ以下の記事も見ていってください。
>> 【厳選4つ】未経験におすすめのプログラミングスクール・教材! - omathin blog
Djangoでアプリ開発する際の初期設定は以下の記事を参照してください。
>> Djangoでアプリ開発する際の初期設定方法を確認する