Docker を CentOS 7.6 (1810) にインストールして簡単に WordPress を起動する

最近Dockerを使うようになってきたので、DockerコンテナでサクッとWordPressを立ち上げる方法を試してみました。
今回はDocker-CE(無料のコミュニティエディション)を使用してWordPressをインストールする方法を紹介します。

##ホストOSバージョンとカーネルバージョン
今回したホストOSはCentOS 7.6 (1810)となります。

```
[root@cent76 ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
```

##Dockerに必要なパッケージをインストール
必須パッケージを先にインストールします。

```
[root@cent76 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
Loaded plugins: fastestmirror, langpacks
Determining fastest mirrors
* base: ftp-srv2.kddilabs.jp
* extras: ftp-srv2.kddilabs.jp
* updates: ftp-srv2.kddilabs.jp

(省略)

===============================================================================================================
Package Arch Version Repository Size
===============================================================================================================
Updating:
 lvm2 x86_64 7:2.02.180-10.el7_6.8 updates 1.3 M
Updating for dependencies:
device-mapper x86_64 7:1.02.149-10.el7_6.8 updates 293 k
device-mapper-event x86_64 7:1.02.149-10.el7_6.8 updates 189 k
device-mapper-event-libs x86_64 7:1.02.149-10.el7_6.8 updates 188 k
device-mapper-libs x86_64 7:1.02.149-10.el7_6.8 updates 321 k
lvm2-libs x86_64 7:2.02.180-10.el7_6.8 updates 1.1 M

Transaction Summary
===============================================================================================================
Upgrade 1 Package (+5 Dependent packages)

(省略)

Complete!
```

##安定版Dockerリポジトリを追加
Dockerをインストールするために、Dockerリポジトリを追加します。

```
[root@cent76 ~]# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
Loaded plugins: fastestmirror, langpacks
adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo
```

##Docker-CEインストール
Docker-CEとその他必要なパッケージをインストールします。

```
[root@cent76 ~]# yum install -y docker-ce docker-ce-cli containerd.io
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: ftp-srv2.kddilabs.jp
* extras: ftp-srv2.kddilabs.jp
* updates: mirror.navercorp.com
(省略)
===============================================================================================================
Package Arch Version Repository Size
===============================================================================================================
Installing:
containerd.io x86_64 1.2.6-3.3.el7 docker-ce-stable 26 M
docker-ce x86_64 3:19.03.1-3.el7 docker-ce-stable 24 M
docker-ce-cli x86_64 1:19.03.1-3.el7 docker-ce-stable 39 M
Installing for dependencies:
audit-libs-python x86_64 2.8.4-4.el7 base 76 k
checkpolicy x86_64 2.5-8.el7 base 295 k
container-selinux noarch 2:2.107-1.el7_6 extras 39 k
libcgroup x86_64 0.41-20.el7 base 66 k
libsemanage-python x86_64 2.5-14.el7 base 113 k
policycoreutils-python x86_64 2.5-29.el7_6.1 updates 456 k
python-IPy noarch 0.75-6.el7 base 32 k
setools-libs x86_64 3.3.8-4.el7 base 620 k
Updating for dependencies:
policycoreutils x86_64 2.5-29.el7_6.1 updates 916 k

Transaction Summary
===============================================================================================================
Install 3 Packages (+8 Dependent packages)
Upgrade ( 1 Dependent package)

(省略)

Complete!
```

##Dockerバージョン確認
今回インストールしたバージョンは「19.03.1」となります。

```
[root@cent76 ~]# docker version
Client: Docker Engine - Community
Version: 19.03.1
API version: 1.40
Go version: go1.12.5
Git commit: 74b1e89
Built: Thu Jul 25 21:21:07 2019
OS/Arch: linux/amd64
Experimental: false
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
```

##Docker 起動
systemctl コマンドでDockerを起動します。

```
[root@cent76 ~]# systemctl start docker
```

##WordPress の docker image を取得
WordPress の Docker image を Docker Hub から取得します。

```
[root@cent76 ~]# docker pull wordpress
Using default tag: latest
latest: Pulling from library/wordpress
f5d23c7fed46: Pull complete
4f36b8588ea0: Pull complete
6f4f95ddefa8: Pull complete
187af28c9b1d: Pull complete
3c4135e0a3e9: Pull complete
764143bdfc93: Pull complete
3a141d427998: Pull complete
10a514d45c55: Pull complete
38caab815709: Pull complete
7be2532c1013: Pull complete
4af1c0fea247: Pull complete
88c32579f6b6: Pull complete
4435d7ad1fed: Pull complete
eb012b532a23: Pull complete
b45b6b08a0f1: Pull complete
57a069704459: Pull complete
c7266b68617f: Pull complete
637472e69ed3: Pull complete
748eaacd7f1d: Pull complete
0d7f34f2c87d: Pull complete
Digest: sha256:fdecb6fc92b04d88419544722ac1679158c12eb8f519b83b0480a6375e823dec
Status: Downloaded newer image for wordpress:latest
docker.io/library/wordpress:latest
```

##WordPress に必要な MySQL の docker image を取得
今回はMySQL5.7をWordpress用のDBとし、こちらも Docker Hub から取得します。

```
[root@cent76 ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
0a4690c5d889: Pull complete
98aa2fc6cbeb: Pull complete
0777e6eb0e6f: Pull complete
2464189c041c: Pull complete
b45df9dc827d: Pull complete
b42b00086160: Pull complete
bb93567627c7: Pull complete
419b68a254a1: Pull complete
8c4bc5b87c07: Pull complete
59234e88c262: Pull complete
2406ac6e266f: Pull complete
Digest: sha256:540488d8f0e04c1077d17934d1c1511fe417e2221dff508ce4621f5efe6131db
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
```

##取得済みイメージ一覧表示
取得したイメージを確認します。取得した wordpress と mysql が存在していればOKです。

```
[root@cent76 ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
wordpress latest 02126202b6ea 32 hours ago 502MB
mysql 5.7 f6509bac4980 2 weeks ago 373MB
```

##コンテナを生成して起動
取得したイメージを使用して、WordPressとMySQLのコンテナを生成・起動します。

```
[root@cent76 ~]# docker container run --name wp-mysql -e MYSQL_ROOT_PASSWORD=hoge -d mysql:5.7
a954a2f27251e30ca861583c722d277152e714708dfcfe2576c143f964d33037
[root@cent76 ~]# docker container run --name samplewp -d -p 80:80 --link wp-mysql:mysql wordpress
427c5e2ed465802d8ac709f834cdafb43baaa2d900b4b9f76d6b97354f0c6f04
```

##実行中コンテナ一覧の確認
起動したコンテナ2つが実行状態であることを確認します。

```
[root@cent76 ~]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
427c5e2ed465 wordpress "docker-entrypoint.s…" 12 minutes ago Up 12 minutes 0.0.0.0:80->80/tcp samplewp
a954a2f27251 mysql:5.7 "docker-entrypoint.s…" 16 minutes ago Up 16 minutes 3306/tcp, 33060/tcp wp-mysql
```

※ここで2つのコンテナが起動されていなかったら「docker logs samplewp」「docker logs wp-mysql」コマンドでdockerログを確認します。

##WordPressに接続
ブラウザから「http://<ホストのIP>」でアクセスします。
![wordpress01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489946/9834ce19-ebd4-e5a8-0f42-86823b4f0d71.png)

必要な情報を入力し、「WordPress をインストール」ボタンを押下します。
![wordpress02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489946/b228f1a2-8423-be1a-3a0b-0342f1f16a09.png)

最終的に以下の画面が表示されればWordPressインストール完了です。
![wordpress03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489946/a8962f0d-9abc-8744-8d2b-0a51da2fcfdc.png)

これでWordPressを色々操作できるようになります。
![wordpress04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489946/1ee24dd8-eb27-ae4f-e56d-f6eb37c4b562.png)

##WordPressコンテナ内で作業する
WordPressのコンテナに接続します。ソースの修正等はこれで行います。

```
[root@cent76 ~]# docker container exec -it samplewp /bin/bash
root@427c5e2ed465:/var/www/html# ls -l
total 200
-rw-r--r--. 1 www-data www-data 420 Nov 30 2017 index.php
-rw-r--r--. 1 www-data www-data 19935 Jan 1 2019 license.txt
-rw-r--r--. 1 www-data www-data 7447 Apr 8 22:59 readme.html
-rw-r--r--. 1 www-data www-data 6919 Jan 12 2019 wp-activate.php
drwxr-xr-x. 9 www-data www-data 4096 Jun 18 17:50 wp-admin
-rw-r--r--. 1 www-data www-data 369 Nov 30 2017 wp-blog-header.php
-rw-r--r--. 1 www-data www-data 2283 Jan 21 2019 wp-comments-post.php
-rw-r--r--. 1 www-data www-data 2808 Aug 7 06:55 wp-config-sample.php
-rw-r--r--. 1 www-data www-data 3172 Aug 7 06:55 wp-config.php
drwxr-xr-x. 6 www-data www-data 84 Aug 7 07:17 wp-content
-rw-r--r--. 1 www-data www-data 3847 Jan 9 2019 wp-cron.php
drwxr-xr-x. 20 www-data www-data 8192 Jun 18 17:50 wp-includes
-rw-r--r--. 1 www-data www-data 2502 Jan 16 2019 wp-links-opml.php
-rw-r--r--. 1 www-data www-data 3306 Nov 30 2017 wp-load.php
-rw-r--r--. 1 www-data www-data 39551 Jun 10 13:34 wp-login.php
-rw-r--r--. 1 www-data www-data 8403 Nov 30 2017 wp-mail.php
-rw-r--r--. 1 www-data www-data 18962 Mar 28 19:04 wp-settings.php
-rw-r--r--. 1 www-data www-data 31085 Jan 16 2019 wp-signup.php
-rw-r--r--. 1 www-data www-data 4764 Nov 30 2017 wp-trackback.php
-rw-r--r--. 1 www-data www-data 3068 Aug 17 2018 xmlrpc.php
```

##WordPress用のMySQLに接続してみる
あまり中身を気にする必要はないかもしれませんが、もちろんコンテナ内のMySQLにも接続できます。

```
[root@cent76 ~]# docker container exec -it wp-mysql /bin/bash
root@a954a2f27251:/# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 21
Server version: 5.7.27 MySQL Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select @@version;
+-----------+
| @@version |
+-----------+
| 5.7.27 |
+-----------+
1 row in set (0.00 sec)
```

##Dockerコンテナの停止
コンテナ停止前に起動状態を確認します。

```
[root@cent76 ~]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
427c5e2ed465 wordpress "docker-entrypoint.s…" About an hour ago Up About an hour 0.0.0.0:80->80/tcp samplewp
a954a2f27251 mysql:5.7 "docker-entrypoint.s…" About an hour ago Up About an hour 3306/tcp, 33060/tcp wp-mysql
```

コンテナが起動しているので停止します。

```
[root@cent76 ~]# docker container stop samplewp
samplewp
[root@cent76 ~]# docker container stop wp-mysql
wp-mysql
[root@cent76 ~]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
```

実行中コンテナがなくなりました。

##Dockerコンテナの起動
コンテナを起動します。

```
[root@cent76 ~]# docker container start wp-mysql
wp-mysql
[root@cent76 ~]# docker container start samplewp
samplewp
[root@cent76 ~]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
427c5e2ed465 wordpress "docker-entrypoint.s…" About an hour ago Up 11 seconds 0.0.0.0:80->80/tcp samplewp
a954a2f27251 mysql:5.7 "docker-entrypoint.s…" 2 hours ago Up 20 seconds 3306/tcp, 33060/tcp wp-mysql
```

コンテナが起動しました。

##さいごに
Docker を利用すれば、使い捨てのWordPressがサクッとできるので、私はソース変更やプラグインの検証等に使用しています。

※今回の記事は、自身のサイトから転載しています。
https://dekiruengineer.com/engineer/wordpress-for-docker/