前回までのあらすじ
仮想マシン栽培と加工を生業としてきたコンテナ初心者、人の作ったdocker-composeファイル群を種として使用することによりCakePHP3コンテナを発芽させることに成功。かねてより開発してきたDjangoのコンテナ開発環境の野望を抱く。
Qiita:docker-composeを使用したコンテナでの開発環境セットアップ(CakePHP3)
今回の内容
というわけで今回はDjangoでのコンテナ環境のセットアップを実施しようと思います。
これまでvagrantで作ってきた仮想マシンに必死こいてyumコマンドを打ち込んで苦しみながら環境を整えてきましたが、もしかしたらこれが終わらせてくれるかもしれない。
今回はこちらの記事を書いてくれた方のGitLabからファイル群をいただき、実際にコンテナ開発環境を作っていきたいと思います。
Qiita:DjangoをDocker Composeでupしよう!
前提条件
またまたですが、事前に前回の記事と同一もしくはそれに準ずる環境、すなわちdocker-composeを使用可能な環境の準備をお願いします。
私の書いてきたこの二つの記事は参考になると思います。
Qiita: 1.VirtualBox + Vagrant + DockerによるOSに縛られないコンテナ環境セットアップ
Qiita: 2.docker-composeを使用したコンテナでの開発環境セットアップ(CakePHP3)
今回の使用環境
- macOS Mojave 10.14.5
- VirtualBox 6.0.4
- Vagrant 2.2.4
- CentOS Linux release 7.6.1810 (Core)
- Docker 18.09.6
- docker-compose 1.24.0
実施する内容
- Dockerファイルの配置とビルド
- djangoのファイル設定
- docker-compose up
1.Dockerファイルの配置とビルド
vagrantでvirtualboxの仮想マシンを操作している場合には、仮想マシンのルートディレクトリのすぐ下にvagrantディレクトリがいます。ここにファイルを配置するとvagrantが同期してくれています。
WEB ARCH LABO: Vagrant入門 – Vagrant の共有フォルダ機能 (Synced Folder)
$ cd /vagrant
$ ls
$ Vagrantfile docker-django-master root vagrant
$ cd docker-django-master
コンテナファイル群を仮想マシン内に配置してビルドします。
$ su root
# docker build -t django2.1 -f ./django/Dockerfile.base ./django
ちなみにsu rootして作業しているのはdocker-composeを使う際には通常のユーザーだとエラーを返されてしまうためです。
ERROR: Couldn't connect to Docker daemon at http+docker://localhost - is it running?
If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.
調べてみると権限まわりの問題で、解消方法は存在しているようです。
Amazon Linux に Docker Compose を install する方法
話を戻し、dockerイメージを確認すると、以前CakePHP3を組んだ時のものなどいろんなものが出来上がっていることが確認できます。
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
django2.1 latest 5dce395b8440 41 seconds ago 967MB
docker-cakephp3-template_host latest 58a46e68225e 6 days ago 463MB
docker-cakephp3-template_phpfpm latest d0528836baf4 6 days ago 114MB
docker-cakephp3-template_mysql latest 6a4af0ff5225 6 days ago 373MB
php 7-fpm-alpine 3a7affb05baa 9 days ago 79.3MB
python 3.7 34a518642c76 11 days ago 929MB
mysql 5.7 a1aa4f76fab9 11 days ago 373MB
nginx mainline-alpine bfba26ca350c 2 weeks ago 20.5MB
hello-world latest fce289e99eb9 5 months ago 1.84kB
php 7.0-apache aa67a9c9814f 5 months ago 368MB
次に作成したイメージを使ったコンテナからプロジェクトファイルを作成します。まずcdしてからコマンドを起動します。
# cd django
# docker run --rm \
--mount type=bind,src=$(pwd),dst=/opt/apps \
django2.1 \
django-admin startproject my_docker_project .
すると本当にプロジェクトファイルが作成されています。たまげた......こんなに楽ならしばらく苦労しないぞ......
2.djangoのファイル設定
プロジェクトフォルダが作成されたとはいえど、これらはあくまでひな形なのでコンテナ用に合わせないといけません。そこでまずsetting.pyを編集していきます。
# 〜中略〜
ALLOWED_HOSTS = ['192.168.33.10']
# 〜中略〜
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'postgres', #作成時のデフォルト
'USER': 'postgres', #作成時のデフォルト
'PASSWORD' : 'hogemojahogemoja', #作成時にdocker-compose.ymlで設定
'HOST' : 'postgres', #コンテナのサーバ名
'PORT' : 5432,
}
}
# 〜中略〜
STATIC_URL = '/static/'
STATIC_ROOT = '/opt/static' #ボリュームマウント先のパス
# 〜中略〜
3.docker-compose up
コンテナを起動します。
# docker-compose up --build
やりました。これで開発環境が整ったようです。
任意のURLにアクセスしてみます。
local環境で構築されている方はlocalhostなどでしょうが、私のようにvagrant×virtualBoxでdocker用VMを立てている人はこんな感じのURLになると思います。
http://192.168.33.10

機能を終了させるときはターミナルでCtrl-Cで終了します。
おわりに
今回はふだん家で使うDjangoのセットアップを、仮想マシンのセットアップ以上に簡単に完了しました。これで本格的にアプリケーション開発をコンテナに移行できそうです。あとはk8sレベルにまでたどり着けばそのままアプリをデプロイというのも夢ではなさげです。
それとWebアプリケーションだけでなく機械学習の環境なんかもすぐ整えられたので、また記事にしていきます。ついにプログラミングの伴う機械学習ができる......