DockerでDjangoを構築し、dlibやCascadeClassifier, detectMultiScale, shape_predictorなどの顔認識ライブラリを使ったアプリケーションを作成できる環境を構築します。
以下の環境を想定しています。
- Ubuntu 22.04
- Dockerとdocker-composeをインストール済
Dockerのファイルを作成
プロジェクト用の空ディレクトリを作成する
以下のファイルを作成します。
- Dockerfile
- req.txt
- docker-compose.yml
Dockerfileの作成
適当なディレクトリを作成して、Dockerの作業用スペースとします。
cd
mkdir hoge
cd hoge
Dockerfile
を作成します。
vim Dockerfile
次の内容を書き込みます。
FROM python:3.9-buster
# 環境変数
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
# 作業ディレクトリ
WORKDIR /code
RUN apt-get -y update
RUN apt-get install -y libboost-all-dev \
cmake \
build-essential \
libx11-dev \
libopenblas-dev liblapack-dev
# req.txt
COPY req.txt ./
# pipアップグレード
RUN pip install --upgrade pip
# パッケージ追加
RUN pip install -r req.txt
RUN apt-get update \
&& apt-get install -y libsm6 libxext6 libxrender-dev \
&& rm -rf /var/lib/apt/lists/*
# ローカルのディレクトリを/codeに追加する
ADD . /code
# ポートを開く
EXPOSE 8000
req.txtの作成
同じディレクトリにreq.txt
を作成します。
vim req.txt
次の内容を書き込みます。
Django>=3.1,<3.2
mysqlclient>=2.0,<2.1
gunicorn>=20.0,<21
psycopg2>=2.8,<2.9
opencv-python-headless==4.5.3.56
numpy==1.19.5
pillow
dlib
numpyやpillowは画像処理で必要になることが多いので、追加しています。
他に必要なライブラリやソフトウェアがあれば追加してください。
docker-compose.ymlの作成
同じディレクトリにdocker-compose.yml
を作成します。
次の内容を書き込みます。
version: '3'
services:
db:
image: postgres:13
environment:
POSTGRES_HOST_AUTH_METHOD: 'trust'
container_name: "postgre"
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
Djangoプロジェクトを作成する
docker-compose runコマンドを実行する
hogehogeを任意のDjangoのプロジェクト名に設定してください。
docker-compose run web django-admin.py startproject hogehoge .
このコマンドを実行することで、docker-compose.yml
のbuildからイメージがビルドされます。
ライブラリの容量が大きいため、かなり時間がかかります。辛抱強く待ちましょう。
docker-compose
が完了したら、プロジェクトのディレクトリを確認します。
hogehogeが作成されているはずです。
ls -l
drwxr-xr-x 2 root root hogehoge
-rw-rw-r-- 1 user user docker-compose.yml
-rw-rw-r-- 1 user user Dockerfile
-rwxr-xr-x 1 root root manage.py
-rw-rw-r-- 1 user user req.txt
ファイル、ディレクトリの所有者変更
しかしながら、作成されたプロジェクトとmanage.pyの所有者がrootになっているため、今後のファイル操作で不便が生じます。所有者をuserに戻しましょう。
sudo chown -R $USER:$USER .
すると、所有者がすべてuserになるはずです。(userの値はユーザー名になります。)
データベース設定
settings.pyを編集する
hogehoge/settings.py
を編集します。
vim hogehoge/settings.py
DATABASES =
の部分を以下に変えます。(docker-compose.yml
)で指定したpostgresに沿った内容になります。)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'postgres',
'USER': 'postgres',
'HOST': 'db',
'PORT': 5432,
}
}
立ち上げてみる
コンテナ起動
初期設定は以上です。次に作成したイメージからコンテナを起動しましょう。
docker-compose up
バックグラウンドで起動したいときは、
docker-compose up -d
docker-compose.yml
に書いた通り、ポート8000で起動します。
ブラウザからhttp://localhost:8000
にアクセスするとWelcomeページが表示されます。
他のデバイスから接続したいとき
ローカルネットワークの他の機器から接続する場合は、settings.py
のALLOWED_HOSTS
を次のように編集してください。
ALLOWED_HOSTS = ['*']
ただし、セキュリティリスクの観点から、本番環境では使用しないでください。
コンテナを確認する
起動したコンテナを確認しましょう。
docker ps
Djangoのコンテナを停止するには、Dockerのプロジェクトディレクトリで、docker-compose down
を実行してください。
Be First to Comment