CentOS8でDocker Composeを利用してWordPress

<a href="https://ebios10.up.seesaa.net/image/800px-Centos-logo-light.svg.png" target="_blank"><img border="0" alt="800px-Centos-logo-light.svg.png" src="https://ebios10.up.seesaa.net/image/800px-Centos-logo-light.svg-thumbnail2.png" width="640" height="216"></a>

#クィックスタート: Compose と WordPress
<a href="https://docs.docker.jp/compose/wordpress.html#wordpress" target="_blank">クィックスタート: Compose と WordPress</a>
Docker Compose を使った WordPress の設定と実行をする。

#環境
CentOS Linux release 8.2.2004 (Core)
Docker version 19.03.13, build 4484c46d9d

#Docker Compose のインストール
<a href="https://docs.docker.jp/compose/install.html" target="_blank">Docker Compose のインストール</a>
<a href="https://github.com/docker/compose/releases" target="_blank">Linux においては GitHub 上の Compose リポジトリのリリースページ から Docker Compose のバイナリをダウンロードします。</a>
```# curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose```
<blockquote>  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   651  100   651    0     0  10850      0 --:--:-- --:--:-- --:--:-- 10850
100 11.6M  100 11.6M    0     0  4932k      0  0:00:02  0:00:02 --:--:-- 8008k</blockquote>
```# chmod +x /usr/local/bin/docker-compose```

今日（2020-11-06）現在でGitHub 上の Compose リポジトリが1.27.4だったので、1.27.4を指定している。

#プロジェクトの定義
プロジェクトディレクトリを作成し、プロジェクトディレクトリに移動する。
<blockquote>そのディレクトリをたとえば my_wordpress としていた場合、以下のようになります。</blockquote>
```# cd my_wordpress```

#docker-compose.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:
```

mysqlのバージョンで躓くことがあるので、mysqlについてはバージョンは指定した方が良い。

#プロジェクトの構築
プロジェクトディレクトリ上にて docker-compose up -d を実行
```# docker-compose up -d```
<blockquote>Creating network "my_wordpress_default" with the default driver
Creating volume "my_wordpress_db_data" with default driver
Pulling db (mysql:5.7)...
5.7: Pulling from library/mysql
bb79b6b2107f: Pull complete
49e22f6fb9f7: Pull complete
842b1255668c: Pull complete
9f48d1f43000: Pull complete
c693f0615bce: Pull complete
8a621b9dbed2: Pull complete
0807d32aef13: Pull complete
f15d42f48bd9: Pull complete
098ceecc0c8d: Pull complete
b6fead9737bc: Pull complete
351d223d3d76: Pull complete
Digest: sha256:4d2b34e99c14edb99cdd95ddad4d9aa7ea3f2c4405ff0c3509a29dc40bcb10ef
Status: Downloaded newer image for mysql:5.7
Pulling wordpress (wordpress:latest)...
latest: Pulling from library/wordpress
bb79b6b2107f: Already exists
80f7a64e4b25: Pull complete
da391f3e81f0: Pull complete
8199ae3052e1: Pull complete
284fd0f314b2: Pull complete
f38db365cd8a: Pull complete
1416a501db13: Pull complete
ab2461348ce4: Pull complete
085f6c1f7281: Pull complete
d5b4ad1cc063: Pull complete
791ee5a4264d: Pull complete
b3544511e544: Pull complete
abf41ac6b39b: Pull complete
b6439c866cc6: Pull complete
2990e7a8854f: Pull complete
14660d5f95a2: Pull complete
b8b0371e52ce: Pull complete
14b4eaf6e3f6: Pull complete
36bf819b74a1: Pull complete
1dcde27b5fe8: Pull complete
Digest: sha256:0364d2f6476244fc73fd521a092a083f4259edf6f56811cd45bb187de4034fdc
Status: Downloaded newer image for wordpress:latest
Creating my_wordpress_db_1 ... done
Creating my_wordpress_wordpress_1 ... done</blockquote>

#ウェブ・ブラウザ上での WordPress の起動・・・失敗
ウェブ・ブラウザから http://localhost:8000 にアクセス
<a href="https://ebios10.up.seesaa.net/image/2020-11-06_174718.png" target="_blank"><img border="0" alt="2020-11-06_174718.png" src="https://ebios10.up.seesaa.net/image/2020-11-06_174718-thumbnail2.png" width="640" height="187"></a>
「Error establishing a database connection」というWordPressの「データベース接続確立エラー」が出た。

#ウェブ・ブラウザ上での WordPress の起動失敗の原因
ホストOSがCentOS8であることが原因。どうも名前解決ができない模様。
解決方法としては①か②の何れか。
①デバイスごとにファイアウォールの設定をする（お勧めしない）
② IPマスカレードの設定をする（お勧め）

①の場合、nmcliコマンドでwordpressとmysqlをデバイス単位でファイアウォールの設定をしてやる。具体的には
```# nmcli```
<blockquote>enp1s0: 接続済み から プロファイル 1
        "Realtek RTL8111/8168/8411"
        ethernet (r8169), D8:CB:8A:12:98:1F, hw, mtu 1500
        ip4 デフォルト, ip6 デフォルト
        inet4 192.168.0.6/24
        route4 192.168.0.0/24
        route4 0.0.0.0/0
        inet6 240f:37:7aa3:1:4cd8:6a49:f36c:d35/64
        inet6 fe80::3c4d:980f:ab77:80e3/64
        route6 240f:37:7aa3:1::/64
        route6 ::/0
        route6 fe80::/64
        route6 ff00::/8

br-4aef7bc26106: 接続済み から br-4aef7bc26106
        "br-4aef7bc26106"
        bridge, 02:42:65:2F:2F:33, sw, mtu 1500
        inet4 192.168.96.1/20
        route4 192.168.96.0/20
        inet6 fe80::42:65ff:fe2f:2f33/64
        route6 fe80::/64
        route6 ff00::/8

docker0: 接続済み から docker0
        "docker0"
        bridge, 02:42:F2:CB:91:F3, sw, mtu 1500
        inet4 172.17.0.1/16
        route4 172.17.0.0/16
        inet6 fe80::42:f2ff:fecb:91f3/64
        route6 fe80::/64</blockquote>

```# firewall-cmd --permanent --zone=trusted --change-interface=docker0```
success
```# firewall-cmd --permanent --zone=trusted --change-interface=br-4aef7bc26106```
success
```# firewall-cmd --reload```
success
この場合、br-のデバイスが毎回違うIDを生成するので、docker-compose up -d を実行するたびに設定してやる必要があるのでお勧めしない。

② の場合は単純にIPマスカレードの設定を一回するだけだ。お勧め。
```# firewall-cmd --add-masquerade --permanent```
success
```#firewall-cmd --reload```
success

#ウェブ・ブラウザ上での WordPress の起動・・・成功
ウェブ・ブラウザから http://localhost:8000 にアクセス
<a href="https://ebios10.up.seesaa.net/image/2020-11-06_211730.png" target="_blank"><img border="0" alt="2020-11-06_211730.png" src="https://ebios10.up.seesaa.net/image/2020-11-06_211730-thumbnail2.png" width="640" height="492"></a>
無事WordPress の起動に成功した。
失敗した後は一応
```# docker-compose down --volumes```
でシャットダウンとクリーンアップを行ってから
```# docker-compose up -d```
で実行しなおしている。なお、起動後しばらくはDB構築でアクセスできないのでしばらく待つ必要がある。

#ハマり所はCentOS8
通常なら「<a href="https://docs.docker.jp/compose/wordpress.html#id7" target="_blank">クィックスタート: Compose と WordPress</a>」の手順通りやれば簡単にWordPress の起動まで成功するのだが、今回はホストOSがCentOS8という所でハマった形になった。困ったときはホストOSに何を使っているかもキチンと開示しなければならないという例になったように思う。