5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

XTechグループ 2Advent Calendar 2020

Day 3

Dockerで始めるDjango生活(1日目)

Last updated at Posted at 2020-11-27

初めに

DjangoとはPythonベースのフレームワークです。
今回はdockerを用いていきたいと思います。
OSはWindows 10を想定しています。
dockerが使えればOSは特に関係無いかと思います。

目次

  1. 環境を整える
  2. dockerのイメージをプルしてくる
  3. プルしてきたイメージを元にコンテナを作成する
  4. コンテナに入りpythonやdjangoをインストールする
  5. プロジェクトを作成してみる
  6. プロジェクトを作成する
  7. プロジェクトの中身を見る
  8. プロジェクトを動かしてみる
  9. サーバーを起動してみる
  10. 最後に

1. 環境を整える

まずは、入門するために開発環境を整えていこうと思います。

1. dockerのイメージをプルしてくる

まずはcmdを開きます。
今回開発したいフォルダを作成します。今回はCドライブ配下のデスクトップ上のdjangoフォルダで開発を行いたいと思います。

> cd C:\Users\USER-NAME\Desktop
> mkdir django
> cd django

今回の開発ではubuntuの最新版を用いようと思います。

> docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

> docker pull ubuntu:latest

> docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              f643c72bc252        16 hours ago        72.9MB

2. プルしてきたイメージを元にコンテナを作成する

1で作成したイメージを元にコンテナを作成します。

> docker run --name django-ubuntu -p 127.0.0.1:8000:8000 -v %cd%:/root -u 0 -itd f643c72bc252 /bin/sh

オプションの説明をします。

--name <NAME> ・・・ コンテナの名前をNAMEに設定する。
-p <ポート>:<コンテナのポート> ・・・ コンテナのポートをポートに割り当てる。
-v <フォルダ>:<コンテナのフォルダ> ・・・ フォルダにコンテナのフォルダをマウントする。(%cd%はcmdで現在のディレクトリを指す)
-u 0 ・・・ コンテナにrootユーザーとしてログインする。
-itd ・・・ /bin/shを疑似端末に割り当ててバックグラウンドで実行状態にする。
f643c72bc252 ・・・ イメージのID(docker imagesで表示されたIMAGE IDの値)

作成されたコンテナを確認します。

> docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
c9b27b34be02        f643c72bc252        "/bin/sh"           51 seconds ago      Up 48 seconds       0.0.0.0:8000->8000/tcp   django-ubuntu

3. コンテナに入りpythonやdjangoをインストールする

まずはコンテナに入ってみます。

docker exec -it c9b27b34be02 /bin/sh

ここでc9b27b34be02はdockerpsで表示されたCONTAINER IDの値です。
それではpythonがコンテナ内に存在しているかを確認しようと思います。

# python3 -V
/bin/sh: 2: python3: not found
#

ここでなぜ「python」ではなくて「python3」かと言うとubuntuの設定で元から入っているpythonと競合を起こして最悪の場合ubuntu自体を壊してしまうかもしれないからです。(今回のイメージの様に入っていない場合もあります。)
それではインストールしていこうと思います。

# apt-get update // apt-getの最新化
・・・
# apt-get install -y python3 // python3のインストール -yで聞かれる選択肢を全てyesで返してくれます
・・・
# python3 -V
Python 3.8.5
#

これでpythonがインストールされました。
試しに計算してみようと思います。

# python3
Python 3.8.5 (default, Jul 28 2020, 12:59:40)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 1+1
2
>>> 2*2
4
>>> 4-2
2
>>> 2/2
1.0
>>>
#

次にpythonのパッケージを管理するpipをインストールする。

# apt-get install -y python3-pip
・・・
# pip3 -V
pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.8)
#

djangoをインストールする

# pip3 install django

以上でインストールができました。

2. プロジェクトを作成してみる

1. プロジェクトを作成する

開発したいディレクトリに遷移します。
今回だとdjangoフォルダとマウントした/root配下に作成する。

# cd root
# mkdir projects
# cd projects
# mkdir myproject
# cd myproject
# pwd
/root/projects/myproject
# django-admin.py startproject myproject
# ls
myproject

それでは作成されたmyprojectの中身を見てみます。

2. プロジェクトの中身を見る

# tree myproject
myproject
|-- manage.py
`-- myproject
    |-- __init__.py
    |-- asgi.py
    |-- settings.py
    |-- urls.py
    `-- wsgi.py

1 directory, 6 files
#

manage.py

プロジェクトを操作するためのファイルです。
特に触る必要はありません。

myproject

これはプロジェクトのディレクトリです。

init.py

myprojectディレクトリをPythonモジュールとして扱うようにpythonに指示する空ファイルです。

asgi.py

非同期Webサーバーおよびアプリケーションの新しいPython標準であるASGIとしてプロジェクトを実行するためのファイルです。

settings.py

プロジェクトの設定と構成を示し、初期のデフォルト設定が含まれています。

urls.py

ルーティングを行うファイルです。

wsgi.py

プロジェクトをWSGIとして実行するためのファイルです。

3. プロジェクトを動かしてみる

まずはマイグレーションを行います。

# cd myproject
# ls
manage.py  myproject
# python3 manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying sessions.0001_initial... OK
#

マイグレーションを行うと下記の様にいくつかフォルダが作成されます。(__pycache__はキャッシュ)

# tree myproject
myproject
|-- db.sqlite3
|-- manage.py
`-- myproject
    |-- __init__.py
    |-- __pycache__
    |   |-- __init__.cpython-38.pyc
    |   |-- settings.cpython-38.pyc
    |   `-- urls.cpython-38.pyc
    |-- asgi.py
    |-- settings.py
    |-- urls.py
    `-- wsgi.py

2 directories, 10 files
#

db.sqlite3

djangoではデフォルトでDBがsqliteに設定されています。
マイグレーションを行う事でsqliteの設定が行われます。

4.サーバーを起動してみる

いよいよサーバーが起動できるようになったので起動してみます。

# pwd
/root/projects/myproject/myproject
# ls
db.sqlite3  manage.py  myproject
# python3 manage.py runserver
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
November 26, 2020 - 16:25:28
Django version 3.1.3, using settings 'myproject.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

3.最後に

http://127.0.0.1:8000/
に遷移してみて以下の画像の様にdjangoのwelcome画面が表示されれば正しくdjangoを設定することができています!
image.png
お疲れ様でした!
今後も連載していこうと思います。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?