MACでdocker-composeを使ってwordpressの環境作ッタ時の自分用覚え書き

これ（https://hub.docker.com/_/wordpress/）みながら、
macでwordpressのテスト環境を作らなければならなかった時の自分用の覚え書き

事前知識
- Dockerバージョン1.8(2015年8月)から、Boot2Docker(非推奨)ではなく、Docker ToolBox、Docker Machineを利用するようになった (既存のboot2dockerからのマイグレーションは可能)
- Dockerは基本的にLXC(Linux Container)の上で動作するので、Linuxのみに対応する。しかし、OS Xはそれに対応できない。そのため、LXCの代わりにVirtual Boxを利用する。
- そのVirtual BoxをMac上で簡単に使用するためのものがDocker-machineである。
- 因みにdocker for macもあるのでそっちでも良さげ


## 必要なもの
名前|概要|
---|---|
docker|dockerの本体|
docker-machine|Dockerがインストールされたdockerホストマシンを作成するもの。作成先はローカルのVM、クラウドサービスともに可能。|
docker-compose|yml形式の設定ファイルに従ってdockerホスト上に複数のDockerコンテナで構成される環境を構築したり操作したりするツール|
virtualbox | linuxコンテナを起動するにはlinux環境が必要なのでそれ用 |

## インスコ

```:sh
$ brew install docker
$ brew install docker-machine
$ brew install docker-toolbox
```


## Dockerホストの作成
```:sh
$ docker-machine rm default # 一様過去のを削除する
$ docker-machine create --driver virtualbox default # defaultという名前のVMをVirtualBoxで作る
$ docker-machine ls # 稼働中のdockerホストの確認
$ docker-machine env default 
$ docker-machine start default
```


## Dockerホストのcertificate(認証書)のエラーが出た時の修正
```:sh
$ docker-machine env default # 以下のエラーが出た
Error checking TLS connection: Error checking and/or regenerating the certs: There was an error validating certificates for host
$ docker-machine regenerate-certs default # 認証書の再作成
```

## Dockerコンテナを一斉起動
```:sh
$ mkdir ~/sandbox && cd ~/sandbox
$ $EDITOR docker-compose.yml # 下の貼り付ける
$ eval $(docker-machine env default) # 別ターミナル使う時用の環境設定
$ docker-compose up # Create and start containers
```

## docker-compose.yml
```:sh
version: '2'

services:

  wordpress:
    image: wordpress
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_PASSWORD: example

  mysql:
    image: mariadb
    environment:
      MYSQL_ROOT_PASSWORD: example

```

## dockerホスト操作

```:sh
$ docker-machine ls
NAME                ACTIVE  DRIVER      STATE    URL                        SWARM
default            *        virtualbox  Running  tcp://192.168.99.101:2376
$ docker-machine rm default # dockerホストの削除
$ docker-machine stop default # dockerホストの停止
$ docker-machine start default # dockerホストの起動
$ docker-machine ssh # dockerホストに接続
$ docker-machine ip # dockerホストのIPアドレスの表示
192.168.99.101
$ docker-machine restar # dockerホストの再起動
```


## コンテナの一覧
docker-compose.ymlに記述したのがコンテナとして起動する

```:sh
$ docker-compose  up -d # バックグラウンドで起動
$ docker-compose ps
    Name                  Command             State          Ports
-------------------------------------------------------------------------
sandbox_db_1    docker-entrypoint.sh mysqld   Exit 1
sandbox_web_1   apache2-foreground            Up       0.0.0.0:80->80/tcp
$ docker-compose start 
$ docker-compose stop 
```


## ローカルからコンテナへの接続
```:sh
$ docker-machine ssh 
$ eval $(docker-machine env default) # 別ターミナル使うとき
$ docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
1394bcba40e2        wordpress           "/entrypoint.sh apach"   7 minutes ago       Up 7 minutes        0.0.0.0:8080->80/tcp   sandbox_wordpress_1
df94ad96dbe7        mariadb             "docker-entrypoint.sh"   7 minutes ago       Up 7 minutes        3306/tcp               sandbox_mysql_1
$ sudo docker exec -i -t 1394bcba40e2 /bin/bash #by ID
$ sudo docker exec -i -t sandbox_wordpress_1 /bin/bash #by Name
$ export TERM=xterm # ターミナル設定
```

## コンテナ内での操作
```:sh
$ apt-get update 
$ apt-get install vim git 
$ cd /var/www/html
$ vim index.php # <?=phpinfo();?>を入れる
$ cd  && pwd
/root
$ git clone https://github.com/mgoldchild/dotfiles.git
$ # bashとvimの設定をする
```

## dockerコマンドの流れmemo
```:sh
$ docker search <image_name> # imageの検索
$ docker pull <image_id> # imageのDL
$ docker images # ローカルにあるimageの確認
$ docker run # imageからコンテナ起動
$ docker inspect # コンテナspecの確認
$ docker ps -a # コンテナの確認
$ docker attach # 起動中コンテナにアタッチ
$ docker exec # 起動中コンテナの編集
$ docker stop/kill # 起動中コンテナの停止
$ docker start # 停止中のコンテナのスタート
$ docker rm # コンテナの削除
```

## wordpressの起動確認
```:sh
$ docker-machine ip
192.168.99.100
$ open http://192.168.99.100:8080
```

## ファイルのコピーmemo
```:sh
$ eval $(docker-machine env default) # 別ターミナル使うとき
$ docker ps
1394bcba40e2        wordpress           "/entrypoint.sh apach"   7 minutes ago       Up 7 minutes        0.0.0.0:8080->80/tcp   sandbox_wordpress_1
df94ad96dbe7        mariadb             "docker-entrypoint.sh"   7 minutes ago       Up 7 minutes        3306/tcp               sandbox_mysql_1
$ docker cp FILENAME 1394bcba40e2:/ # FILENAMEをコンテナの/に入れる。
```

## 参考文献
http://qiita.com/kiida/items/059e34ea53c16e6bc9ec
http://hacknote.jp/archives/17376/
http://qiita.com/segawa/items/a8ba4af33ddf39eafa95
http://askubuntu.com/questions/505506/how-to-get-bash-or-ssh-into-a-running-container-in-background-mode
http://qiita.com/kooohei/items/d370701d6c39727334f3
http://qiita.com/gologo13/items/7e4e404af80377b48fd5