本記事で解説すること
- ソースコードの入手
- Djangoプロジェクトの作成
docker-compose build
を使用したコンテナ作成docker-compose up
による起動docker-comopse exec ... bash
によるコンテナ内部へのログイン- Djangoプロジェクトの起動確認
- Djangoプロジェクトのアカウント作成
- mysqlコンテナの確認
第一章:ソースコードの入手と解説
git clone https://github.com/kawadasatoshi/PythonImages.git
docker-compose.yml
の解説
version: '3' services: app: container_name: django build: ./django volumes: - ./django/code/:/code ports: - 80:80 command: python mysite/manage.py runserver 0.0.0.0:80 depends_on: - db db: container_name: mysql build: ./mysql restart: always volumes: - ./mysql/data:/var/lib/mysql ports: - 3306:3306 environment: TZ: 'Asia/Tokyo' MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: 'django' MYSQL_USER: 'django' MYSQL_PASSWORD: 'django' MYSQL_ALLOW_EMPTY_PASSWORD: 'true' privileged: true
app
とdb
について
コンテナ一つ目と二つ目。 それぞれdjangoアプリケーションとmysqlサービスを稼働させます。 ここの名前はdocker-compose関連のサービスでよく扱う。
以下のコマンドではapp
だけ指定してコンテナを起動する
docker-compose up app
注意
個々の名前を指定してdocker
コマンドを指定しても基本動かない。
例えば以下のコマンドでは、app
を指定しているが、docker
コマンドなので動かない。
docker exec app bash
docker-comopse
コマンドに置き換えることで動きます。
docker-compose exec app bash
container_name
:コンテナ名を指定する
コンテナをビルドする際に、名前を付与します。
app
やdb
と違い、docker
コマンドで扱われる。
container_name: django
docker exec -it django bash
build
:ビルドする場所を指定する
それぞれのコンテナのDockerfileの場所を指定する。
以下の例ではdjango
ディレクトリの配下にあるDockerfileを指定します。
build: ./django
volumes
:コンテナとローカルのフォルダーをつなげる
コンテナ内部のファイルシステムがホストにあるフォルダーをマウントする。
以下の例ではdjango/code
とコンテナ内部のルート直下にあるcode
を繋げています。
volumes: - ./django/code/:/code
今後djangoのコマンドを使用してdjangoのアプリケーションを構築する際、この/codeディレクトリの中にpythonファイルが作成されます
あるいは、mysql
のデータが詰まったコンテナをローカルとつなげることで、コンテナ自体を削除しても再度コンテナを立ち上げることでデータがバックアップされている状態を作り出しています。
ports
:コンテナとローカルのポートを繋げる
以下のように、コンテナ内部の80番ポート
をローカルにある80番ポート
と繋げることで、
外部のPCからコンテナ内部への通信が可能になります。
ports: - 80:80
environment
:環境変数を設定
今回はmysqlコンテナの構築で使用。
mysqlのコンテナは環境変数にデータベースの情報を書き込むことで、その情報をもとにデータベースが構築されるという特徴があります。
environment: TZ: 'Asia/Tokyo' MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: 'django' MYSQL_USER: 'django' MYSQL_PASSWORD: 'django' MYSQL_ALLOW_EMPTY_PASSWORD: 'true'
第二章:djangoプロジェクトの構築
2. カレントディレクトリ移動(move to "django_mysql" directory)
cd PythonImages/django_mysql/
3. Djangoプロジェクトファイルを作ろう(move to "django" and create projectfile)
cd django
- djangoイメージファイルをビルド
docker image build -t django .
- djangoを起動してコンテナ内部に入る
# for mac or linux user docker run -it -p 80:80 -v ./code:/code django bash
# for windows user docker run -it -p 80:80 -v ${PWD}/code:/code django bash
- コンテナ内部では以下のコマンドを実行
django-admin startproject mysite python mysite/manage.py startapp myapp python mysite/manage.py migrate
ファイルが作成されればプロジェクトファイルの作成は完了です!
exit
コマンドでコンテナを抜け、docker-compose.yml
があるディレクトリまでcd ..
で戻る。
4. docker-compose
でイメージをbuild
する
docker-compose build
5. docker-compose up
でコンテナ起動
docker-compose up
6. アクセスしてみる
ブラウザから http://localhost/
にアクセスしてみてください。
確認ができたら一度サービスを抜けましょう。
Ctrl+C
からサーバーを止めてexit
コマンドでサーバーから脱出します。
docker-compose down -v
第三章:mysqlとdjangoを結びつける
7. djangoのコードをmysqlに接続するように書き換え
djangoのコードを書き換えます。
書き換える対象は:django_mysql/django/code/mysite/mysite/settings.py
で、既に存在する変数DATABASES
を以下のように書き換えてください。
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'django', 'USER': 'root', 'PASSWORD': 'root', 'HOST': 'db', 'PORT': '3306', } }
8. サービス起動
その後サービスを再度起動し
docker-compose up -d
9. マイグレーションを行い、データベースにdjangoのデータを登録
django側のコンテナに入ります。
docker-compose exec app bash
コンテナに入った後は以下のコマンドでマイグレーションを行い、ユーザーデータの作成などを行います。
python mysite/manage.py migrate python mysite/manage.py createsuperuser
11. バックグランド起動
docker-compose up db -d
2秒後ぐらいに...
docker-compose up app -d