今更Docker（-compose）の便利さを知る（使うにあたって参考にした情報リスト）

# きっかけ
もともと仕事でdocker-composeを使っていたけど、誰かの作った設定を「こういうコマンドで使ってね」という感じだった。

ふと思い立ち、Wordpressを新たに作ろう/grafanaも立てたい/node-redとかも必要かもとなった。

初めはせっかくHyper-V使えるんだから、Hyper-V上の1イメージに作ればいいかとか思ったけど、ネットワーク的におかしい。
（githubのhttpsアクセスが拒否られる……）
もう解決策も分らんくなったのであきらめた。

docker-composeは、使いたいアプリ/システムをダウンロードして使えるんやでってことはなんとなく知ってたので、「じゃぁdocker-composeでやってみるか」となった。

相変わらず深くまでちゃんと分かっているわけではないが、参考にした情報をメモしておく。

# WindowsにDockerのインストール
- ググってDocker-for-Windowsにたどり着いてインストーラーでインストール
    - https://docs.docker.com/docker-for-windows/install/
- 前はHyper-V上に構成してたので、Win10 ProとHomeではインストール手順が違っていたはずだが、今はWSLを使う（パフォーマンスもこっちの方が良いらしい）っぽいのでHomeでも同じかもしれない
    - Hyper-V・・・もう要らんか・・・？
- WSLが入っていないとインストール後にDocker-Desktopの設定の時に「WSLをインストールするまで動かへんで」と言ってくるので、ダイアログに従ってWSLをインストールする

# docker-compose.ymlを作成する
とりあえず、docker-compose.ymlを書けば、ダウンロードしてきてビルドされることは知っていたので書こうとする。
が、何を書いていいのかわからない。

## 参考しにした情報
- docker-composeにWordpressを入れる書き方
    - https://docs.docker.jp/compose/wordpress.html
    - コピペで良い
    - 設定の内容は読むとなんとなくわかる

# docker起動
Power Shell を管理者権限で起動して

```shell-session
> docker-compose up -d
```

これは仕事で使っているので知っている。
# docker落とす
Power Shell を管理者権限で起動して

```shell-session
> docker-compose down
```

ボリューム（設定とかが記憶されているところ。DBにボリュームの指定が無いと、dockerを落とすたびにデータが消される）ごと落とす場合は

```shell-session
> docker-compose down -v
```

そして、Wordpressの言語設定が保存されないことに気づく。

# volumesの設定について
先述のWordpressの指定は以下の通り。

```yml:docker-compose.yml
version: '3'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
volumes:
    db_data:
```

「あーdbのvolumesのdb_dataが、volumesのdb_dataに紐づいて保存されるんだな」と理解。

```yml:docker-compose.yml
version: '3'

services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
    volumes:
      - wordpress_html:/var/www/html

volumes:
  db_data:
  wordpress_html:
```

上記の指定は、ボリュームのパスがwindowsのパスからは分かりづらい指定。
参考にしたサイトでは

```yml
  wordpress:
    volumes:
      - ./wordpress/html:/var/www/html
```

とだけ指定して、wordpressと同レベルのvolumesは使っていない。
これは、指定したパスにボリュームの共有ディレクトリを作るか、Dockerが自動的にどっかにボリュームを作ってくれるのを信用するか違いだと思い込んでる。
（上記をしていたら何回かやっているうちに、DBにアクセスできなくなったのでやめた。。多分ディレクトリ内のファイルが壊れたりなんかしたのだろう・・・）

## 参考しにした情報
- wordpressのvolumesに設定するべきパス
    - https://qiita.com/tomokei5634/items/75d2501cfb968d0cfab5
- volumes指定に関する説明
    - https://qiita.com/gentaro/items/7dec88e663f59b472de6#drvfs%E3%81%AE%E9%9A%8E%E5%B1%A4%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%9F%E5%A0%B4%E5%90%88
- volumesに関するリファレンス
    - https://docs.docker.jp/compose/compose-file.html?highlight=volumes#volumes-volume-driver

# その後、grafanaやらを組み込んだ時に参考にしたもの
- DBを複数使う方法
    - https://www.it-swarm-ja.tech/ja/database/%E8%A4%87%E6%95%B0%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9Fdockercompose/826471742/
- grafanaをdocker-composeに設定する方法
    - https://qiita.com/__Rayleigh__/items/4da75f467cab385d1006
    - GrafanaCloud以外のプラグインを使いたかったので、こっちはトップレベルのvolumesを使わない

# 所感
Hyper-VではWordpressの１環境作るのにhttpsが通らないと何日も詰まっていたのに、docker-composeでは４コンテナを２時間で作れた。
これはdocker-composeに惚れてまう。