ものづくりのブログ

うちのネコを題材にしたものづくりができたらいいなと思っていろいろ奮闘してます。

Macを使ってDockerでDjango構築してみる

Djangoでアプリケーションの開発をするため、Dockerで環境構築する方法をまとめました。

dockerのインストール

a1026302.hatenablog.com

作業用ディレクトリ作成

macでターミナルを開いてDesktopに移動します。

cd ~/Desktop 

docker用の作業ディレクトリを作成します。

mkdir dockers
cd dockers
mkdir django
cd django
mkdir src
cd src

ファイル準備

touch Dockerfile
tocuh requirements.txt

ディレクトリ構成

/django/
 
|-- Dockerfile
|-- requirements.txt
+-- src    # ソース用ディレクトリ

Dockerfileの作成

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN /bin/sh -c pip install -r requirements.txt
COPY . /code

requirements.txtの作成

django

dockerイメージの作成

docker build -t django .
[+] Building 534.8s (12/12) FINISHED                                            
 => [internal] load build definition from Dockerfile                       0.0s
 => => transferring dockerfile: 723B                                       0.0s
 => [internal] load .dockerignore                                          0.0s
 => => transferring context: 2B                                            0.0s
 => [internal] load metadata for docker.io/library/python:3.7.5            4.3s
 => [1/7] FROM docker.io/library/python:3.7.5@sha256:88d11783cbbfa06f1c  505.1s
 => => resolve docker.io/library/python:3.7.5@sha256:88d11783cbbfa06f1c12  0.0s
 => => sha256:fbf9f709ca9f5d96dec78cc074963bc44f0497bb737 8.95kB / 8.95kB  0.0s
 => => sha256:ff95660c69375e19e287b2ea87ca9b4be008cd03 10.00MB / 10.00MB  37.4s
 => => sha256:88d11783cbbfa06f1c12ca50c73c340b0bff34bf599 2.14kB / 2.14kB  0.0s
 => => sha256:c3224f1163e8c349b5f7345090c9753b58c779de446 2.22kB / 2.22kB  0.0s
 => => sha256:16ea0e8c887910fe167687a0169991b4c1fc165 50.38MB / 50.38MB  219.9s
 => => sha256:50024b0106d53dcbd29889c65bc040439b2bb8947d 7.81MB / 7.81MB  38.7s
 => => sha256:9c7d0e5c0bc204b3a36e3f8ff320741da0bd022 51.79MB / 51.79MB  267.8s
 => => sha256:29c4fb388fdfef16e8278fba2b06d46e48d15 192.04MB / 192.04MB  495.5s
 => => sha256:8659dae93050c1ac9ec02542a046e4b40109f6ee1 5.79MB / 5.79MB  245.8s
 => => extracting sha256:16ea0e8c887910fe167687a0169991b4c1fc165257aab6b1  2.0s
 => => extracting sha256:50024b0106d53dcbd29889c65bc040439b2bb8947dac16c8  0.3s
 => => extracting sha256:ff95660c69375e19e287b2ea87ca9b4be008cd036e95d541  0.2s
 => => sha256:1da0ab556051b0a33943e34aa7aec09e19e2725 26.56MB / 26.56MB  322.5s
 => => sha256:e92ae9350d4a47e5dcfbae78a0a06db3691fa602e93e7 234B / 234B  271.3s
 => => extracting sha256:9c7d0e5c0bc204b3a36e3f8ff320741da0bd0225e0a67e22  2.3s
 => => sha256:c648cb7fc575dd1e2a3b60c09fbac445bf8f182f5 1.87MB / 1.87MB  282.9s
 => => extracting sha256:29c4fb388fdfef16e8278fba2b06d46e48d152e1b40f4347  7.4s
 => => extracting sha256:8659dae93050c1ac9ec02542a046e4b40109f6ee13d16472  0.3s
 => => extracting sha256:1da0ab556051b0a33943e34aa7aec09e19e27258bc09ceb8  1.1s
 => => extracting sha256:e92ae9350d4a47e5dcfbae78a0a06db3691fa602e93e7e6f  0.0s
 => => extracting sha256:c648cb7fc575dd1e2a3b60c09fbac445bf8f182f5ae069a7  0.2s
 => [internal] load build context                                          0.0s
 => => transferring context: 142.34kB                                      0.0s
 => [2/7] RUN mkdir /code                                                  2.0s
 => [3/7] WORKDIR /code                                                    0.0s
 => [4/7] COPY requirements.txt ./                                         0.0s
 => [5/7] RUN pip install --upgrade pip                                    5.6s
 => [6/7] RUN pip install -r requirements.txt                             16.8s
 => [7/7] ADD . /code                                                      0.0s
 => exporting to image                                                     0.8s
 => => exporting layers                                                    0.8s
 => => writing image sha256:298f8f5fb22661aacc4325e93eead2b2e9ef10763bbf0  0.0s
 => => naming to docker.io/library/django                                  0.0s

「docker images」コマンドでイメージが作成できていることを確認します。
「REPOSITORY」の項目に「django」があれば、正常にイメージが作成されています。

docker images
REPOSITORY               TAG       IMAGE ID       CREATED         SIZE
django                   latest    298f8f5fb226   2 hours ago     965MB
nginx                    latest    992e3b7be046   3 months ago    133MB
jupyter/scipy-notebook   latest    1ee9f9df99a3   3 months ago    2.67GB
hello-world              latest    bf756fb1ae65   12 months ago   13.3kB

dockerでコンテナの起動

djangoをdckerで動かすために、「-p」オプションでポートフォワーディングをします。
また、ホストとコンテナで「src」ディレクトリを共有するために、「-v」オプションでマウントをします。

docker run -itd -p 127.0.0.1:8000:8000 -v /Users/test/Desktop/dockers/django/src:/code --name test01 django

djangoプロジェクト作成

djangoのプロジェクトを作成するので「src」フォルダへ移動し、以下のコマンドを実施します。

cd src
docker exec test01 django-admin startproject djangotest .

djangoアプリの作成

docker exec test01 python3 manage.py startapp sample01

開発用サーバ「Django」を起動

$ docker exec test01 python3 manage.py runserver 0.0.0.0:8000
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
January 21, 2021 - 16:22:50
Django version 3.1.5, using settings 'djangotest.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.

ブラウザを立ち上げて「http://localhost:8000」を入力して以下のページが表示されれば完了です。
f:id:a1026302:20210122013706p:plain