Docker初心者がWSL2を用いてローカルPCのDockerでWebアプリを動作させる手順

# はじめに

Docker 初心者向けに、Windows 環境にて WSL2 を用いてローカルPCの Docker で Web アプリを動作させる手順を紹介します。

# WSL2を有効にする

Windows で Docker を利用するために初心者向けで分かりやすいのは Docker for Windows ですが、そちら個人利用は無償ですが、企業としての利用は有償化されるようなので、今回は WSL2 を使います。
WSL2 とは Windows Subsystem for Linux 2 の略称で、Windows上で Linux を仮想的に動かすことができるシステム環境のことです。

管理者として PowerShell を起動して、以下のコマンドを実行するとWSL2 が有効になります。

```
wsl --install
```

上記コマンドが完了するまで数分かかります。完了後にPC再起動が必要です。

コマンド完了して再起動後、下図のようにスタートメニューに「Ubuntu」というものが追加されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403606/856bb27c-26f2-af50-5c1b-869842090b97.png)

なぜ「Ubuntu」というメニューが追加されているかというと、WSL2 では Ubuntu という Linux ディストリビューション が採用されているので、WSL2を有効にすると Ubuntu が利用できるからです。
「Linuxディストリビューション」というのは何かというと、Linuxカーネルとその他ソフトウェア群を1つにまとめ、利用者が容易にインストール・利用できるようにしたもののことです。
(環境によっては Microsoft Store から Ubuntu をインストールする必要があるようです)

スタートメニューの「Ubuntu」を実行すると、ターミナルが立ち上がります。
そこで Ubuntu で使用する UNIX ユーザー名とパスワードの設定を求められるため、任意の文字列を設定します。
Ubuntu ターミナルにて `cat /etc/os-release` を実行すると、下図のようにUbuntuのバージョンが確認できます(PC名は黒塗りしています)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403606/2ff33cac-74c5-497e-9b3b-9c300fc8a946.png)


# Docker Engine と Docker Compose のインストール

以下のページの「Install using the apt repository」の章に書いてあるコマンドを貼り付けて、UbuntuにDocker Engine と Docker Compose をインストールします。
https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository

上記ページに書いてある赤枠部分のコマンドは、基本的にまとめて貼り付けても動作するようですが、私はそれぞれでエラーが出ないのか確認したかったので、1行ずつコマンドを貼り付けて実行しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403606/9d55ddd4-f0e7-acce-6e96-2fa61cc63a5d.png)

インストール後、`sudo docker version` というコマンドを実行することで Docker Engine のバージョンを確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403606/32493dce-a442-483d-b1ef-2944011001d8.png)

# Webアプリを Docker で動作させる

今回はWebアプリの例として、TimeTracker NX というプロジェクト管理ツールを利用します。
TimeTracker NX を Dockerで動作させるための手順は、以下のページの「クイックスタート」に書いてあります。
https://hub.docker.com/r/densocreate/timetracker

上記のクイックスタートには、SQL Server を利用する場合と PostgreSQL を利用する場合の2パターンがあります。
今回は SQL Server を利用する方法でやります。
また、図のように「任意のディレクトリに以下の内容で compose.yml ファイルを作成します」と書いてありますが、それが具体的に何をするのかを説明します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403606/91cc076b-134a-7058-e80e-393d25c633ae.png)

これは、Ubuntu ターミナルで UNIX コマンドを用いて任意のディレクトリを作成し、そのディレクトリの中に compose.yml ファイルを作成すれば良いのですが、Windows に慣れている人は Windows の操作でそれをやりたいと思います。

そこで Windows の操作でやる方法を紹介します。
まず、前提として、Ubuntu ターミナルを立ち上げた直後のカレントディレクトリは、自分の Windows の PC の `\\wsl.localhost\Ubuntu\home\ユーザー名` というパスになります。
PC名を黒塗りしていますが、下図のカレントディレクトリが、上記パスになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403606/1b7082a6-e04a-4dd8-bf0a-269a88de1946.png)

エクスプローラーのナビゲーションウィンドウに、Linux という項目が追加されているので、下図のようにそこから辿ると見つけやすいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403606/6884eb75-9f17-b0c9-c2a6-dda5cd46100c.png)

エクスプローラーを用いて、上記フォルダに任意のフォルダを作ります。
今回は「TTNX」というフォルダを作りました。
そのフォルダの中に、compose.yml を作ります。
compose.yml ファイルの中身は、Windowsのメモ帳などで編集します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403606/06708353-fc9a-0744-944c-88198441bc49.png)

クイックスタートで、your password と書かれている3箇所は、任意の文字列に変更してください。これは SQL Server の sa という管理者向けアカウントのパスワードとして利用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403606/230628aa-a22c-1eff-0ba5-41a565f9e4df.png)

ここまでを Windows の操作で行った後で、最後に Ubuntu ターミナルで下図のように
`cd TTNX` コマンドで compose.yml があるフォルダに移動してから
`sudo docker compose up -d` コマンドを実行すれば、Dockerコンテナが起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403606/4a8d263f-e87d-479b-8ad1-96e418a0a019.png)

成功すると下図のような画面表示になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403606/250805ef-480e-4e94-92ce-739da13e122d.png)

この状態で `http://localhost:8080/` にアクセスすると、下図のように TimeTracker NX というWebアプリの画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403606/52238b2d-46c1-4182-5209-315faf0f6b34.png)

# まとめ

本稿の手順通りに実行すれば、Docker の初心者でも Web アプリをローカルPCの Docker で動作させられると思います。

ちなみに私はITエンジニア向け情報誌「Software Design」の2022年5月号から「ハピネスチームビルディング」を題材に連載記事を書いています。Web上でも以下で公開しています。

https://note.com/kojimadev/m/me68d438e12d4

X(旧Twitter)でも役立つ情報を発信しますのでフォローしてもらえると嬉しいです → [@kojimadev](https://X.com/kojimadev)