Dockerでwordpressの環境構築

# Dockerでwordpressの環境構築

## 開発環境
- ubuntu 14.04

## この記事の目的
- Dockerのチュートリアル終わって次何しよっかーって状態になった。
- 実際にちゃんと動くもの見ないとイメージつかないなと思ったので身近なwordpressを選択
- Docker Hubでwordpressのコンテナあるし試してみよう

> https://registry.hub.docker.com/_/wordpress/

## この記事でやっていること
- Docker Hubからwordpressのイメージ持ってくる
- Docker Hubからmysqlのイメージ持ってきて起動
- 再度wordpressを立ち上げる
- wordpressの動作確認

## Docker Hubからwordpressのイメージ持ってくる
- 結構時間かかった。
	- 3分ぐらい？

```bash:
$ docker pull wordpress

Pulling repository wordpress
9f51af77fd96: Pulling dependent layers

~ 省略 ~

30ba4a4304b4: Download complete
b2aa6b070112: Download complete
d49f43e6ad6b: Downloading [=================================================> ] 1.366 MB/1.372 MB 0
2015/02/06 05:19:29 unexpected EOF
```

- ついでにgithubからソースコード持ってくる

```bash:
$ git clone git@github.com:docker-library/wordpress.git
```

- buildしてみる

```
$ docker build -t hoge:wordpress ./
```

- とりあえずsshで入ってみる

```bash:
$ docker run -it hoge:wordpress /bin/bash
error: missing MYSQL_PORT_3306_TCP environment variable
  Did you forget to --link some_mysql_container:mysql ?
```

- 怒られる
	- Mysqlの設定がない？
		- run する時に `--link some_mysql_container:mysql` をつけろとのこと
		- つまりmysqlコンテナ作れってことか

## Docker Hubからmysqlのイメージ持ってきて起動

```bash:
$ docker pull mysql
$ git clone git@github.com:docker-library/mysql.git
```

- 5.6入れてみた

```bash:
$ cd mysql/5.6
$ docker build -t hoge:mysql56 ./
```

- runする時に環境変数でパスワードを渡す

```bash:
$ docker run --name hoge_mysql56 -e MYSQL_ROOT_PASSWORD=hogehoge -d hoge:mysql56
```

- 念のため立ち上がってるの確認

```bash:
$ docker ps
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS               NAMES
0d23478ffce2        hoge-mysql:latest   /entrypoint.sh mysql   8 seconds ago       Up 7 seconds        3306/tcp            hoge_mysql56
```

- mysqlに接続してみる

```
$ docker run -it --link hoge_mysql56:mysql --rm mysql sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.6.23 MySQL Community Server (GPL)

Copyright (c) 2000, 2015, 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>
```

## 再度wordpressを立ち上げる

- build

```
$ docker build -t hoge:wordpress ./
```

- sshで繋ぐ

```
$ docker run -it --link hoge_mysql56:mysql hoge:wordpress /bin/bash
WordPress not found in /var/www/html - copying now...
WARNING: /var/www/html is not empty - press Ctrl+C now if this is an error!
+ ls -A
index.html
+ sleep 10
Complete! WordPress has been successfully copied to /var/www/html
$ root@752f6b311b98:/var/www/html#
```

- とりあえず ls
	- 色々wordpress関連のものが入ってるのがわかった

```
$ ls -al
total 204
drwxr-xr-x  5 www-data www-data  4096 Feb  6 09:07 .
drwxr-xr-x  3 root     root      4096 Jan 27 19:05 ..
-rw-r--r--  1 www-data www-data   163 Feb  6 09:07 .htaccess
-rw-r--r--  1 www-data www-data 11104 Jan 27 19:04 index.html
-rw-r--r--  1 www-data www-data   418 Sep 25  2013 index.php
-rw-r--r--  1 www-data www-data 19930 Apr  9  2014 license.txt
-rw-r--r--  1 www-data www-data  7193 Sep 29 13:24 readme.html
-rw-r--r--  1 www-data www-data  4951 Aug 20 17:30 wp-activate.php
drwxr-xr-x  9 www-data www-data  4096 Dec 18 18:18 wp-admin
-rw-r--r--  1 www-data www-data   271 Jan  8  2012 wp-blog-header.php
-rw-r--r--  1 www-data www-data  5008 Nov 26 20:17 wp-comments-post.php
-rw-r--r--  1 www-data www-data  2726 Sep  9 01:23 wp-config-sample.php
-rw-r--r--  1 www-data www-data  3108 Feb  6 09:07 wp-config.php
drwxr-xr-x  4 www-data www-data  4096 Dec 18 18:18 wp-content
-rw-r--r--  1 www-data www-data  2956 May 13  2014 wp-cron.php
drwxr-xr-x 12 www-data www-data  4096 Dec 18 18:18 wp-includes
-rw-r--r--  1 www-data www-data  2380 Oct 24  2013 wp-links-opml.php
-rw-r--r--  1 www-data www-data  2714 Jul  7  2014 wp-load.php
-rw-r--r--  1 www-data www-data 33435 Dec 16 22:19 wp-login.php
-rw-r--r--  1 www-data www-data  8252 Jul 17  2014 wp-mail.php
-rw-r--r--  1 www-data www-data 11115 Jul 18  2014 wp-settings.php
-rw-r--r--  1 www-data www-data 25152 Nov 30 21:23 wp-signup.php
-rw-r--r--  1 www-data www-data  4035 Nov 30 21:23 wp-trackback.php
-rw-r--r--  1 www-data www-data  3032 Feb  9  2014 xmlrpc.php
```

- wp-config.phpはどうなっってるか確認

```php:
~ 略 ~

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'wordpress');

/** MySQL database username */
define('DB_USER', 'root');

/** MySQL database password */
define('DB_PASSWORD', 'hogehoge');

/** MySQL hostname */
define('DB_HOST', 'mysql');

/** Database Charset to use in creating database tables. */
define('DB_CHARSET', 'utf8');

/** The Database Collate type. Don't change this if in doubt. */
define('DB_COLLATE', '');

~ 略 ~
```

- `define('DB_HOST', 'mysql');`
	- ？？？？

```
$ cat /etc/hosts
172.17.0.30	e23bf7b37582
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.17.0.21	mysql
```

- なるほど

## wordpressの動作確認
- さっき作ったコンテナは捨てて再度立ち上げる
	- ホストOSの8080番をコンテナの80番に割り当てる

```
$ docker run --name hoge_wordpress -d -p 8080:80 --link hoge_mysql56:mysql hoge:wordpress
```

- ブラウザで確認

`http://localhost:8080` にアクセス

## まとめ
Dockerの作法であったりコンテナ同士の繋がりがわかってきた。
今後はコンテナの構築を中心にやっていきたい。