Docker上で開発環境を構築することで、
複数のマシンから環境を意識することなく
アプリケーション開発 + 移植が行えます。
今回は
Dockerコンテナ上で
Python + Django の開発環境を構築しました。
その環境でPythonサーバーを起動し、
ホストPCのブラウザからアクセスする方法を説明します。
今回作成したDocke Image
https://hub.docker.com/r/rimacdocker/django
実施したこと
以下の手順でDocker上でDjango開発用Webサーバーを起動しました。
ホスト側の環境
MacOS 10.13.1
Docker 18.09.2
1. コンテナ上でDjango開発環境の構築
まず、Dockerコンテナ上でDjango開発環境を構築します。
詳細な手順は以下の通り。
1-1. OSイメージの取得、コンテナの起動
1-2. コンテナ上で必要なパッケージ、ライブラリのインストール
1-1. OSイメージの取得、コンテナの起動
今回はUbuntuの最新イメージを取得して、コンテナを起動します。
ホスト側8000番ポート:コンテナ側8000番ポート
をポートフォワーディングして起動します。
# Ubuntuイメージの取得、コンテナの起動
docker run -p 8000:8000 -it ubuntu
注意点: ポートフォワーディング
コンテナで起動したサーバーに、ホスト側からアクセスできるように
ホスト側の特定のポート番号と、コンテナ側の特定のポート番号を結んでおく必要があります。
1-2. 必要なパッケージ、ライブラリのインストール
Ubuntuイメージを基に、起動したコンテナ上で必要なパッケージ等をインストールします。
Djnagoでの開発に必要なパッケージ、ライブラリは以下の通り。
インストールしたパッケージ
-
Ubunutuパッケージ
- vim
- python3
- python3-pip
-
Pyhtonライブラリ
-
django
コンテナ上で実行したコマンド
# パッケージマネージャの最新化
apt update
apt upgrade
# Python, Pipのインストール
apt install python3
apt install python3-pip --fix-missing
# Vimのインストール
apt install vim
# Djangoのインストール
pip3 install django
2. Djangoでアプリケーション作成 + サーバー起動
手順1でDjangoが使えるようになったので、
Djangoアプリケーションを作成して、開発用Webサーバーを起動します。
詳細な手順は以下の通り。
2-1. Dajngoアプリケーションの作成
2-2. 開発用Webサーバーの起動
2-1. Dajngoアプリケーションの作成
Djangoコマンドでアプリケーション作成します。
# 任意の作業用フォルダを作成 + 移動
mkdir django
cd django
# アプリケーションの作成
django-admin.py startproject dj_sample
2-2. 開発用Webサーバーの起動
同じくDjangoコマンドで
データベースマイグレーション + Webサーバーの起動を行います。
# 作成されるアプリケーションフォルダに移動
cd dj_sample/
# データベースマイグレーションの実行
python3 manage.py migrate
# 開発用Webサーバーの起動
python3 manage.py runserver 0:8000
コマンドを実行するとサーバーが起動するので
ブラウザでhttp://127.0.0.1:8000にアクセスすると
Djangoのサンプルページが表示されます。
補足: データベースマイグレーション
Djangoで使うデータベースの定義を自動的に作成、管理する機能です。
この機能により、
直接SQL文を書かずに、データベースに変更を加えることが出来ます。
python3 manage.py migrate
上記のコマンドで、
Django内のデータベースの定義に従って、データベースに対するSQL文を発行します。
補足: runserver 0:8000
通常、Djangoでローカルマシン上に起動したサーバーを
外から見えるようにするには
IPアドレスを任意のポートに紐付ける必要があります。
今回はコンテナで立てたサーバーに
ローカルマシンからアクセス出来るように
全てのIP(0.0.0.0)を8000番ポートに紐付けています。
ここで紐付けるポートは
1-1. のポートフォワーディング設定で指定した
コンテナ側のポート番号と合わせる必要があります。
実行結果
コンテナ上でDjangoを起動して
root@86XXXXXXXXXX:~/django/dj_sample# python3 manage.py runserver 0:8000
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
June 03, 2019 - 19:10:40
Django version 2.2.1, using settings 'dj_sample.settings'
Starting development server at http://0:8000/
Quit the server with CONTROL-C.
ブラウザでhttp://127.0.0.1:8000 にアクセスすると、サンプルページが表示される

まとめ
docker上でアプリケーション開発環境を構築することで、
OSやミドルウェアの異なる複数のPCから
同じ環境で開発を行うことが出来ます。
また、本番移行時にもDockerさえ入れれば
開発環境と同じ環境での
アプリケーション稼働を担保出来ます。
もしかすると
アプリケーション開発が捗るかもしれません。