[ Docker compose] Django+React 環境構築
はじめに
参考記事を元にDocker composeで動作するDjango+ReactのTodoアプリを作成します。
まずは環境構築から行なっていきます。
環境
・macOS Ventura13.4
Step1 Djnago(バックエンド側)
今回はtodoというフォルダ内にDjango(バックエンド)とReact(フロントエンド)のプロジェクトをまとめて作成するため、カレントディレクトリはtodoからスタートします。
まず始めにバックエンドを担うDjangoから作業を行います。
Step1ではDocker composeでDjangoのコンテナ立ち上げまで行います。
バックエンドプロジェクト作成
ターミナルを開いてtodoディレクトリにいる状態で下記のコマンドを打ちバックエンドプロジェクトを作成します。
$ mkdir backend_Project
Dockerfile作成
'-p'オプションによりディレクトリの階層構造を保持しながらディレクトリを一度に作成します。
Dockerfileに拡張子は必要ありません。
$ mkdir -p backend_Project/docker/python
$ touch backend_Project/docker/python/Dockerfile
backend_Project/docker/python/Dockerfileに下記の内容を記載します。
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /backend
WORKDIR /backend
ADD requirements.txt /backend/
RUN pip install -r requirements.txt
ADD . /backend/
docker-compose.ymlの作成
今回フロントエンドとバックエンドを一つのコンテナにまとめたいのでdocker-compose.ymlはtodo直下に作成します。
$ touch docker-compose.yml
myproject/docker-compose.ymlに下記の内容を記載します。
version: '3'
services:
backend:
build:
context: ./backend_Project
dockerfile: docker/python/Dockerfile
volumes:
- ./backend_Project/backend:/backend
command: python3 /backend/manage.py runserver 0.0.0.0:8000
ports:
- "8000:8000"
tty: true
requirements.txtの作成
ターミナルで下記のコマンドを打ちファイルを作成
$ touch backend_Project/requirements.txt
backend_Project/requirements.txtに下記の内容を記載します。
Django<4
djangorestframework>=3.11.0,<3.12.0
django-cors-headers==3.2.1
プロジェクト作成
カレントディレクトリをbackend_Projectに移動してプロジェクトを作成します。
$ cd backend_Project
$ docker-compose run backend django-admin startproject backend .
ディレクトリ構成
todo
├── backend_Project
│ ├── backend
│ │ ├── backend
│ │ │ ├── __init__.py
│ │ │ ├── asgi.py
│ │ │ ├── settings.py
│ │ │ ├── urls.py
│ │ │ └── wsgi.py
│ │ └── manage.py
│ ├── docker
│ │ └── python
│ │ └── Dockerfile
│ └── requirements.txt
└── docker-compose.yml
Dockerイメージをビルド
docker-compose.ymlファイルが配置されたディレクトに移動します。
今回の場合はtodoです。
下記コマンドを実行してビルドします。
$ docker-compose build --no-cache
コンテナ起動
無事ビルドが完了したらコンテナを起動します。
-dオプションを付けてバックグランドで実行することが多いです。
$ docker-compose up -d
ブラウザでhttp://localhost:8000へアクセスしロケットが確認できたら成功です!!
Step2 React(フロントエンド側)
Djangoの起動が成功したので、Reactの環境構築を行います。
ターミナルを開いてtodoディレクトリにいる状態で下記のコマンドでフロントエンドプロジェクトを作成します。
$ mkdir frontend_Project
Dockerfile作成
$ mkdir -p frontend_Project/docker/node
$ touch frontend_Project/docker/node/Dockerfile
node/Dockerfileファイルに下記の内容を記載します。
FROM node:16-alpine
WORKDIR /usr/src/app
docker-compose.ymlの編集
バックエンド作業中に作成したdocker-compose.ymlファイルを編集します。
version: '3'
services:
backend:
build:
context: ./backend_Project
dockerfile: docker/python/Dockerfile
volumes:
- ./backend_Project/backend:/backend
command: python3 /backend/manage.py runserver 0.0.0.0:8000
ports:
- "8000:8000"
tty: true
#ここから追加
frontend:
build:
context: ./frontend_Project
dockerfile: docker/node/Dockerfile
volumes:
- ./frontend_Project/node/frontend:/usr/src/app/frontend
command: sh -c "cd /usr/src/app/frontend && yarn start"
ports:
- "3000:3000"
プロジェクト作成
カレントディレクトリをfrontend_Projectに移動してプロジェクトを作成します。
frontedという名前のプロジェクトを作成します。
$ cd frontend_Project
$ docker-compose run --rm frontend sh -c "npm install -g create-react-app && create-react-app frontend"
コンテナ起動
先ほど作成したDjangoのコンテナを起動したままなので、停止・再ビルド・起動までを一気に行うコマンドを実行します。
$ docker-compose down && docker-compose build --no-cache && docker-compose up -d
ブラウザにてlocalhost:3000へアクセスしReactが立ち上がっていれば成功です!!
dockerのダッシュボードではこのように表示されます!
参考
・Docker Composeの概要
・Docker Composeよく使うコマンド
Discussion