Docker for MacでWordPressローカル環境構築

## <i class="fa fa-hand-peace-o" aria-hidden="true"></i> はじめに

WordPressのローカル開発環境を、VagrantとVirtualBoxで構築していたのですが、`vagrant up`でなかなかの時間がかかることにみぞみぞしておりました。
Docker for macなるものを見つけ、試しに使ってみる事にしました。

## <i class="fa fa-book" aria-hidden="true"></i> アジェンダ
* Dockerインストール
* MySQLコンテナの作成
* WordPressコンテナの作成
* phpMyAdminコンテナの作成



## <i class="fa fa-cube" aria-hidden="true"></i> Dockerをインストール

[Install Docker for Mac](https://docs.docker.com/docker-for-mac/install/) へアクセスしインストールする。

![1.png](https://qiita-image-store.s3.amazonaws.com/0/55848/3cff0c18-9365-3c57-69b1-c2612eb23e3f.png "1.png")

ダウンロードされた、`Docker.dmg`をクリック。

![2.png](https://qiita-image-store.s3.amazonaws.com/0/55848/405c5e95-0051-837b-4939-d381a09b842d.png)

Applicationsへドラッグ & ドロップ。

![3.png](https://qiita-image-store.s3.amazonaws.com/0/55848/8e634997-8e5a-39de-b78f-23dd02fcce79.png)

Docker.appをクリック。

ちなみに彼の名前は`Moby Dock`
https://blog.docker.com/2013/10/call-me-moby-dock/


インストールが完了すると、dockerコマンドが使える。
試しに使えるのか確認。

```
$ docker --version 
Docker version 17.03.0-ce, build 60ccb22
```


## <i class="fa fa-cubes" aria-hidden="true"></i> DockerイメージとDockerコンテナ

ざっくりな説明ですが。。。。


###### Dockerコンテナ

* Dockerイメージを動かす為の箱。

###### Dockerイメージ

* コンテナ作成のベースとなるテンプレート。

## <i class="fa fa-database" aria-hidden="true"></i> MySQL用のコンテナを作成

Dockerに用意されているコマンドを叩けば、すぐ作成できる。

詳しくは、[Docker Hub](https://hub.docker.com/)にアカウント登録し、自分に必要なバージョンを用意すると良い。

今回は、下記で進めていく。

```
$ docker run --name (コンテナ名) -e MYSQL_ROOT_PASSWORD=パスワード -d mysql:5.7
```


* `(コンテナ名)`に名前を入れる
* `パスワード`にMySQLのルートユーザのパスワードを入れる


(例)

```
$ docker run --name dev_db -e MYSQL_ROOT_PASSWORD=XXXXX -d mysql:5.7
```


起動したコンテナの状況を確認するコマンド。
`-a`は、すべての情報を表示。 

```
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
9e0153fa2cbf        mysql:5.7           "docker-entrypoint..."   2 minutes ago       Up 2 minutes        3306/tcp            dev_db

```

MySQLが動いているかの確認するコマンド

```
$ docker exec -it dev_db bash
root@780a8747c93e:/# ps ax
  PID TTY      STAT   TIME COMMAND
    1 ?        Ssl    0:00 mysqld
  145 ?        Ss     0:00 bash
  150 ?        R+     0:00 ps ax

root@780a8747c93e:/# exit
```


## <i class="fa fa-wordpress" aria-hidden="true"></i> Wordpress用のコンテナを作成

WordPressを動かすDockerコンテナを作成する


```
docker run --name (WordPress用のコンテナ名) --link db:mysql -p 8080:80 -v (~/ローカルパス):/var/www/html -d wordpress
```

* `(WordPress用のコンテナ名)`に名前を入れる
* `(MySQLのコンテナ名)`に先ほどの作成したMySQLのコンテナ名を入れる
* `(~/ローカルパス)`にwordpressが格納されるディレクトリを指定する。(作業ディレクトリ)
* 8080番ポートを指定


(例)

```
docker run --name dev_wp --link dev_db:mysql -p 8080:80 -v ~/Project/dev_wp/wordpress:/var/www/html -d wordpress
```

指定したパスでパッケージが展開されているか確認する。

```
$ cd ~/Project/dev_wp/wordpress
$ ls -la
-rw-r--r--@   1 oohashiken  staff    234  3 24 19:10 .htaccess
-rw-r--r--@   1 oohashiken  staff    418  9 25  2013 index.php
-rw-r--r--@   1 oohashiken  staff  19935  1  3 03:51 license.txt
-rw-r--r--@   1 oohashiken  staff   7433  1 12 02:46 readme.html
-rw-r--r--@   1 oohashiken  staff   5447  9 28 06:36 wp-activate.php
drwxr-xr-x@  89 oohashiken  staff   3026  3  7 01:00 wp-admin/
-rw-r--r--@   1 oohashiken  staff    364 12 19  2015 wp-blog-header.php
-rw-r--r--@   1 oohashiken  staff   1627  8 29  2016 wp-comments-post.php
-rw-r--r--@   1 oohashiken  staff   2764  3 24 19:10 wp-config-sample.php
-rw-r--r--@   1 oohashiken  staff   3145  3 24 19:10 wp-config.php
drwxr-xr-x@   5 oohashiken  staff    170  3  7 01:00 wp-content/
-rw-r--r--@   1 oohashiken  staff   3286  5 25  2015 wp-cron.php
drwxr-xr-x@ 187 oohashiken  staff   6358  3  7 01:00 wp-includes/
-rw-r--r--@   1 oohashiken  staff   2422 11 21 11:46 wp-links-opml.php
-rw-r--r--@   1 oohashiken  staff   3301 10 25 12:15 wp-load.php
-rw-r--r--@   1 oohashiken  staff  33939 11 21 11:46 wp-login.php
-rw-r--r--@   1 oohashiken  staff   8048  1 11 14:15 wp-mail.php
-rw-r--r--@   1 oohashiken  staff  16250 11 29 14:39 wp-settings.php
-rw-r--r--@   1 oohashiken  staff  29896 10 19 13:47 wp-signup.php
-rw-r--r--@   1 oohashiken  staff   4513 10 15 04:39 wp-trackback.php
-rw-r--r--@   1 oohashiken  staff   3065  9  1  2016 xmlrpc.php
```

同じように、起動したコンテナの状況を確認する。

```
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
c345591d9e9c        wordpress           "docker-entrypoint..."   6 minutes ago       Up 6 minutes        0.0.0.0:8080->80/tcp   dev_wp
780a8747c93e        mysql:5.7           "docker-entrypoint..."   26 minutes ago      Up 26 minutes       3306/tcp               dev_db

```


`0.0.0.0:8080->80/tcp`が表示されてるので、アクセス。(どちらでも)

* [http://localhost:8080/](http://localhost:8080/)

* [http://0.0.0.0:8080/](http://0.0.0.0:8080/)

## <i class="fa fa-desktop" aria-hidden="true"></i> PhpMyAdmin用のコンテナを作成

[Docker Hub phpmyadmin/phpmyadmin](https://hub.docker.com/r/phpmyadmin/phpmyadmin/)


```
docker run --name (PhpMyAdmin用のコンテナ名) -d --link (MySQL用のコンテナ名:db) -p 8888:80 phpmyadmin/phpmyadmin
```

* `(PhpMyAdmin用のコンテナ名)`に名前を入れる
* `(MySQL用のコンテナ名:db)`に先ほどの作成したMySQLのコンテナ名を入れる。:dbは固定
* wordpress(8080)と被らないように8888番ポートを指定



(例)

```
docker run --name phpmyadmin -d --link dev_db:db -p 8888:80 phpmyadmin/phpmyadmin
```

同じように、起動したコンテナの状況を確認する。

```
$ docker ps -a
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                  NAMES
4343b788195b        phpmyadmin/phpmyadmin   "/run.sh phpmyadmin"     2 seconds ago       Up 2 seconds        0.0.0.0:8888->80/tcp   phpmyadmin
c345591d9e9c        wordpress               "docker-entrypoint..."   21 minutes ago      Up 21 minutes       0.0.0.0:8080->80/tcp   dev_wp
780a8747c93e        mysql:5.7               "docker-entrypoint..."   41 minutes ago      Up 41 minutes       3306/tcp               dev_db
```

`0.0.0.0:8888->80/tcp`が表示されてるので、アクセス。(どちらでも)
ログインは、先ほど作成したMySQLのパスワード。

* [http://localhost:8080/](http://localhost:8888/)
* [http://0.0.0.0:8080/](http://0.0.0.0:8888/)

ユーザー名：root
パスワード：XXXXX

あとは、いつも通り、ユーザーを追加したりデータベースの作成を進めれば良い。


## <i class="fa fa-terminal" aria-hidden="true"></i> コマンド一覧 操作方法

| Dockerコマンド | 説明 |
|:--|:--|
| docker --version | バージョンを表示する |
| docker ps -a | コンテナの一覧表示(-a で停止してるコンテナも表示) |
| docker start コンテナ名 | コンテナ開始 |
| docker stop コンテナ名 | コンテナ停止 |
| docker rm コンテナ名 | 不要のコンテナ削除 |
| docker images | イメージの一覧表示 |
| docker rmi イメージ名 | コンテナで使用しているイメージを削除 |
| docker exec -it コンテナ名 /bin/bash <br> ※抜ける時は、 みんな大好き`exit` | Dockerコンテナへアクセス |

※今回使用したコマンド。

## <i class="fa fa-hand-paper-o" aria-hidden="true"></i> おわりに
高速 + 簡単。
ミスった場合も数秒で削除し、また作り直すことができる。
私のような低スペックなPCで作業してる人には、とてもありがたいです。
今回、紹介した以外にも、高性能にカスタマイズされた環境もありますので、[Docker Hub](https://hub.docker.com/)を利用していきたいなと思います。


## <i class="fa fa-list" aria-hidden="true"></i> 参照
* [Docker for Mac](https://docs.docker.com/docker-for-mac/) 
* [Docker Hub](https://hub.docker.com/)
* [Docker ドキュメント日本語化プロジェクト](http://docs.docker.jp/)