dockerでwordpressの開発環境を作ってみた！

#目的
dockerで開発環境を作成する。
その１つのパターンとして、wordpressを起動する。

開発環境にいいよと聞くのだが、実際作成したことがないためイメージがわかない。
そのため、簡単なwordpressを使って開発環境として使えるのか試してみる。

#作成する環境
・wordpress
・mysql5.7

#手順
①docker-compose.ymlファイルを作成
　※複数コンテナ起動の指示書
　※マウント
　　・dbデータ→volume作成（永続データ）
　　・wordpressのソース→バインドマウント（ホストにファイル残すため）
②コンテナを起動
③wordpressにアクセスしてみる。
　http://localhost:8000
④wordpressの設定をする。
⑤wordpressで投稿をしてみる。
⑥コンテナを削除再起動して、"⑤"の投稿が残っているか確認
　→変更が残っていないと、テスト環境として使えないため
⑦wordpressのphpファイルを変更＆コンテナ削除再起動
　→変更が残っていないと、テスト環境として使えないため
⑧コンテナの起動停止を自動化する。
　※開発時に、batファイルをクリックで環境立ち上げて、
　　終了時に、batファイルをクリックして環境を落とす。

#各作業抜粋
##①docker-compose.ymlファイルを作成
wordpressとmysqlのコンテナを起動する設定

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

services:
   # mysqlコンテナ
   db:
     image: mysql:5.7              # コンテナイメージ
     volumes:
       - db_data:/var/lib/mysql
     restart: always               # 自動起動の有効化
     environment:                  # 環境変数
       MYSQL_ROOT_PASSWORD: root
       MYSQL_DATABASE: wp_db
       MYSQL_USER: wp_user
       MYSQL_PASSWORD: wp_pass

   # wordpressコンテナ
   wordpress:
     depends_on:
       - db                        #依存関係（dbコンテナ実行後に起動）
     image: wordpress:latest       # コンテナイメージ
     ports:
       - "8000:80"                 # ポートフォワード（ホスト側のポート8000をコンテナのポート80に転送）
     restart: always               # 自動起動の有効化
     environment:                  # 環境変数
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_NAME: wp_db
       WORDPRESS_DB_USER: wp_user
       WORDPRESS_DB_PASSWORD: wp_pass
     volumes:
       - ./html:/var/www/html      # マウント設定（ホスト内のディレクトリ:マウントコンテナのディレクトリ）※ホスト内のディレクトリはdocker-compose.ymlからの相対パス

# databaseのように永続的なストレージが欲しい場合に必要な設定
# https://docs.docker.com/compose/compose-file/#volume-configuration-reference
volumes:
    db_data: {}
```

※エラーになる場合は、sharedriveを有効にしてください。（マウントで使います）
![2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350277/f6122272-12cd-d500-a651-60f584a012e0.jpeg)

▼ファイアウォールエラーになる場合の参考はこちら（カスペですが）
https://qiita.com/spiderx_jp/items/fa8d5ffe298759df9e06

##②コンテナを起動
```
#docker-compose.ymlを配置したディレクトリへ移動
cd  C:\Users\micro\desktop\docker\wordpress
#コンテナを起動
docker-compose up -d
```

![1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350277/3f6896db-cc03-0cae-a531-c737ae7409b6.jpeg)
##③wordpressにアクセスしてみる。
http://localhost:8000
wordpressの設定画面が表示されました！
![3.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350277/f911b441-e8dd-36d0-dd02-54b11acdd047.jpeg)

#④wordpressの設定をする。
初期設定をし、インストール
![3.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350277/c183fe0e-f82a-5767-1606-97ffc13b3fa4.jpeg)
ログインすると、管理画面が表示されました。
![4.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350277/3e51ee15-3395-889f-f0aa-1a139748a634.jpeg)
#⑤wordpressで投稿をしてみる。
サイドメニュー＞投稿
入力し、公開するボタンを押す
![5.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350277/26c5e1d3-a50a-8deb-fc3c-bff5a97c9588.jpeg)
投稿を表示を押す
![6.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350277/9c570e05-e32f-0c48-62ad-7eda7e0afcb0.jpeg)
#⑥コンテナを削除再起動して、"④"の投稿が残っているか確認

```
#コンテナ停止＆削除
docker-compose down
#コンテナ起動
docker-compose up -d
```
![8.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350277/e63f58ff-ed67-1109-09d8-9d83f169b76c.jpeg)

▼停止後
![7.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350277/22962a2b-6cc6-df22-5676-d85fd7da53a5.jpeg)
▼起動後
![9.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350277/99b175a1-0b85-8224-b00a-9b4e61f8f1cf.jpeg)
→コンテナを破棄して、再度起動しても前回変更のＤＢデータは残っている。
　つまり、マウント（volume）が効いている！

#⑦wordpressのphpファイルを変更＆コンテナ削除再起動
コンテナ起動時に、マウントしたhtmlディレクトリが作成されている。
※おそらく、ホストにディレクトリがないときは、コンテナからがつっと
　ディレクトリがコピーされる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350277/77f004a2-cc6c-b075-715d-fecfe9f51e9e.png)
html/index.phpを変更（[index.php add]を追記）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350277/d1283789-5d52-9d4a-88bb-dd330b3e4da8.png)
変更が、フロントに反映される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350277/35e46593-ebc4-7a87-8cb0-8c16f1a97db3.png)
コンテナ破棄＆再度起動。
さぁ、変更が残っているのか？いないのか？どっちなんだい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350277/8b7f2fc1-ca0c-7e76-65dc-b7b43a9c52c4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350277/8512499f-aec8-c8cf-b014-0894f47ffba3.png)
残っていいる！('ω')

###★注意
私はここではまりました。。orz
コンテナはエラーメッセージなく起動できているが、
どう考えてもマウントが効いていない状態。。

設定したはずのfirewallの設定が元に戻っていました。。
わかるまで、時間かかったーーーー(=_=)

とりあえず、マウントが効かないときは以下
・sharedriveのReset Credencialを試す。
・ファイヤーウォール穴空いているか確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/350277/04d248d6-5d21-9ae0-4f92-5f0f5e05cb87.png)


#⑧コンテナの起動停止を自動化する。
batファイルを作成しておくと、起動停止が楽ちん。

```run.bat　※コンテナ起動用ファイル
# 対象コンテナのディレクトリへ移動
cd  C:\Users\micro\desktop\docker\wordpress
# コンテナを起動
docker-compose up -d
```

```stop.bat　※コンテナ停止用ファイル
# 対象コンテナのディレクトリへ移動
cd  C:\Users\micro\desktop\docker\wordpress
# コンテナを停止
docker-compose down
```


#参考
・Dockerのマウントについて
　https://www.public.ne.jp/2019/02/08/docker-5/
・バインドマウント
　https://noumenon-th.net/programming/2019/03/30/docker-v/
・Data Volume Container について [Dockerの永続化]
　https://noumenon-th.net/programming/2019/03/23/datavolume/


#最後に
おし、テスト環境らしきものができたのではないでしょうか('ω')

▼重要なこと
・DBデータは、マウント（volume）
　※volumeはdocker管理領域のため、直接ファイル操作は推奨されない。
・変更するファイルは、マウント（バインドマウント）

あとは、wordpress以外にも練習がてら試しに作ろうと思います！