VSCode / WSL / DockerでDjangoの環境構築をしてみる【Window10, 11版】

現場でメンバーとしてシステム開発の一部を担っているものの、製品の仕様理解やインフラを含めてシステム全体がどう構築されているのか、把握するのは難しいと思ったことはないでしょうか。

今回は、Visual Studio Codeで「環境構築をしてみる」というテーマで、<b>Dockerを使ってDjangoの環境構築</b>をしていきたいと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2355311/4a9f79e2-d8a0-8b56-1506-5863f12e1e49.png)


まず、VSCodeで開発をする際に、設定（RemoteWSLの拡張機能を入れておく）をしておくと、Windows上での作業でありながらターミナルタブを開けば標準的な開発環境を開いて作業することができます。



<h3>●	WSLの設定　</h3>
コマンドプロンプトやPowerShellではできないbash操作もWSL(Windows Subsystem for Linuxの略で、Windows上でLinuxを利用できるツール)ならできるようになるので、VSCCodeでgit（bash）を使う場合にも開発しやすくなると思います。

   準備として、VSCodeでRemoteWSL拡張機能を使うにあたって行う初期設定（Windows10版）の実行環境セットアップについてみていきましょう。

<a href="http://semi3del.xsrv.jp/dis/setting-RemoteWSL-in-VSCode.pdf"><b>[手順書のダウンロードはこちらから]</b></a>

<br>
<h3>●	Dockerとは？　</h3>

<b>Dockerとは、コンテナ型仮想環境を作成、実行、管理する為のプラットフォーム</b>のことです。

今回のように、Pythonのアプリケーションを実行したい場合に、Pythonがインストールされたコンテナを起動することで、即座にアプリケーションを実行して動作を確認することができます。


　アプリケーション、ライブラリ、設定ファイルなどのアプリケーション実行に必要なものを一式まとめたものを<b>「Dockerイメージ」</b>といい、保存して他のサーバーに持っていくことで、同じ環境（コンテナ）を再現することができます。DockerHub上に共有されている、クラウド上のDockerイメージを使用することもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2355311/0d50463e-4b70-283a-0219-1bd6b3f159b3.png)
　また、Dockerイメージをビルドして実行するための命令は「Dockerfile」というテキストファイルに記載されています。

　ここでは、Docker Desktop for Windows（個人利用で無料）のインストールから進めていきましょう。

<br>
<h3>●	Docker Desktopのインストール　</h3>

公式のWebサイトから、インストーラをダウンロードしてください。
<a href="https://www.docker.com/products/docker-desktop/" target="_blank">https://www.docker.com/products/docker-desktop/</a>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2355311/59fcbb8e-35c2-90da-70e7-8aca330274b2.png)

ダブルクリックしてインストールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2355311/3ece9fe2-4f0e-f0e4-f79e-e1677e84d25a.png)
完了したら、Docker Desktopの設定をします。

<h3>●	Docker Desktopの設定</h3>

設定画面からGeneralを選択し、<b>「Use the WSL2 based engine」</b>が選択されていることを確認します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2355311/fcef5532-2728-5910-854b-4a6e7e96f387.png)

メニューのResourceから[WSL INTEGRATION] を選択後、インストールしたubuntuのディストリビューションを有効にし、「Applay ＆Restart」を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2355311/5dd48878-3b29-5b1f-bfca-45562eb94b58.png)

<h3>●	Docker Desktopインストール後の動作確認</h3>

インストールしたUbuntuを起動し、以下のコマンドを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2355311/10a4e0e8-5828-e852-c449-55248f0d70eb.png)
以下のように表示されれば、インストール成功です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2355311/70fe61e4-a909-ab14-1297-aad4bb3e6a70.png)

コンテナの動作確認もしていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2355311/5f40d5be-d9a2-1893-781c-36f4e765168d.png)
以下のように表示されれば、正常に動作しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2355311/ce5941d1-f34e-0133-ec48-71cd77f32738.png)
　以上で、インストール後の動作確認は完了です。

*Docker Desktop for Windowsを利用しない場合は、以下の記事を参考になさってください。
　<a href="https://zenn.dev/o2z/articles/d1162bbeb5a5a2" target="_blank">参考：WSL2のubuntu20.04にdockerのLINUX版をインストールする</a>


<h3>●	Dockerを使用したDjangoの開発環境構築</h3>
それでは、Dockerを使用して、Djangoの開発環境を作成してみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2355311/1256a06f-6dbb-0e5f-73f8-60fe38bbc893.png)

まずはディレクトリを作成しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2355311/4715919d-df0d-d6a7-24d4-afeb3b10fcae.png)

作成したディレクトリに移動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2355311/d7f27277-36bf-81ec-da05-d54f64b571a0.png)

以下の3つのファイルを作成します。

► <b>Dockerfile（Dockerイメージをビルドして実行するための命令）</b>

► <b>docker-compose.yml（アプリケーション実行に必要なコンテナの構造化されたデータ）</b>
► <b>requirements.txt　 （対象のプロジェクトにinstallする必要があるパッケージリスト）
</b>


Dockerfileの作成をします。
```Dockerfile
FROM python:3
ENV PYTHONUNBUFFERED 1

#　ビルド時に/codeというディレクトリ作成
RUN mkdir /code
WORKDIR /code

#　requirements.txtを/code/にコピー
COPY requirements.txt /code/
#　requirements.txtを基にパッケージリストをインストール
RUN pip install -r requirements.txt
COPY . /code/

```
ここで、Dockerfileの記載方法について

<b>FROMは、イメージを作成する際に、基になるイメージを指定する命令</b>で、
<b>RUNはイメージビルドの際に実行するコマンドを指定する命令</b>、
<b>COPY <src> は、新しいファイルやディレクトリをコピーする</b>ということを押さえておきましょう。

docker-compose.ymlの作成をします。（「db」と「web」の2つのコンテナが起動する想定で、記載）
```docker-compose.yml
version: '3'
services:
  db:
    image: postgres
    ports:
      - "5432:5432"
    volumes:
      - ./db_data:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
  web:
    build: .
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db
```
requirements.txtの作成をします
```requirements.txt
Django==3.2.6
psycopg2
```
psycopg2とはPythonからPostgreSQLへアクセスするためのライブラリ（ドライバ）です。Djangoのバージョンは「python3 -m django --version」で調べてください。

これでコンテナを起動する為の設定ファイルが作成できましたので、Django のプロジェクトを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2355311/914a56c5-3843-f155-ef93-672b15e8d1a9.png)
docker-compose runでymlに定義したWebサービスを指定し、それ以降はwebサービス起動時に実行するコマンドです。

setting.py
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2355311/36ba7e7c-03dc-8bdc-6e88-849794f9898b.png)
どのホストやIPアドレスからアクセスを許可するかを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2355311/b7e40028-cae5-f50b-07e1-c51a790e8e9e.png)

後は、以下のコマンドで、コンテナを起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2355311/a56d5d9e-3b56-5eb0-440c-7549a89004cc.png)
localhost:8000でデフォルトのDjangoの画面が表示されれば完了です。
<hr>
Visual Studio Codeはプログラミングに特化したエディタとして大変便利で人気があります。
このエディタで開発をしてみたいと考えている方は、（今回はDjangoのインストールまでの流れを確認しましたが）環境構築を進める際に、この記事を参考にしていただければ幸いです。


以上となります。