#はじめに
docker-composeを用いてDockerコンテナ上でDjangoを起動させます。Macを使用します。
#docker-composeを使う理由
Docknizeされたアプリケーションでは、データベースやミドルウェアのコンテナを分け、複数のコンテナでアプリケーションを構成することがあります。
それぞれのコンテナでDocker runを実行するのは面倒です。その際、docker-composeを用いると複数のコンテナを一つのコマンドで制御することが可能となります。
docker-composeはコンテナの振る舞いをdocker-compose.ymlに記載し制御します。
機能毎にコンテナを分ける構成はAWSのチュートリアルでも紹介されておりマイクロサービスと呼ばれています。
マイクロサービスを意識した構成の利点としてはアプリケーションの開発やテストが機能ごとの小さな単位で実施できる事です。
また、各コンテナを疎結合として設計すると機能毎に独立した開発ができるため、他チームの作業を意識することなく開発、デプロイ、スケールさせることが可能です。
私の経験したスタートアップの開発でも、マイクロサービスを意識した設計をしたことで、並行した開発や小さな機能単位での検証や、テストができ便利でした。
本記事はDjangoアプリをDocker上に構築しAWS Fargateにデプロイするプロジェクトの一部です。
#Dcokerfileの作成
下準備として、Pipenvを用いて仮想環境にDjangoをインストールしてください。
詳細手順については別に記事を書いているのでリンクを参照してください。
https://qiita.com/keita_gawahara/items/487a635d226fb0705b13
プロジェクトのルートフォルダにDockerfileを作成します。
$ touch Dockerfile
Dockerfileに以下の内容を追記します。
FROM python:3.7-slim
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
WORKDIR /
COPY Pipfile Pipfile.lock /
RUN pip install pipenv && pipenv install --system
COPY . /
docker buildコマンドでDockerfileをビルドします。
$ docker build .
Sending build context to Docker daemon 155.1kB
...
Step 7/7 : COPY . /
---> d239897dhfii9u”
Successfully built d26473003af
$touch docker-compose.yml
docker-compose.ymlに以下の内容を追記します。
version: '3.7'
services:
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
ports:
- 8000:8000
docker-compose up コマンドを用いてコンテナを起動します。
$ docker-compose up
Creating network...
...
web_1 | System check identified no issues (0 silenced).
web_1 | July 13, 2019 - 16:47:03
web_1 | Django version 2.2.3, using settings 'hello_project.settings'
web_1 | Starting development server at http://0.0.0.0:8000/
web_1 | Quit the server with CONTROL-C.
http://127.0.0.1:8000 をブラウザで表示するとDjango welcome pageが表示されました。これでDocker上にDjangoを起動することができました。
CONTROL-Cで終了させたあとdocker-compose downを用いてコンテナを完全に停止させます。
$ docker-compose down