はじめに
Dockerコンテナ上にDjangoの開発、実行環境を作りたいなぁ、と思ったので構築メモです。 Dockerエンジン自体はGoogleComputeEngine上で動かしています。
今回は、GCPのプロジェクトが作られている前提で説明を進めていきます。
GCEの仮想マシン作成などはWebUIからも作成できるのですが、説明が面倒くさいので今回はCloudShellからGCE仮想マシンを作って行きます。
CloudShellは、GCPのリソースを管理できる仮想マシンで、GCPのプロジェクトを作成していれば無料で使用することが可能です。
CloudShellの詳細は以下公式ドキュメントを参照してください。
Google Cloud Shell ドキュメント
今回、3つの仮想マシンを操作するので、混乱しないようにプロンプトに仮想マシンを示すようにしています。 使用する仮想マシンは以下の通りです。
項目 | 説明 |
---|---|
CloudShell | GCPで標準で提供されている仮想マシン。 |
HostMachine | DockerEngineが稼働する仮想マシン。OSはCentOS7です。 |
Container | 実際にDjangoが動くDockerコンテナ。OSはCentOS7です。 |
全体的な流れ
- GCEでCentOS7を作成、SSHで接続
- docker導入
- Dockerfile作成
- Dockerイメージとコンテナを作って接続
- djangoプロジェクト作成、allowhost設定
- django開発用サーバ起動
- ブラウザからアクセス
GCEでCentOS7を作成、SSHで接続
以下コマンドで、GCEをのインスタンスを作成します。 後半で必要になるので、作成したインスタンスのEXTERNAL_IP(外部IP)を控えておいてください。 その後、インスタンスに対してSSHで接続します。
(CloudShell)$ gcloud compute instances create example-name --tags http-server --zone asia-east1-a --image centos-7
(CloudShell)$ gcloud compute ssh example-name
GCEインスタンス作成時に使用したオプションは以下の通りです。
オプション名 | 記事内の値 | 説明 |
---|---|---|
INSTANCE_NAMES | example-name | GCEインスタンス名です。オプション名は指定する必要がありません。 |
zone | asia-east1-a | GCEインスタンスを作成するゾーンを指定します。指定しないと、対話形式でゾーンを指定することになります。 |
tags | http-server | GCEインスタンスに適用するファイアウォールを指定します。今回はHTTPでの接続を許可するファイアウォールを指定しています。 |
image | centos-7 | GCEインスタンスの元イメージです。デフォルトではdebian-9が指定されています。 |
docker導入
以下コマンドでDcokerをインストールし、有効化します。
(HostMachine)$ sudo yum install -y docker
(HostMachine)$ sudo systemctl start docker
(HostMachine)$ sudo systemctl enable docker
Dockerfile作成
以下の通りDockerfileを作成します。
FROM centos:7
# Python3.6
RUN yum install -y https://centos7.iuscommunity.org/ius-release.rpm
RUN yum install -y python36u python36u-libs python36u-devel python36u-pip
# Django
RUN pip3.6 install django
Dockerイメージとコンテナを作って接続
カレントディレクトリにDockerfileが存在する状態sudo docker
コマンドを実施し、Dockerイメージを作成します。
ここでは、イメージ名がdjango
、タグが1.0
で作成しています。docker run
コマンドで、Dockerイメージからコンテナを作成し、接続します。
(HostMachine)$ sudo docker build -t django:1.0 .
(HostMachine)$ sudo docker run -it -p 80:8000 django:1.0
djangoプロジェクト作成、allowhost設定
接続したコンテナには、既にPython3.6やDjangoがインストールされているので、さっそく以下のコマンドでDjangoのプロジェクトを作成します。
今回の例ではmy_prj
のという名前でプロジェクトを作成します。
作成したプロジェクトの設定ファイルsettings.py
の、ALLOWED_HOSTS = []
をALLOWED_HOSTS = ["(EXTERNAL_IP)"]
に書き換えます。
EXTERNAL_IPはGCEインスタンスを作成したときに控えたIPアドレスを記載してください。
(Container)# django-admin startproject my_prj
(Container)# vi my_prj/my_prj/settings.py
django開発用サーバ起動
Djangoの開発用サーバを起動します。
(Container)# python3.6 my_prj/manage.py runserver 0.0.0.0:8000
ブラウザからアクセス
ブラウザから、EXTERNAL_IP(外部IP)を指定してHTTPで接続します。
まだDjangoプロジェクトを作っただけなので、以下のデフォルト画面が表示されればOKです。
It worked!
Congratulations on your first Django-powered page.
Next, start your first app by running python manage.py startapp [app_label].
You're seeing this message because you have DEBUG = True in your Django settings file and you haven't configured any URLs. Get to work!
おわりに
今回はとりあえずの接続確認が目的なので、ソフトウェアの更新などのセキュリティ対策や、ロケール設定を入れていません。
また、コンテナ内にDjangoのプロジェクトフォルダを作っているので、コンテナを停止するとプロジェクトフォルダが消えてしまいます。
なので、実際に開発環境や実行環境を作成する際には、必要なソフトウェアを入れたり、プロジェクトフォルダ用に外部ストレージをマウントしたりしてください。