MacでDockerを使ってみる


どうも
今回はタイトル通り、MacでDockerを使っていきたいと思います
公式のインストール方法を参考にやっていきます
[Docker Install Mac OS X](https://docs.docker.com/installation/mac/ "Docker Install Mac OS X")


以前はboot2dockerを使っていたと思いますが、最近はDocker-Machineというものを使うのが流行りっぽいです


ではインストールしていきましょう
<h2>インストール手順</h2>
<h4>1.[Docker Toolbox](https://www.docker.com/toolbox "Docker Toolbox")ページに行く</h4>
　
<h4>2.インストールリンクを押してダウンロードする
![スクリーンショット 2015-08-30 9.13.30.png](https://qiita-image-store.s3.amazonaws.com/0/36871/01cb315e-b6cc-9451-a29f-73cf5e43d925.png "スクリーンショット 2015-08-30 9.13.30.png")
今回は、Download(Mac)の方ですね</h4>
　
<h4>3.ダウンロードが完了したら`pkg`ファイルをダブルクリックして、Install Docker Toolboxのダイアログを開きます
![スクリーンショット 2015-08-30 9.18.06.png](https://qiita-image-store.s3.amazonaws.com/0/36871/536d68cb-3546-c917-c6cc-c5d190c968cd.png "スクリーンショット 2015-08-30 9.18.06.png")</h4>


<h4>4.ダイアログに表示されている「Continue」を押してインストールを開始します</h4>

　
　
<h4>5.インストールするときにパスワードを要求されると思うので入力します</h4>

![スクリーンショット 2015-08-30 9.20.29.png](https://qiita-image-store.s3.amazonaws.com/0/36871/d80c3a88-8bd6-fa25-6a73-8c6cd93f7d5e.png "スクリーンショット 2015-08-30 9.20.29.png")
　
　
　

<h4>6.Closeを押して終了ですが、Quick-Startにこれからやることが書いてあるので閉じないままでも大丈夫です</h4>

![スクリーンショット 2015-08-30 9.21.10.png](https://qiita-image-store.s3.amazonaws.com/0/36871/0f22cba2-dde1-3130-22e7-6253cd4a5d3c.png "スクリーンショット 2015-08-30 9.21.10.png")

　
　
　　
　　


<h2>Dockerを始める</h2>
先ほどの工程でインストール自体は終了したので、次は実際に使っていこうと思います
　
<h4>1.アプリにDocker Quickstart Terminalがあると思うのでそれを起動します</h4>

![スクリーンショット 2015-08-30 9.33.59.png](https://qiita-image-store.s3.amazonaws.com/0/36871/9ea3f5d3-61c8-adc1-e354-23cc42c28ab4.png "スクリーンショット 2015-08-30 9.33.59.png")


<h4>2.Terminalが立ち上がる</h4>

このDocker Quickstart Terminalが行っていることは

- ターミナルを立ち上げる
- 「default」というVMを作成する、もし既にそのVMがあればそれを起動する
- ターミナルからVMを操作できるように設定する

最終的に以下の様な画面が現れます

![スクリーンショット 2015-08-30 9.44.28.png](https://qiita-image-store.s3.amazonaws.com/0/36871/4a081995-15d6-fcfc-9fb6-0b5a823f96f1.png "スクリーンショット 2015-08-30 9.44.28.png")


この画面が出たらdockerコマンドが使えます

<h4>3.hello-worldコンテナを実行する</h4>

```
$ docker run hello-world
Unable to find image 'hello-world:latest' locally
511136ea3c5a: Pull complete
31cbccb51277: Pull complete
e45a5af57b00: Pull complete
hello-world:latest: The image you are pulling has been verified.
Important: image verification is a tech preview feature and should not be
relied on to provide security.
Status: Downloaded newer image for hello-world:latest
Hello from Docker.
This message shows that your installation appears to be working correctly.


To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
   (Assuming it was not already locally available.)
3. The Docker daemon created a new container from that image which runs the
   executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
   to your terminal.


To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
```

これでhello-worldコンテナを実行しました

しかし、わしゃiTermが使いたいのう…いちいちアプリ起動するのは億劫じゃ…
なにかいい方法はないかのぅばあさん

<b>あんべ</b>


とういことで
<h2>ShellからDockerを使う</h2>
確認として現在はVMが何も立ち上がっていない状態とします
VMが立ち上がっているかの確認は

`docker-machine ls`

![スクリーンショット 2015-08-30 9.53.17.png](https://qiita-image-store.s3.amazonaws.com/0/36871/f3835da7-9dcd-ad5b-a666-9d3d19808c77.png "スクリーンショット 2015-08-30 9.53.17.png")

STATEがStoppedになっていれば起動していない状態です
この状態でdockerコマンドを使っても文句を言われるだけだと思います

もし停止していない場合は

`docker-machine stop default`

docker-machine stop VM名
で終了して下さい

<h4>Docker MachineでVMを起動する</h4>
VMを立ち上げていきます

起動するのは先ほど作ったdefaultです

コマンドは以下になります
`docker-machine start default`

docker-machine start VM名

![スクリーンショット 2015-08-30 9.57.41.png](https://qiita-image-store.s3.amazonaws.com/0/36871/c4205312-3622-87c2-22a4-3bb35621f575.png "スクリーンショット 2015-08-30 9.57.41.png")


これで起動はされましたが、まだこれではDockerコマンドを使えません

「Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.」

新しいIPアドレスになってるから`docker-machine env`を実行してくれよ
と書かれています

実行してみましょう
envの後に引数(VM名が必要です)

`docker-machine env default`


![スクリーンショット 2015-08-30 10.01.39.png](https://qiita-image-store.s3.amazonaws.com/0/36871/159dc8f7-8320-90ea-9c4f-53ba15151f5d.png "スクリーンショット 2015-08-30 10.01.39.png")


最後に書かれている

`eval "$(docker-machine env default)"`


を実行して


`docker run hello-world`
でDocker Quickstart Terminalで実行した時のように結果が出れば完了です


<h4></h4>
次にNginxを起動してみようと思います
コンテナの検索は
`docker search コンテナ名`
で可能です

ではNginxを探していきましょう

`docker search nginx`

![スクリーンショット 2015-08-30 11.05.30.png](https://qiita-image-store.s3.amazonaws.com/0/36871/dffba947-e85d-8468-f2c6-2182591ef7af.png "スクリーンショット 2015-08-30 11.05.30.png")

この下にも色々続きますが先頭のOFFICIALが付いているものを使います

runしてみましょう
`docker run -d -P --name web nginx`

これで起動すると思うので
以下のコマンドで起動しているか確認します
`docker ps`

![スクリーンショット 2015-08-30 11.25.24.png](https://qiita-image-store.s3.amazonaws.com/0/36871/a492c3ec-5dfa-635c-b1b4-1c0299bfbee3.png "スクリーンショット 2015-08-30 11.25.24.png")

このようになっていたら次にNginxのページにいってみます

ローカルのポートとcontainerのポートを8080:80のように指定していないので
`docker-machine env default`

でDOCKER_HOSTのIPを確認します

僕の場合は「192.168.99.100」
となっていたので
`docker port web`で確認した80番ポートの数字、僕の場合は32781を合わせ

「192.168.99.100:32781」

上記のアドレスをブラウザに入力すると

![スクリーンショット 2015-08-30 11.29.38.png](https://qiita-image-store.s3.amazonaws.com/0/36871/411388b8-6adc-6738-cc66-8dc2ba935423.png "スクリーンショット 2015-08-30 11.29.38.png")

Nginxが起動しているのが分かります



コンテナを終了させたい時は

`docker stop web`

で終了できます

先程は初回だったので`docker run -d -P web nginx`と指定しましたが
次からは
`docker start web`
とすれば起動できます



<h2>今回使ったコマンド(載せてないものも)</h2>

- docker-machine ls - VMの確認
- docker-machine start VM名 - VMの起動
- docker-machine env VM名 - VMの環境確認
- docker-machine ip VM名 - IPアドレス確認
- eval "$(docker-machine env default)" - ローカルとVMを繋げる
- docker build -t ユーザ名/イメージ名 DockerfilePath
- docker push ユーザ名/イメージ名
- docker search コンテナ名 - コンテナを探す
- docker run コンテナ名 - 
- docker start コンテナ名
- docker stop コンテナ名
- docker ps
- docker port コンテナ名
- docker rm コンテナ名
- docker rmi イメージ
- docker-machine stop VM名


こんな感じです
途中から雑になってきましたが一旦上げておきます
今度はMySQLなどを立ち上げて何度も同じ環境が作れることを確かめてみたいと思います
では