Django Docker IT Python

DockerをつかってDjango環境を構築する

SQL

DockerをつかってPythonのDjango環境を構築する手順を紹介します。

Dockerfile

Visual Stidio CodeでDockerfileを作成します。Dockerfileの内容は以下の通りです。

    
FROM python:3.9

WORKDIR /usr/app

COPY requirements.txt ./
RUN pip install -r requirements.txt

COPY . .

WORKDIR /usr/app/src

# ==============================================================================
# 初回時のみコメントアウト
# WORKDIR /usr/app/src/myapp
# EXPOSE 8000
# CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
    
  

requirement.txt

requirement.txtファイルを作成します。requirement.txtはpipでinstallするモジュールを記載します。今回はDjangoを使用するためrequirement.txtにDjangoを記載します。

    
Django
    
  

資産配置用フォルダ作成

src用のフォルダを作成します。

Dockerイメージのビルド

Docker buildを使ってイメージファイルを作成します。

    
docker build -t my-django-app .
    
  

実行すると以下の通り結果が表示されます。

    
Sending build context to Docker daemon  4.608kB
Step 1/8 : FROM python:3.9
 ---> e32be9a6f71f
Step 2/8 : RUN apt-get update
 ---> Running in 2e04a55c9823
Get:1 http://deb.debian.org/debian buster InRelease [121 kB]
Get:2 http://security.debian.org/debian-security buster/updates InRelease [65.4 kB]
Get:3 http://deb.debian.org/debian buster-updates InRelease [51.9 kB]
Get:4 http://security.debian.org/debian-security buster/updates/main amd64 Packages [266 kB]
Get:5 http://deb.debian.org/debian buster/main amd64 Packages [7907 kB]
Get:6 http://deb.debian.org/debian buster-updates/main amd64 Packages [7848 B]
Fetched 8420 kB in 4s (1980 kB/s)
Reading package lists...
Removing intermediate container 2e04a55c9823
 ---> f390f7d92fae
Step 3/8 : WORKDIR /usr/app
 ---> Running in fd4a2e0b0c1b
Removing intermediate container fd4a2e0b0c1b
 ---> ee9088bf7857
Step 4/8 : COPY requirements.txt ./
 ---> 039576f2a9f5
Step 5/8 : RUN pip install -r requirements.txt
 ---> Running in 3bb75f601e36
Collecting Django
  Downloading Django-3.1.6-py3-none-any.whl (7.8 MB)
Collecting asgiref<4,>=3.2.10
  Downloading asgiref-3.3.1-py3-none-any.whl (19 kB)
Collecting sqlparse>=0.2.2
  Downloading sqlparse-0.4.1-py3-none-any.whl (42 kB)
Collecting pytz
  Downloading pytz-2021.1-py2.py3-none-any.whl (510 kB)
Installing collected packages: sqlparse, pytz, asgiref, Django
Successfully installed Django-3.1.6 asgiref-3.3.1 pytz-2021.1 sqlparse-0.4.1
Removing intermediate container 3bb75f601e36
 ---> 7f86788fcfee
Step 6/8 : COPY . .
 ---> 4711f881890b
Step 7/8 : WORKDIR /usr/app/src
 ---> Running in af420e162136
Removing intermediate container af420e162136
 ---> db55eab8989c
Step 8/8 : WORKDIR /usr/app/src/myapp
 ---> Running in 2693fa12b3b4
Removing intermediate container 2693fa12b3b4
 ---> de82e2f48f3e
Successfully built de82e2f48f3e
Successfully tagged my-django-app:latest
    
  

コンテナ起動

コンテナを起動します。

    
docker run -it --name some-django-app -v /home/aw/work_dir/02_project/src:/usr/app/src -d my-django-app
    
  

起動すると以下のようになります。

    
cec69067e4ec95aac90da51b0a511c32dc6cd48adccd54e5c2e3d24605af5aa9
    
  

コンテナログイン

コンテナにログインします。

    
docker exec -it some-django-app sh
    
  

Djangoプロジェクト作成

Djangoプロジェクトを作成します。

    
django-admin startprojecr myapp
    
  

ALLOWED_HOSTS設定

ALLOWED_HOSTSにIPアドレスを設定します。

設定ファイルを変更します。権限で書き込みができない場合があるため権限を変更します。

    
chmod 766 settings.py
    
  

ALLOWED_HOSTSにIPアドレスを設定します。

    
・・・略・・・
ALLOWED_HOSTS = ["192.168.0.19"]
・・・略・・・
    
  

コンテナ削除

プロジェクトを作成後再度イメージファイルを作成しなおします。

コンテナを削除するためにコンテナの停止を行います。

ステータスを確認します。

    
docker ps
    
  
    
CONTAINER ID   IMAGE           COMMAND                  CREATED             STATUS             PORTS     NAMES
1c66cb16bb03   my-django-app   "python manage.py ru…"   About an hour ago   Up About an hour             some-django-app
    
  

コンテナを停止します。

    
docke stop 1c66cb16bb03
    
  

コンテナを削除します。

    
docke rm 1c66cb16bb03
    
  

Dockerfile修正

Dockerfileを修正します。コメントアウトを外します。起動時にmanager.pyを実行するようにします。(起動時にサーバが自動で起動します)

    
FROM python:3.9

WORKDIR /usr/app

COPY requirements.txt ./
RUN pip install -r requirements.txt

COPY . .

WORKDIR /usr/app/src

# ==============================================================================
# 初回時のみコメントアウト
WORKDIR /usr/app/src/myapp
EXPOSE 8000
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
    
  

Dockerイメージの再ビルド

再ビルド行います。

    
docker build -t my-django-app .
    
  
    
Sending build context to Docker daemon  14.85kB
Step 1/10 : FROM python:3.9
 ---> e32be9a6f71f
Step 2/10 : RUN apt-get update
 ---> Running in f0e9f62048e4
Get:1 http://security.debian.org/debian-security buster/updates InRelease [65.4 kB]
Get:2 http://deb.debian.org/debian buster InRelease [121 kB]
Get:3 http://deb.debian.org/debian buster-updates InRelease [51.9 kB]
Get:4 http://security.debian.org/debian-security buster/updates/main amd64 Packages [266 kB]
Get:5 http://deb.debian.org/debian buster/main amd64 Packages [7907 kB]
Get:6 http://deb.debian.org/debian buster-updates/main amd64 Packages [7848 B]
Fetched 8420 kB in 4s (1994 kB/s)
Reading package lists...
Removing intermediate container f0e9f62048e4
 ---> 8167da2e9661
Step 3/10 : WORKDIR /usr/app
 ---> Running in 1e266e1c5fda
Removing intermediate container 1e266e1c5fda
 ---> bf462d09449b
Step 4/10 : COPY requirements.txt ./
 ---> 02ab2f404e45
Step 5/10 : RUN pip install -r requirements.txt
 ---> Running in 644084cf1dd6
Collecting Django
  Downloading Django-3.1.6-py3-none-any.whl (7.8 MB)
Collecting sqlparse>=0.2.2
  Downloading sqlparse-0.4.1-py3-none-any.whl (42 kB)
Collecting asgiref>4,<=3.2.10
  Downloading asgiref-3.3.1-py3-none-any.whl (19 kB)
Collecting pytz
  Downloading pytz-2021.1-py2.py3-none-any.whl (510 kB)
Installing collected packages: sqlparse, pytz, asgiref, Django
Successfully installed Django-3.1.6 asgiref-3.3.1 pytz-2021.1 sqlparse-0.4.1
Removing intermediate container 644084cf1dd6
 ---> 5ccdc0722956
Step 6/10 : COPY . .
 ---> a367026e615f
Step 7/10 : WORKDIR /usr/app/src
 ---> Running in 1ac1a7ac40d2
Removing intermediate container 1ac1a7ac40d2
 ---> a51ab3a8294b
Step 8/10 : WORKDIR /usr/app/src/myapp
 ---> Running in 5dbc3ca51513
Removing intermediate container 5dbc3ca51513
 ---> 3686add52065
Step 9/10 : EXPOSE 8000
 ---> Running in 1840834b2d60
Removing intermediate container 1840834b2d60
 ---> 86868bdb1226
Step 10/10 : CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
 ---> Running in e5c760f2bcdc
Removing intermediate container e5c760f2bcdc
 ---> 0742f8700c92
Successfully built 0742f8700c92
Successfully tagged my-django-app:latest
    
  

Dockerコンテナ起動

dockerのコンテナを起動します。

    
docker run --network host --name some-django-app -v /home/aw/work_dir/02_project/src:/usr/app/src -d my-django-app
    
  
    
1c66cb16bb031c020d69c65a1d784de82e1bacb37cca259f0cc00dce94f22690
    
  

ブラウザアクセス

ブラウザを起動してURLを入力します。ノートパソコン上で動作しているのでマシンのIPアドレスを指定します。

http://192.168.0.19:8000

django

上記のように画面が表示されれば環境構築は大丈夫です。

コメント

0 件のコメント:

コメントを投稿

コメントをお待ちしています。