docker-composeを利用し、「Django」と「PostgreSQL」を連携した環境を作成する手順をまとめました。
今回の構築手順は、事前に「docker」と「docker-compose」をインストールしていることが前提条件となります。
構築環境は以下となります。
- ConoHaVPS
- CentOS8:CentOS Linux release 8.1.1911 (Core)
- django_web:latest(dockerイメージ最新版)
- python:3(dockerイメージ最新版)
- postgres:latest(dockerイメージ最新版)
- psycopg:(dockerイメージ最新版)
CentOS「docker」のインストールは以下のページを参考にしてください。
「docker-compose」Django+PostgreSQLを連携した構築手順
docker-composeを利用した手順は公式のドキュメントを参考に構築します。
今回の最終構成は以下のようになります。
$ pwd /docker/www/django
構成
. ├── docker-compose.yml ├── composeexample │ ├── __init__.py │ └── __pycache__ │ | ├── __init__.cpython-38.pyc │ | ├── settings.cpython-38.pyc │ | ├── urls.cpython-38.pyc │ | └── wsgi.cpython-38.pyc | ├── settings.py | ├── urls.py | └── wsgi.py ├── manage.py ├── Dockerfile └── requirements.txt
今回の環境では「/docker/www/django」配下に以下のファイルを作成します。
- docker-compose.yml
- Dockerfile
- requirements.txt
「Dockerfile」作成
Dockerfileを作成します。
vi Dockerfile
FROM python:3 ENV PYTHONUNBUFFERED 1 RUN mkdir /code WORKDIR /code COPY requirements.txt /code/ RUN pip install -r requirements.txt --proxy=x.x.x.x:3128 COPY . /code/
6行目で、プロキシサーバを参照しているのは、CentOS8の環境下においてDockerコンテナでpipインストールを実施する際は「プロキシサーバ」で解決する必要があります。
プロキシサーバインストールについては以下のページを参考にしてください。
「requirements.txt」作成
この「requirements.txt」ファイルはDockerfile内の「RUN pip install -r requirements.txt」コマンドで使用されます。
$ vi requirements.txt
以下を記載
Django>=2.0,<3.0 psycopg2>=2.7,<3.0
「docker-compose.yml」作成
「docker-compose.yml」ファイルはWebサーバー(Django)とデータベース(PostgreSQL)のサービスを公開するポートを記述します。
vi docker-compose.yml
以下の通り記載します。
version: '3' services: db: image: postgres ports: - "5432:5432" environment: POSTGRES_PASSWORD: postgres web: build: . command: python manage.py runserver 0.0.0.0:8000 volumes: - .:/code ports: - "8000:8000" depends_on: - db
6-7行目ではPostgreSQLコンテナへのアクセスするポートフォワードを実施します。
今回の構成では「0.0.0.0:5432->5432/tcp」という設計で構築しないとPostgreSQLへのアクセスができませんでした。
Djangoプロジェクトを作成
Django+PostgreSQLの連携した構成を作成するため、以下手順でDjangoプロジェクトを作成します。
- 「/docker/www/django」配下へ移動
- 「docker-compose run」コマンドを実行して、Djangoプロジェクトを作成
$ docker-compose run web django-admin startproject composeexample . ---中略 Successfully built 6e887cdae932 Successfully tagged django_web:latest WARNING: Image for service web was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
最後に「Successfully」となれば完了です。
「docker-compose」実施後該当フォルダには以下のようにファイル、フォルダが作成されます。
drwxr-xr-x 3 root root 4096 Apr 6 18:03 composeexample -rw-r--r-- 1 root root 304 Apr 6 18:52 docker-compose.yml -rw-r--r-- 1 root root 173 Apr 4 15:28 Dockerfile -rwxr-xr-x 1 root root 634 Apr 6 18:02 manage.py -rw-r--r-- 1 root root 36 Apr 4 22:41 requirements.txt
PostgreSQLデータベースに接続
Djangoのデータベース接続をPostgreSQLに設定します。
プロジェクトディレクトリで、「composeexample/settings.py」ファイルを編集します。
vi composeexample/settings.py
#ALLOWED_HOSTS = [] ALLOWED_HOSTS = ["*"] #DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # } #} DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'postgres', 'USER': 'postgres', 'PASSWORD' : 'postgres', 'HOST' : 'db', 'PORT' : 5432, } }
- 2行目:ALLOWED_HOSTS = [“*”]はすべてのアクセス元を許可する設定
- 17行目:※重要 HOSTはdocker-copseで記載されているサービス名「db」となります
上記、「DATABASES」はdbのIPを名前解決で受け付けます。
Localhost、127.0.0.1の設定ではアクセスできませんでした。
「ALLOWED_HOSTS」、「DATABASES」は上記の通り書き換えてください。
Django+PostgreSQL起動
プロジェクトの最上位ディレクトリからdocker-compose upコマンドを実行します。
$ pwd /docker/www/django $
以下コマンドで実行
$ docker-compose up ------中略 web_1 | Starting development server at http://0.0.0.0:8000/ web_1 | Quit the server with CONTROL-C.
上記でDockerが立ち上がっているので、Webブラウザで<ホストIP:8000>へアクセスするとDjangoウェルカムページが表示されます。
また、バックグラウンドでDjangoを起動する場合は以下のコマンドを実行します。
$ docker-compose up -d
起動後は以下のコンテナが立ち上がります。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2629831994d6 django_web "python manage.py ru…" 54 minutes ago Up 15 seconds 0.0.0.0:8000->8000/tcp django_web_1 18b8b254bb8f postgres "docker-entrypoint.s…" 57 minutes ago Up 16 seconds 0.0.0.0:5432->5432/tcp django_db_1
Docker上でDjango+PostgreSQLを連携した構築手順は以上となります。
※アクセスエラーが発生する場合は以下のページを参考にしてください。
PostgreSQLへのアクセスエラー解決方法です。
Dockerを構築するならVPSがおすすめです。
エンジニアのオンライン学習
ITエンジニアにおすすめの教材、オンラインスクールです。
無料からエンジニアの学習ができる教材などまとめているので参考にしてください。
おすすめオンライン教材 | |
自宅で学習ができるオンラインスクール | |
ITエンジニアの開発・検証・学習としてインターネット上で専用のサーバ(VPS)を利用しましょう!
実務経験はVPSで学べます。
コメントを残す