#クィックスタート: 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
% 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```
今日(2020-11-06)現在でGitHub 上の Compose リポジトリが1.27.4だったので、1.27.4を指定している。
#プロジェクトの定義
プロジェクトディレクトリを作成し、プロジェクトディレクトリに移動する。
そのディレクトリをたとえば 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 にアクセス
「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::/8br-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::/8docker0: 接続済み から 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 にアクセス
無事WordPress の起動に成功した。
失敗した後は一応
# docker-compose down --volumes
でシャットダウンとクリーンアップを行ってから
# docker-compose up -d
で実行しなおしている。なお、起動後しばらくはDB構築でアクセスできないのでしばらく待つ必要がある。
#ハマり所はCentOS8
通常なら「クィックスタート: Compose と WordPress」の手順通りやれば簡単にWordPress の起動まで成功するのだが、今回はホストOSがCentOS8という所でハマった形になった。困ったときはホストOSに何を使っているかもキチンと開示しなければならないという例になったように思う。