【Docker】環境構築をしよう!【Django】
はじめに
Dockerの環境構築をやり直すきっかけがあったので、せっかくならと思い、手順をまとめることにしました。
初学者なので間違っている部分、効率の悪い部分などあるかもしれませんが、ご了承ください。
勉強しながら、構築しながらこれを書いているので、おそらくなぞっていけば私と同じように進められるはずです。
前提
あまり関係ないとは思いますが、私のマシンスペックを記載しておきます。
- OS: Windows 11 Home 64bit
- CPU: AMD Ryzen 5 5625U with Radeon Graphics 2.30 GHz
- RAM: 8.00 GB
- HDD/SSD: SSD 256GB
手順自体は以下の書籍(Zenn)の流れに沿います。
Docker IDの作成
Docker Hubにアクセスして、Docker IDを作成しましょう。
私は連携が好みではないので、メールアドレス、ユーザー名、パスワードを入力して登録しましたが、どちらでもいいと思います。
Dockerにログイン
「Choose your Docker Core subscription」と書かれたページに飛びます。個人利用であれば「Continue with Personal」をクリックしましょう。
メールが飛んでくるので、確認します。
「Verify Email Address」ボタンをクリックすればOKです!
設定まわり
右上のアイコンをクリックし、「My Account」をクリックします。
「Default Privacy」からリポジトリの公開範囲が設定できます。使用用途にもよるとは思いますが、不用意に全世界公開することにならないよう、「Private」にしておくと安心かなと思います。
ほか、設定したい項目があればしておきましょう。
Docker Desktopのインストール
トップに戻り、「Download the desktop application」からダウンロードするか、以下からインストールしてください。
以下にアクセスして、リリースノートから好みのバージョンでインストールすることもできます。
私は4.25.1をインストールします。
インストーラを起動し、指示に従って進めてください。
クリックするとパソコンが再起動するので、何か保存する必要のあるものがある場合は保存してから再起動しましょう。
インストールできたらサインインし、こんな感じになればOKです。
ちなみに、Docker Desktopをインストールすると、同時にDockerComposeもインストールされますので、改めてインストールする必要はありません。
環境構築の前に
イメージ……?コンテナ……?何それ、おいしいの?という方は、以下を参照してください。これの回し者というわけではありません。全くの無関係ですが、私はこの記事に助けられたので、きっとあなたの助けにもなると思います。
Dockerのことを深く理解したい方は、上記に沿って勉強を進めていくのが良いでしょう。
この先の流れ
ここからの流れを整理します。
- Dockerfileの作成
- requirements.txtの作成
- docker-compose.ymlの作成
- イメージのビルド
- コンテナの起動
- Djangoプロジェクトの作成
- mysqlを使うように設定
- サーバー起動
- コンテナの終了
- docker-compose.ymlの更新
- 接続確認
となります。dckerfileを理解するための、イメージやコンテナについては、再三言いますが、以下を参照してください。
時間をかけて手順通りに学ぶのがかえって近道だと思いますので、どうしても近道をしなければならない人、もしくはある程度の知識はあるという人、そういう方のみ、以下のリンクを無視してこの記事を読み進めてください。
1.Dockerfile の作成
さあ、まずはdockerfileを作っていきましょう。
FROM python:3.11.1
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install --upgrade pip && pip install -r requirements.txt
COPY . /code/
2.requirements.txt の作成
Django==4.1.7
mysqlclient
先ほど書いたDockerfileにある通り、pip install
するものになります。
3.docker-compose.yml の作成
version: '3'
services:
db:
container_name: django-blog-db
image: mysql:8.0
volumes:
- db-store:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: django_blog_db
MYSQL_USER: user
MYSQL_PASSWORD: password
TZ: 'Asia/Tokyo'
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
healthcheck:
test: mysqladmin ping
interval: 15s
retries: 5
web:
container_name: django-blog-web
build: .
command: tail -f /dev/null
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
db:
condition: service_healthy
tty: true
stdin_open: true
volumes:
db-store:
4.イメージのビルド
docker compose build --no-cache
5.コンテナの起動
docker compose up -d
6.Djangoプロジェクトの作成
以下をターミナルで打ってコンテナ内に入りましょう。
docker exec -it django-blog-web bash
コンテナ内で以下を実行してください。
django-admin startproject django_blog
するとこのようにファイルが複数生成されます。
7.mysqlを使うように設定
django_blog/settings.py
を開いてください。
真ん中あたりにDATABASES
という項目があるので、そこを編集します。
こうなっているのを、
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
こんな感じに。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'django_blog_db',
'USER': 'user',
'PASSWORD': 'password',
'HOST': 'db',
'PORT': '3306'
}
}
8.サーバー起動
ターミナル(コンテナ内)に戻り、以下を打ってみてください。
cd django_blog
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.
April 01, 2024 - 12:39:43
Django version 4.1.7, using settings 'django_blog.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
[01/Apr/2024 12:39:54] "GET / HTTP/1.1" 200 10681
赤文字で怒られても気にしなくてOKです。
http://0.0.0.0:8000/ をブラウザで開いてみましょう。
このような画面が表示されれば成功です!
9.コンテナの終了
では一旦コンテナを終了しましょう。
ターミナル(コンテナの外)で以下を実行してください。
docker compose down
docker rmi $(docker images -q)
docker volume rm django_db-store
これで、作成したコンテナが停止し、コンテナ・イメージ・ボリュームが削除されます。
10.docker-compose.ymlの更新
manage.py
とDocker関連のファイルは同じディレクトリにあったほうが楽なので、docker-compose.yml
とDockerfile
とrequirement.txt
を外側のmanage.py
と同じディレクトリ に移動させてしまいましょう。
それが完了したら、この部分を
web:
container_name: django-blog-web
build: .
command: tail -f /dev/null
・
・
・
こう書き換えてください。
web:
container_name: django-blog-web
build: .
command: python3 manage.py runserver 0.0.0.0:8000
・
・
・
これによって、コンテナを立ち上げると同時にpythonのサーバーが立つようになりました。
11.接続確認
再度コンテナを立ち上げてみましょう。
ターミナルで以下を実行してください。
docker compose build --no-cache
docker compose up -d
http://0.0.0.0:8000/ を開くか、ターミナル(コンテナの外)でopen http://localhost:8000
を打ってみましょう。
先ほどと同じページが表示されれば問題ありません!
おしまい
これにて環境構築は完了です!お疲れ様でした!
おまけ
Djangoの大きめチュートリアルとして、以下を投稿しています。よければご覧ください。
参考
参考にさせていただいたサイトたちです。感謝申し上げます。
- Dockerのチュートリアルとしてお世話になりました
- Djangoのプロジェクト作成
-
docker-compose.yml
のcommandのところの仮置きがしたくて - 初期データベースがsqliteだったのでそれを変更したくて
Discussion