3
4

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 1 year has passed since last update.

【初心者】Docker+Django+MySQLで環境構築

Posted at

Webアプリケーション開発のPF制作の為
その土台となる環境構築をやりましたので投稿します。

既に何人もの人が記事を投稿しているとは思いますが
忘れないために投稿します。

概要

Dockerのコンテナ技術を用いて、DjangoとMySQLを起動させます。
初心者が入門書と公式ドキュメント、その他ネット記事を読んで完成させました。
抜けている部分や間違っている部分があるかもしれません。
もし間違っている部分がありましたら、コメントいただけますと幸いです。
躓いた所はなるべく書いていきます。

筆者環境とスタート地点
・windows10 Home
・WSL2導入済
・Docker導入済
・VisualStudioCode導入済(主にこちらのターミナル上で操作しています)

上記にも書いた通りDockerの導入部分は省略し
dockerが使えるという状態からのスタートです。

手順

1.空のディレクトリを用意し、その中に3つのファイルを作成。

ディレクトリ(任意の名前)
├─Dockerfile
├─requirements.txt
└─compose.yaml

こんな感じです。とりあえずなのでデスクトップ上に作成しました。
それぞれ中身をVScodeで書いていきます。

・Dockerfile

FROM python:3.10
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code
RUN pip install -r requirements.txt
COPY . /code/

Dockerfileはイメージを作成するものです。
このイメージを元にコンテナが作られます。
ちなみにちゃんと「Dockerfile」と書かないと手順2でエラーくらいます。

・requirements.txt

Django
mysqlclient

DjangoとMySQLをインストールしてね!と上記テキストファイルに書きます。
ちなみにバージョンは指定しなくてもいけます。

・compose.yaml

version: "3"
services:
 web:
   container_name: "任意の名前"
   build: .
   command: python manage.py runserver 0.0.0.0:8000
   working_dir: /code
   ports:
     - 8000:8000
   volumes:
     - .:/code
   depends_on:
     - db
 db:
    container_name: "任意の名前(上記の任意の名前とは被らないように)"
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: 任意のパスワード
      MYSQL_DATABASE: 任意のデータベース名
      MYSQL_USER: 任意のユーザー名
      MYSQL_PASSWORD: 任意のパスワード
    command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci

volumes:
  db-data:

複数のコンテナを作成するときに使うのがこのcomposeファイルです。
任意の部分は、わかりやすい文字にしときましょう。

2.Djangoプロジェクトの作成

djangoのプロジェクトを作成します。
ターミナル内で、実行するディレクトリまで移動した上で

terminal
docker compose run --rm web django-admin startproject (プロジェクト名) .

プロジェクト名は任意の名前で大丈夫です。
入力しエンターを押すと、ディレクトリ内にプロジェクトが作成されます。

ディレクトリ(任意の名前)
├─プロジェクトフォルダ(プロジェクト名)
│     ├─__init__.py
│     ├─asgi.py
│     ├─settings.py
│     ├─urls.py        
│     └─wsgi.py
├─Dockerfile
├─requirements.txt
├─compose.yaml
└─manage.py

プロジェクトフォルダに4つのファイルとその上の階層でmanage.pyが作られました。

3.settings.pyの書き換え
DjangoではDBのデフォルトがsqLiteに設定してあるので、
こちらをMySQLへ変えましょう。
settings.py内のテキストをVScodeで開きます↓

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

この部分をcompose.yamlで設定したNAMEやUSERで追記、書き換えしていきます。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '名前',
        'USER':'名前',
        'PASSWORD':'パスワード',
        'HOST':'db',
        'PORT':'3306'
    }
}

4.ターミナルでcomposeコマンドを実行
最後のコマンドです。

terminal
docker-compose up -d

実行が始まり完了!
そして
http://127.0.0.1:8000/
へアクセスすると

スクリーンショット 2023-01-24 144502.png

無事動いていることが確認できました。

まとめ

・最初は任意の名前を設定する部分すら不明だった
・1つ進んでは1つ止まって、という作業をひたすらしていた(打ち間違いミスですぐ止まります)
・失敗しても大丈夫や!精神で何度か失敗してやり直しを繰り返すうちに成功できます

多分漏れている部分もありますがこんな感じです。
ここからアプリを作ることができるはずです。

参考

書籍「Docker&仮想サーバー完全入門」

読んでいただきありがとうございました。
PF作成編も徐々に投稿していきます。

3
4
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
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?