Docker Toolbox を使って macOS上に Docker 環境を構築する

# 追記(2018/10/25)

この記事で紹介している Docker Toolbox ですが、Legacy desktop solution となっています。Docker for Mac の利用を推奨します。
https://docs.docker.com/toolbox/

下記の内容は古いですが、一応残しておきます。

# はじめに
Docker Toolbox を使って macOS 上に Docker 環境を構築する手順を紹介します。とはいえ、公式ページがよくまとまっているため、正確な情報はこちらをご参照ください。

[Install Docker Toolbox on macOS] (https://docs.docker.com/toolbox/toolbox_install_mac/)

# Docker Toolbox で入手できるもの。できること。

まずは Docker Toolbox とは何？　というところから。以下のコンポーネントから構成されています。

| 入手できるもの | できること |
|:-----------------|:------------------|
|Docker CLI client|コンテナに関する各種操作（コンテナ作成、起動、ログインなど）|
|Docker Machine|Docker Engine が稼働する VM を作成したり、管理するツール|
|Docker Compose|複数コンテナを使用するDockerアプリを定義、実行するツール|
|Kitematic|GUI で docker を使用するためのツール|
|Docker QuickStart shell| macOS上のターミナルから VM 上の Docker Engine を操作するための環境整備|
|Oracle VM VirtualBox|VM作成用|

公式ページには、これらコンポーネントについて、以下の説明が(英語で)されています。

> どうして VM を立てるかというと、Docker Engine のデーモンが Linux の特定カーネルの機能を使うため。よって、macOS からネイティブに Docker Engine を起動できず、代わりに docker-machine コマンドを使って小さな VM を作成します。この VM を Docker Engine として使用します。

# Docker Toolbox のインストール

[公式URL] (https://docs.docker.com/toolbox/toolbox_install_mac/) からインストーラを入手します。「DockerToolbox.pkg」がインストーラです。インストーラを起動し、画面の指示に従って進めていきます。

# Docker 

Launchpad などから「Docker Quick Start」アイコンをクリックします。

するとターミナルが起動し、Docker を使うための環境を整えてくれます。

* Docker Engine を動作させる VM を作成
* この VM 上の Docker Engine を使用するように、ターミナルの環境変数をセット

しばらく待つと、次の画面が表示されます。これで、Docker を使用できるようになりました！

```shell-session





                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/


docker is configured to use the default machine with IP 192.168.99.100
For help getting started, check out the docs at https://docs.docker.com
```

### Hello World

お試し実行用に Hello World コンテナを起動します。

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

# Docker QuickStart Shell が何をやってくれているか

「default」という名の VM を作成してくれます。Docker Engine が動作する VM です。

```shell-session

$ docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
default   *        virtualbox   Running   tcp://192.168.99.100:2376           v17.12.0-ce 
```

### VM の正体

VM 「default」にログインしてみましょう。

```shell-session

$ docker-machine ssh default
                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 17.12.0-ce, build HEAD : 378b049 - Wed Dec 27 23:39:20 UTC 2017
Docker version 17.12.0-ce, build c97c6d6
```

boo2docker とは、Docker コンテナの起動に特化した軽量 Linux Distribution の事です。
[参考: boot2docker] (http://boot2docker.io/)

OS の情報は下記の通りでした。

```shell-session
$ cat /etc/os-release 
NAME=Boot2Docker
VERSION=17.12.0-ce
ID=boot2docker
ID_LIKE=tcl
VERSION_ID=17.12.0-ce
PRETTY_NAME="Boot2Docker 17.12.0-ce (TCL 8.2.1); HEAD : 378b049 - Wed Dec 27 23:39:20 UTC 2017"
ANSI_COLOR="1;34"
HOME_URL="http://boot2docker.io"
SUPPORT_URL="https://github.com/boot2docker/boot2docker"
BUG_REPORT_URL="https://github.com/boot2docker/boot2docker/issues"
```


プロセスを確認すると以下のように tcp 2376/tcp ポートで待ち受けるデーモンが起動しています。TLS が有効になっています。

```
root      3043     1  0 01:42 ?        Sl     0:04 /usr/local/bin/dockerd -D ¥
    -g /var/lib/docker -H unix:// -H tcp://0.0.0.0:2376 ¥
    --label provider=virtualbox ¥
    --tlsverify --tlscacert=/var/lib/boot2docker/ca.pem ¥
    --tlscert=/var/lib/boot2docker/server.pem ¥
    --tlskey=/var/lib/boot2docker/server-key.pem -s aufs
```

[参考: dockerd] (https://docs.docker.com/engine/reference/commandline/dockerd/)

### macOS ホスト上の環境変数

macOS ホスト上のターミナルでは、下記の通り環境変数がセットされています。

```shell
$ docker-machine env default
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/Users/user/.docker/machine/machines/default"
export DOCKER_MACHINE_NAME="default"
# Run this command to configure your shell: 
# eval $(docker-machine env default)
```

この変数がセットされていることで、VM 上の dockerd に接続して、docker に関する諸々の操作ができるようになっているわけです。



# 参考URL
[公式: Install Docker Toolbox on macOS] (https://docs.docker.com/toolbox/toolbox_install_mac)
[Mac OS X へのDockerのインストール方法] (https://qiita.com/hshimo/items/e24b1fbfbf775ec7c941)