macでDockerを使う

# 前提
- Docker Toolbox がインストールされていること
- Docker version 1.11.1
- MySQL、PHPの各コンテナを立ち上げるところまで
 - pdo_mysqlは導入していないので、PHPからMySQLに接続できない

# Docker Machine を作成する

```bash
$ docker-machine ls
NAME   ACTIVE   DRIVER   STATE   URL   SWARM   DOCKER   ERRORS
```

まずは Docker Mashine が起動していないことを確認

```bash
$ docker-machine create --driver virtualbox ＜マシーン名＞
Creating CA: /＜ディレクトリ＞/.docker/machine/certs/ca.pem
Creating client certificate: /＜ディレクトリ＞/.docker/machine/certs/cert.pem
...省略
```
＜マシーン名＞は、以降「mydoc」とする

```bash
$ docker-machine ls
NAME    ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER    ERRORS
mydoc   -        virtualbox   Running   tcp://xxx.xxx.xx.xxx:xxxx           v1.11.2
```

# Docker Machine をストップする

```bash
$ docker-machine stop mydoc
Stopping "mydoc"...
Machine "mydoc" was stopped.
```

mydoc を指定しないとデフォルト（default）を設定となるので、エラーが出る
「Error: No machine name(s) specified and no "default" machine exists.」

```bash
$ docker-machine ls
NAME   ACTIVE   DRIVER   STATE   URL   SWARM   DOCKER   ERRORS
```

# Docker Machine をスタートする

```bash
$ docker-machine start mydoc
Starting "mydoc"...
...省略
Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.
```

```bash
$ docker-machine env mydoc
set -gx DOCKER_TLS_VERIFY "1";
set -gx DOCKER_HOST "tcp://xxx.xxx.xx.xxx:xxxx";
set -gx DOCKER_CERT_PATH "/＜ディレクトリ＞/.docker/machine/machines/mydoc";
set -gx DOCKER_MACHINE_NAME "mydoc";
# Run this command to configure your shell: 
# eval (docker-machine env mydoc)
```

# 環境変数の設定

立ち上げのみであれば、下記のコマンドを打てば良い
ターミナル立ち上げる度に必要になるので、「.bash_profile」　に記載した方が良い

```bash
$ set -gx DOCKER_TLS_VERIFY "1";
$ set -gx DOCKER_HOST "tcp://xxx.xxx.xx.xxx:xxxx";
$ set -gx DOCKER_CERT_PATH "/＜ディレクトリ＞/.docker/machine/machines/mydoc";
$ set -gx DOCKER_MACHINE_NAME "mydoc";
```

set コマンドの設定が反映されているかを確認

```bash
$ env
DOCKER_TLS_VERIFY "1";
DOCKER_HOST "tcp://xxx.xxx.xx.xxx:xxxx";
DOCKER_CERT_PATH "/＜ディレクトリ＞/.docker/machine/machines/mydoc";
DOCKER_MACHINE_NAME "mydoc";
```

# MySQL のコンテナを立ち上げる

公式サイトから、イメージ名を確認
（今回はMySQLの「5.7」にしました）

``` bash
$ docker run --name ＜MySQLのコンテナ名＞ -e MYSQL_ROOT_PASSWORD=＜ルートのパスワード＞ -d ＜イメージ名＞:＜タグ名＞
Unable to find image 'mysql:5.7' locally
...省略
```

- 「--name」がコンテナ名の指定
    - 今回は＜MySQLのコンテナ名＞は「mysql」とする
- 「-e」がコンテナの中の環境変数の設定
- 「-d」はデーモンのバックグラウンドコンテナで起動
    - 今回は＜イメージ名＞は「mysql」とする
    - 今回は＜タグ名＞は「5.7」とする

``` bash
$docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES
828ee5985328        mysql:5.7           "docker-entrypoint.sh"   About a minute ago   Up About a minute   3306/tcp            mysql
```

コンテナに bash で接続し、MySQL を確認

```bash
$ docker exec -ti mysql bash
```

```mysql
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)
```

exit して、MySQL は終了

# PHP のコンテナを立ち上げる

公式サイトから、イメージ名を確認
（今回はPHPの「7-apache」にしました）

あらかじめ、下記のようなフォルダを作成しておく
「/＜ディレクトリ＞/mydoc/php」

以下、作成したディレクトリ内にて実行

```bash
$ docker run --name php -p 80:80 -v /＜ディレクトリ＞/mydoc/php:/var/www/html --link mysql:mysql -d ＜イメージ名＞:＜タグ名＞
Unable to find image 'php:7-apache' locally
...省略
```

```bash
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
a2a6ff105e91        php:7-apache        "apache2-foreground"     50 seconds ago      Up 49 seconds       0.0.0.0:80->80/tcp   php
828ee5985328        mysql:5.7           "docker-entrypoint.sh"   15 minutes ago      Up 15 minutes       3306/tcp             mysql
```

「DOCKER_HOST」を確認し、ポートを80にしてアクセス
（ポートはデフォルト80なので、指定しなくても問題ない）
例）http://xxx.xxx.xx.xxx:80

この時、ファイルがないため、「Forbidden」となる
表示確認がしたい場合は、「/＜ディレクトリ＞/mydoc/php」に「index.php」を作成
とりあえず、phpinfoを表示させてみる

```php:/＜ディレクトリ＞/mydoc/php/index.php
<?php
phpinfo();
```

再度アクセスする

# 参考
[公式サイト](https://hub.docker.com/)
[Docker Machine を使って VirtualBox に Dockerホストを立てる](http://qiita.com/spesnova/items/038af6a8a4e401e3d2aa)