Django一覧

Docker で Django 開発環境を構築する

Docker で Django 開発環境を構築したいと思います。

Docker を使うメリットは、いろいろあると思いますが、私の場合は、その立ち上がりスピードにとても魅力を感じています。

開発環境を作るとき、今までであれば、Mac に VirtualBox をインストールして、VM をVagrant で構築していました。VirtualBox がインストールされている状態から構築し始めたとしても、数十分から数時間かかっていたと思います。

それが、Docker を使うと、数分から数十分にと、Vagrant + VirtualBox に比べ、大幅に時間が短縮しました。

どちらも、目的は Django でコードを書くことなのですが、Vagrantfile と Dockerfile で環境構築時間を比較すると、立ち上がりスピードは全然違います。

Docker インストール

まずはじめに、Mac に Docker をインストールします。

Docker Desktop for Mac

https://hub.docker.com/editions/community/docker-ce-desktop-mac

上記より、インストーラーをダウンロードしてインストールします。

Django コンテナの作成

Docker Desktop for Mac のインストールが終わったら、次は Django コンテナを作成します。

requirements.txt

django

pip でインストールする Python パッケージのリストを作成し、requirements.txt という名前で保存します。

Dockerfile

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code

Dockerfile です。

Docker イメージの作成

docker build -t my-django-app .

Dockerfile から Django 環境の Docker イメージを作成します。

docker build で認証エラーが発生

$ docker build -t my-django-app .
Sending build context to Docker daemon 3.072kB
Step 1/7 : FROM python:3
Get https://registry-1.docker.io/v2/library/python/manifests/3: unauthorized: incorrect username or password
$

docker build を実行すると、認証エラーが出ました。Docker Desktop for Mac では Docker Hub への認証してたのですが、docker コマンドは docker コマンドで、認証が必要のようです。

docker login で解決(Username 気をつけて)

$ docker login
Authenticating with existing credentials...
Stored credentials invalid or expired
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username (satoru.nakamatsu@gmail.com):
Password:
Error response from daemon: Get https://registry-1.docker.io/v2/: unauthorized: incorrect username or password
$ docker login
Authenticating with existing credentials...
Stored credentials invalid or expired
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username (satoru.nakamatsu@gmail.com): satorunakamatsu
Password:
Login Succeeded
$

ということで、docker コマンドの認証をしようとしたのですが、少しトラップがあって、Username にデフォルトでメールアドレスが入っているのですが、メールアドレスの方では、認証が通りません。上記の例でいうと、satoru.nakamatsu@gmail.com では認証は通りません。satorunakamatsu の方が正しいです。これは結構ハマりました。

Django の実装

Docker イメージの build が完了したら、Django の実装に入ります。

docker django startproject

docker run --rm -v "$PWD":/code/ my-django-app django-admin.py startproject mysite .

startproject でプロジェクトの雛形を生成します。

docker django startapp

docker run --rm -v "$PWD":/code/ my-django-app django-admin.py startapp app

startapp でアプリケーションの雛形を生成します。

ファイル構成

$ ls
Dockerfile manage.py requirements.txt app mysite
$

最終的には、このようなファイル構成になりました。

runserver の実行

docker run --rm -v "$PWD":/code/ -p 8000:8000 my-django-app python manage.py runserver 0.0.0.0:8000

それでは、Django のデバッグ用サーバーの runserver を実行し、ブラウザで http://127.0.0.1:8000 にアクセスして見たいと思います。

 

まとめ

Docker で Django 開発環境を構築しました。

一度このスピード感を味わってしまうと、病みつきになりますね。ただ、本番で本格的に運用するとなると、Kubernetes という高いハードルが出てきますが、Docker は今後ますます重要な技術になってくると思いますので、今のうちに押さえておきたいと思っています。