DockerでWP-CLI入りのWordpressコンテナを作る

公式のwordpressコンテナとwp-cliコンテナはディストリビューションが異なるため、主にユーザーIDの違いによって連携させるのに苦労があるようだったので、wordpressコンテナに追加することにした。

### レイアウト
この辺をgitでやり取りする
※package.jsonは/dockerと同じ階層に置いている。

```:ディレクトリ構造
/docker
  -/wordpress       <-- 運用時に必要なものはここへ
    -/wp-content
      - ...
  -/dev             <-- 開発時に使うものをまとめる場所。
    -/wordpress
      -Dockerfile   <--- wp-cliのインストール機能を追加
    -/mysql
      -/docker-entrypoint-initdb.d
        -setup.sql  <--- コンテナの初期化SQL
    -/assets        <---.pugとかwebpack前のアセットなどをここへ
      - ...
  -docker-compose.yml
package.json
```
### docker-compose
```:docker-compose.yml
version: '3.6'

services:
   db-for-wp:
     image: mysql:5.7
     container_name: db-for-wp
     ports:
       - "3306:3306"
     volumes:
      - db-for-wp-data-volume:/var/lib/mysql
      - ./dev/mysql/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
     environment:
       MYSQL_ROOT_PASSWORD: password
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: password
       
   wp:
     build: ./dev/wordpress
     depends_on:
       - db-for-wp
     container_name: wp
     ports:
       - "8080:80"
     volumes:
      - ./wordpress/wp-content:/var/www/html/wp-content
     environment:
       WORDPRESS_DB_HOST: db-for-wp:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: password
       
volumes:
     db-for-wp-data-volume:
```

### 肝心のDockerファイル

```:./dev/wordpress/Dockerfile
FROM wordpress:5

#wp-cliのインストール
RUN curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar \
     && chmod +x wp-cli.phar \
     && mv wp-cli.phar /usr/local/bin/wp \
     && wp --info
```

### WP-CLIコマンド
wp-cliで初期化する。
DockerfileのRUNで実行するのがスマートだけど、
最初にやれば、Git管理下のファイルと後述のsetup.sqlファイルに書き出したもので再現されるので、とりあえず手打ち。
コンテナにはrootで入っていることが多いので、`--allow-root`を忘れずに。

```:wp-cli
# WordPressセットアップ
wp core install --url='http://localhost:8080' --title='新規サイト' --admin_user='admin_user_name' --admin_password='admin_pass' --admin_email='wp@example.com' --allow-root 

# 日本語化
wp language core install ja --activate --allow-root 

# タイムゾーンと日時表記
wp option update timezone_string 'Asia/Tokyo' --allow-root 
wp option update date_format 'Y-m-d' --allow-root 
wp option update time_format 'H:i' --allow-root

# プラグインの削除
wp plugin delete hello.php --allow-root

# プラグインのインストール
wp plugin install wp-multibyte-patch --activate --allow-root 
#wp plugin install jetpack --activate --allow-root
#wp plugin install backwpup --activate --allow-root
#wp plugin install siteguard --activate --allow-root

# 新規テーマのひな型を追加してアクティブ化(new-themeは任意のテーマ識別子)
wp scaffold _s new-theme --theme_name="新規テーマ" --author="制作者名" --allow-root
wp theme activate new-theme --allow-root

# テーマの削除
wp theme delete twentyseventeen --allow-root
wp theme delete twentyeighteen --allow-root
wp theme delete twentynineteen --allow-root
wp theme delete twentytwenty --allow-root
wp theme delete twentytwentyone --allow-root
```

以下は任意
※設定値の変更は テーマのfunctions.phpから
`add_action('after_setup_theme', 'my_theme_after_setup');`でやるほうが、見てわかりやすく合理的。

```:wp-cli
###メディア: 生成しない画像サイズを0にする

# thumbnail: : 標準 150*150 & thumbnail_crop=1 
# wp option set thumbnail_size_w 0 --allow-root

# medium: 標準 640*640
wp option set medium_size_w 0 --allow-root

# medium_large: 標準768*768
wp option set medium_large_size_w 0 --allow-root

# large: 標準1024*1024
# wp option set large_size_w 0 --allow-root

### 生成するメディアのサイズ指定
# wp option set thumbnail_crop 1 --allow-root
wp option set thumbnail_size_w 300 --allow-root
wp option set thumbnail_size_h 300 --allow-root
wp option set large_size_w 1160 --allow-root
wp option set large_size_h 1160 --allow-root
```

## DBコンテナ作成時の初期化SQLについて

確認用に渡す前などに適宜dumpしておくと、はじめて`docker-compose up` したときに内容が反映される。
Gitで管理できるし納品用の初期化SQLとしても使える。

```:mysqlコンテナ内で
mysqldump -u root -p wordpress > /docker-entrypoint-initdb.d/setup.sql
```
すでにコンテナが作成されている場合は、
ボリュームコンテナの削除`docker volume remove ボリュームコンテナ名` 
(上の例だと `docker volume remove db-for-wp-data-volume`)をすることで、
次回 `docker-compose up` 時にsetup.sqlの内容が反映される。