CentOS8でDocker Composeを利用してWordPress

800px-Centos-logo-light.svg.png
ごきげんよう。

クィックスタート: Compose と WordPress

クィックスタート: Compose と WordPress
Docker Compose を使った WordPress の設定と実行をする。

環境

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

Docker Compose のインストール

Docker Compose のインストール
Linux においては GitHub 上の Compose リポジトリのリリースページ から Docker Compose のバイナリをダウンロードします。
# curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

今日(2020-11-06)現在でGitHub 上の Compose リポジトリが1.27.4だったので、1.27.4を指定している。
% 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

# chmod +x /usr/local/bin/docker-compose


プロジェクトの定義

プロジェクトディレクトリを作成し、プロジェクトディレクトリに移動する。
そのディレクトリをたとえば my_wordpress としていた場合、以下のようになる。
# 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

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


ウェブ・ブラウザ上での WordPress の起動・・・失敗

ウェブ・ブラウザから http://localhost:8000 にアクセス
2020-11-06_174718.png
「Error establishing a database connection」というWordPressの「データベース接続確立エラー」が出た。

ウェブ・ブラウザ上での WordPress の起動失敗の原因

ホストOSがCentOS8であることが原因。どうも名前解決ができない模様。
解決方法としては①か②の何れか。
①デバイスごとにファイアウォールの設定をする(お勧めしない)
② IPマスカレードの設定をする(お勧め)

①の場合、nmcliコマンドでwordpressとmysqlをデバイス単位でファイアウォールの設定をしてやる。具体的には
# nmcli

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


# 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 にアクセス
2020-11-06_211730.png
無事WordPress の起動に成功した。
失敗した後は一応
# docker-compose down --volumes

でシャットダウンとクリーンアップを行ってから
# docker-compose up -d

で実行しなおしている。なお、起動後しばらくはDB構築でアクセスできないのでしばらく待つ必要がある。

ハマり所はCentOS8

通常なら「クィックスタート: Compose と WordPress」の手順通りやれば簡単にWordPress の起動まで成功するのだが、今回はホストOSがCentOS8という所でハマった形になった。困ったときはホストOSに何を使っているかもキチンと開示しなければならないという例になったように思う。

この記事へのコメント


人気ブログランキングへ