Docker for Macを使ってWebページ表示するまで

英語嫌いなりにDocker for Macに挑戦したメモ。
書いておかないと絶対に忘れるのでメモ。
英語苦手マンなので途中翻訳ソフトに頼ってます。

参考記事
[Mac OS X へのDockerのインストール方法](http://qiita.com/hshimo/items/e24b1fbfbf775ec7c941)（※Qiitaの記事です）

# インストール
記事通り、[Get started with Docker for Mac](https://docs.docker.com/docker-for-mac/)を見に行きます。
上記記事の中で、「Mac用のDocker手に入れてないなら[Install Docker for Mac](https://docs.docker.com/docker-for-mac/install/)で手に入れろ」という指示があるので、その通りにします。

とりあえずEl Capitan以上のMacなら大丈夫な気がしました。
Yosemiteは制限がかかるみたい？

２つのchannel（Stable channel、Edge channel）があります。
多分Stableの方が安定版そうなのでそちらを手に入れました。
リリースは四半期に1回だそうです。
使用統計とその他のデータを送信するかを選択できるとのこと。
※インストール後の設定で、「Send usage statistics」がチェック入ってたのでそれかと思います。

このどちらもに「Docker Engineの実験的機能」がついているようです。
「運用中のアプリで使う場合は切れ」とのことです。
どれなのかは知りません…。

インストールしました。

# バージョンチェック
再び[Get started with Docker for Mac](https://docs.docker.com/docker-for-mac/)に戻ります。
`docker`,`docker-compose`,`docker-machine`のバージョンを確認しろとのこと。

```
$ docker --version
$ docker-compose --version
$ docker-machine --version
```

# 試してみる
[Get started with Docker for Mac](https://docs.docker.com/docker-for-mac/)の続き。
試しにやってみましょう的なのがあるので試します。

ターミナルでコマンド打てばいいっぽい。
dockerの動作を下記コマンドで確認。

```
$ docker version
```

あと次のコマンドを実施

```
$ docker ps
$ docker run hello-world
```

これでちゃんと動いているかどうかがわかるらしい。
hello-worldをrunして、下みたいなメッセージが出たらOK

```
Hello from Docker!
This message shows that your installation appears to be working correctly.
```

もっとしたい場合はこう。
nginxをポート80でやる？みたいなやつ。

```
$ docker run -d -p 80:80 --name webserver nginx
```

`http://localhost`へ行けというのでアクセス。
出ない(´・ω・｀)
どうしましょうね…。

と思ったら何回かやったらできました。
原因は不明ですが、ちょっと遅いみたいです。

で、この時点で`docker ps`をしていると、前述のコマンドの`nameオプション`で指定した`webserver`が動いていることがわかります。
（コンテナ名がwebserverになっています）

どうやら`run`はコンテナを立ち上げてくれるようです。
`nameオプション`でコンテナ名,
`pオプション`でポートを指定できるようです。
`dオプション`はバックグラウンドで起動だそうです。
参考：[docker コマンド チートシート](http://qiita.com/voluntas/items/68c1fd04dd3d507d4083)

コンテナの停止コマンド及びコンテナの削除コマンドを打たない限り、ずっと起動するようなので、停止してみます。

```
$ docker stop webserver
```

※再び始めるときは`docker start webserver`

`docker ps -a`を打つと、停止中のコンテナを含めて確認できます。
コンテナを削除をする場合、↓のように打つ。
※runコマンド実行時に同じコンテナ名があるとエラーになります。

```
$ docker rm -f webserver
```

これで消してもnginxのイメージは消えないそうです。
…イメージ？（別途調べて記事にするかも？）
いろんなサイトを斜め読みしてみましたが、

コンテナ：イメージを元に作られた環境
イメージ：コンテナの元
みたいな印象です。

そのイメージとやらの確認は

```
$ docker images
```

これ打って知りましたが`hello-world`はイメージってやつのようです。
これが消えないのは、再利用するためみたいです。
（ない場合はDocker Hubからpullしてる？っぽいです多分）

イメージを消したい場合は、

```
$ docker rmi [イメージID or イメージ名]
```

イメージIDとイメージ名は`docker images`で確認できます。
今回は`docker rmi nginx`で実施しました。

これ以外にもサンプルがある様子。
困ったらやろう…。

# Docker for Macの設定について

今回入れたのはStableなのでそれに関連するものだけ。

## General
アプリの自動起動とか、バックアップとかの設定。
なんかEdgeリリースでは、DockerログインをMacOSキーチェーンに安全に保存するための追加オプションがあるらしいです。
Stableはなし。（無効にできない）

### Start Docker when you log in
ログイン時にDockerを自動起動するようになっている。
セッションを開いた時にDockerを起動しない場合はチェックを外す。
今回は外しました。

### Automatically chack for updates
アップデートを自動化するか(チェックすると自動アップデート)。
これはチェックしたまま。

### Exclude VM from Time Machine backups
Time MachineがDocker for Macの仮装マシンをバックアップするかどうか(チェックするとバックアップするっぽい)。
これはデフォルトのまま、チェックしない。
とりあえずバックアップいらない。

### Send usage statistics
Dockerに使用状況を送る。
とりあえず外しました。

## File sharing
Mac上のどのフォルダとコンテナを共有するか。
よくわからないのでデフォルトままにしておきます。
とりあえずプロジェクトが/Usersの外にあるとダメなので、その場合は共有しろってことみたいです。

## Advanced
CPUとかメモリとか決めるところ。
ディスクイメージの格納場所を選択できるようです。
まあ特にいじらなくていいかも。。。

## Proxy
HTTPのプロキシ設定をするところ。
ここもとりあえずはいじらないことに。

## Docker Daemon
Dockerデーモンのコンテナの実行時のオプションが設定可能。
（とりあえず英語読むの大変なので必要になったら読みます）

## Uninstall/Reset
Dockerのアンインストールか、
初期インストールの状態に戻す。


# DockerでWebページを動かすまで
参考
[docker の nginx イメージの設定ファイルを眺めながら、独自ページを表示します。
](http://qiita.com/mochizukikotaro/items/1d28888b78f401227ed6)

dockerのコンテナにアクセスします。
(`exec`がわからなかった…)

```
$ docker run -d -p 80:80 --name webserver nginx
$ docker exec -it webserver /bin/bash
```

`/etc/nginx/conf.d/default.conf`でrootを確認する。
参考サイト通り`/usr/share/nginx/html`がrootディレクトリであることを確認。

参考サイトではコンテナ内でHTMLファイルをいじってましたが、
ローカルで作ったものをコンテナに上げたいので、
一旦`exit`します。

```
$ docker cp [ローカルファイル名] webserver(コンテナ名）:[コンテナ保存先パス]
```

ワイルドカードは対応してないようです。
な、なんだってー(・o・)

もしかしたら
Git管理
→リモートリポジトリにpush
→コンテナexec
→コンテナ内でpull
とかの方が楽なのかも。

そのうちgitとか入れてやってみます。