DockerでWordPress環境を構築する方法

#はじめに

前回、DockerでApache、nginx、MySQLのコンテナ構築方法を紹介させていただいた。
『[DockerでApache、nginx、MySQLを構築するシンプルな方法](https://qiita.com/kazuh1Lo/items/f26c3c8ab7cafe031423)	』
※Docker完全初心者の方は↑を参考程度に確認すると良い。

今回はDockerでWordPressを構築する方法を記述したい。

# 動作環境

動作環境は自宅WindowsパソコンにDockerをインストールしている。
・自宅PC
・OS:Windows10


## システム構成-コンテナは2つ

まず以下の2つに分けてコンテナを作成し、それぞれミドルウェアをインストールしていく。
①WordPress用コンテナ
・WordPress
・Apache
・PHP実行環境

②MySQL用コンテナ
・MySQL


# WordPress構築手順

## 1.ネットワーク作成

Dockerでは普通にコンテナを作ると、コンテナ同士は通信できない。
「ネットワーク」というリソースを作成し、同じネットワークに所属させる必要がある。

■ネットワーク作成コマンド

```
docker network create wordpress-network
```
コマンドはdoceker network create ネットワーク名で作成できる。
「wordpress-network」に2つのコンテナを所属させていく。


■ネットワーク詳細確認

```
docker network inspect wordpress-network
```
docker network inspect <ネットワーク名>

<出力結果例>

```
> docker network inspect wordpress-network
[
    {
        "Name": "wordpress-network",
        "Id": "286023ed2d2522ba69987ef342458633463783e6ca2f18fa1c350935855ef40a",
        "Created": "2021-07-25T02:39:04.7728767Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.19.0.0/16",
                    "Gateway": "172.19.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]
```

こんな感じ。
Docker内のネットワーク一覧を観たいなら

```
> docker network ls
NETWORK ID     NAME                DRIVER    SCOPE
ae6193baa836   bridge              bridge    local
2935816942a2   host                host      local
d7965802ece4   none                null      local
286023ed2d25   wordpress-network   bridge    local
```

ネットワークを削除したいなら

```
docker network rm <ネットワーク名>
```


ネットワークを作成したら次にMySQL用コンテナを作成していく。

## 2.MySQLコンテナ作成（オプション9つ）

WordPress用のデータベースがないとWordを作成できないので、まずMySQLを作成する。

■MySQLコンテナの作成

```
docker run --name mysql-db01 -dit --net=wordpress-network -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=wordpress-db1 -e MYSQL_USER=testuser -e MYSQL_PASSWORD=password mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-authentication-plugin=mysql_native_password
```

><オプション説明>
--name =コンテナ名
-dit =バックグラウンド実行
-net =ネットワーク名
-e MYSQL_ROOT_PASSWORD =rootユーザのパスワード
MYSQL_DATABASE =データベース領域名
MYSQL_USER =mysqlユーザ名
-e MYSQL_PASSWORD　=mysqlユーザのパスワード
mysql イメージ名
--character-set-server　文字コード
--collation-server　照合順序指定
--default-authentication-plugin　認証方式　（MySQL8.0からデフォルトの認証方式が変更されたが、まだ古い認証方式の方が対応しているので、古い方を指定）

■作成結果例

```
> docker ps -a
CONTAINER ID   IMAGE        COMMAND                  CREATED         STATUS                    PORTS                 NAMES
9bfad82ef88e   mysql        "docker-entrypoint.s…"   8 seconds ago   Up 6 seconds              3306/tcp, 33060/tcp   mysql-db01
```
mysql-db01というコンテナが作成された。


## 3.WordPressコンテナを作成

最後にWordPressコンテナを作成する。

注意点としては以下。
☆同じネットワークを指定する事
★データベースのコンテナ名、データベース領域名、ユーザ名、パスワードを、MySQLコンテナ作成時の値と同じにする。

■WordPressコンテナ作成

```
docker run --name wordpress01 -dit --net=wordpress-network -p 8085:80 -e WORDPRESS_DB_HOST=mysql-db01 -e WORDPRESS_DB_NAME=wordpress-db1 -e WORDPRESS_DB_USER=testuser -e WORDPRESS_DB_PASSWORD=password wordpress
```

><オプション説明>
--name=wordpressのコンテナ名 
-dit=バックグラウンド実行
-net=ネットワーク名
-p ポート指定（ローカル：パブリック）
-e WORDPRESS_DB_HOST=データベースのコンテナ名
-e WORDPRESS_DB_NAME=データベース領域名
-e WORDPRESS_DB_USER=データベースのユーザ名
-e WORDPRESS_DB_PASSWORD=データベースユーザのパスワード
wordpress　イメージ名


```
> docker ps -a
CONTAINER ID   IMAGE        COMMAND                  CREATED         STATUS                    PORTS                                   NAMES
087da6ef9f10   wordpress    "docker-entrypoint.s…"   2 seconds ago   Up 2 seconds              0.0.0.0:8085->80/tcp, :::8085->80/tcp   wordpress01
```
wordpress01というコンテナが作成された。


## 4.接続確認
WordPressコンテナまで作成できたら、WordPress作成時に指定したポートで、ブラウザアクセスしてみよう。

```
http://localhost:8085/
```

下記のような画面が出ればOK。
![SharedScreenshot.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/640437/980fe408-64df-70a0-c39e-b3ed007e7158.jpeg)



# 最後に
いかがでしたでしょうか。
ネットワークの作成、WordPressのインストールが簡単にできました。
次回は「ボリュームマウントの方法」をお伝えしようと思います。


■ご参考
『[DockerでApache、nginx、MySQLを構築するシンプルな方法](https://qiita.com/kazuh1Lo/items/f26c3c8ab7cafe031423)	』