Dockerのチュートリアルをやってみる

# 目的
Dockerについて体系的なこと学ぶ機会がなかったため、
基本の確認と復習を兼ねてチュートリアルを実施しました。

# 実施内容
## Docker環境構築
### WSL2
参考：https://www.kagoya.jp/howto/cloud/container/wsl2_docker/

「コントロールパネル」→「プログラム」→「Windowsの機能の有効化または無効化」を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691111/ed5c6ded-0c5f-b399-1d6f-28b945c7d288.png)

下記二つの機能を有効にしてOKをクリックする。その後、再起動する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691111/c39a125b-f532-3ba9-34a8-d6d8f404cafe.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691111/80e1adc3-9ef8-8774-26b5-5ab368f87463.png)

下記サイトの「x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージ」をダウンロードして実行する。
https://learn.microsoft.com/ja-jp/windows/wsl/install-manual#step-4---download-the-linux-kernel-update-package
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691111/a12c07e4-952b-16ce-1e5a-41c4a68160aa.png)

下記コマンドを実行してWSL２を
`$ wsl --set-default-version 2`

### Ubuntu
※注意：このあたりの操作はうろ覚えです。怪しい場合はご自分で調査してみてください。

下記サイトからUbuntu 22.04.1 LTSをインストールする。usernameとpassを忘れないように注意。
https://apps.microsoft.com/store/detail/ubuntu-22042-lts/9PN20MSR04DW?hl=ja-jp&gl=jp&rtc=1

### おまけ：Windows Terminal
WindowsターミナルをUbuntuやPowershellを簡単に使いこなせるようにしておきます。
(Windows11では標準搭載されていた気がします。)


### Dockerインストール
Docker Desktop Installer.exeをダウウンロードして実行する。
https://docs.docker.com/desktop/install/windows-install/

Docker hubのアカウントを所有していればログインすることもできます。


下記コマンドを管理者で実行することで、Dockerがインストールされていることを確認できる。
`$ docker -v`

## チュートリアル実施
公式のチュートリアルに沿ってやってみる。
コンテナ、ボリューム、DockerHub、バインドマウント、複数コンテナの場合、Docker Composeなどが学習できる。
https://docs.docker.jp/get-started/toc.html

### わかりにくい点
#### Part2
おそらく、`$  cd app`を実施して、カレントディレクトリを「C:\..省略..\Docker_guide\getting-started\app」にする。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691111/e0f7c087-3917-955d-8da1-abd3d2ca5427.png)

既存のDockerfileのファイル名を変更してから、app\Dockerfileを作成する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691111/83daf357-c92f-a4c2-918a-229491a900b6.png)

`$ docker build -t getting-started .'を実行すると下記エラーが発生する。
Docker Desktopを起動してから上記コマンドを実行すると成功しました。
```
ERROR: error during connect: this error may indicate that the docker daemon is not running: Get "http://%2F%2F.%2Fpipe%2Fdocker_engine/_ping": open //./pipe/docker_engine: The system cannot find the file specified.
```

#### Part4
Play with Dockerで実行するとエラーになる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691111/baa7625a-2990-1041-1f06-f208d1c4ecbd.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691111/1bad6f80-ba0e-8912-f718-de43992b2ce3.png)
`$ du -sh /var/lib/docker`で確認するとリソースが224Kバイトしかないことが原因っぽい。
仮想環境都合なので未解決。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691111/6b1b7fb7-134a-a7f8-fc67-2edd3641d645.png)

ちなみにWindows環ではエクスプローラーから「\\wsl.localhost\docker-desktop-data\data\docker\containers」などからコンテナの情報が確認できるが、ファイル等が直接入っているわけではない。

#### Part6
変更箇所が画面からわかりにくい。
「You have no todo items yet! 」とかを変更した方がわかりやすい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691111/6af73812-198e-e836-c07c-9acb84f4f9ce.png)

#### Part7

「MySQL とアプリを動かす」へ入る前に、`$ exit`コマンドでコンテナから出る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691111/933b0ae7-afc7-187c-6453-9d5cd2584771.png)


`Connected to mysql db at host mysql
Listening on port 3000`は表示されていなくてもOK。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691111/7bf2f532-d43e-124e-9d21-a7548d1ece6e.png)

```
PS C:\Users\kimur\Documents\Docker_guide\getting-started\app> docker logs ae83f5c9a08540dea279b0ce025524b8090195a54a1cff3c8b916815a4b95d43
yarn install v1.22.19
[1/4] Resolving packages...
success Already up-to-date.
Done in 0.74s.
yarn run v1.22.19
$ nodemon src/index.js
[nodemon] 2.0.20
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node src/index.js`
PS C:\Users\kimur\Documents\Docker_guide\getting-started\app> docker ps
```
次の操作でブラウザ上のToDoアプリからデータを入力すると、DBにデータが入っていることを確認できた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691111/aa55d923-6dfe-330d-3369-6eb2a0d8451e.png)

#### Part8

docker-compose.yml内のvolumeのパスについて、コロンを境にVOLUME:CONTAINER_PASSと記載している。
https://docs.docker.jp/compose/compose-file/index.html#volumes-volume-driver
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691111/e529375c-86ea-b015-70a5-9a39e08d24c0.png)

# 所感
バインドやデプロイ、docker-compose.ymlについて、もう少し深く知ることでLaraveやDjangoを用いた環境が構築できるようになりたい。
Windowsエクスプローラーからコンテナ内のapp.jsを閲覧するすべはないのか。。？