Boot2Docker - Installing on Windows 7

# 概要

Windows7にBoot2Dockerをインストールします。

**環境**

* Windows7 (64bit)
* Virtualbox 4.3.30
* Git for Windows (MSysGit) 1.9.5
* Boot2Docker 1.7.1

## インストール

Boot2DockerはVirtualBox、Git for Windowsなどに依存していますので先にインストールを行います。
(Boot2Dockerインストール時に同時にインストールすることも可能です。)


### Virtualbox

[VirtualBox] (https://www.virtualbox.org/)からWindows用のインストーラーをダウンロードします。
ダウンロードしたインストーラーは`VirtualBox-4.3.30-101610-Win.exe`でした。

インストーラーの指示に従ってVirtualboxをインストールします。


### Git for Windows

[Git for Windows] (https://msysgit.github.io/)からWindows用のインストーラーをダウンロードします。
ダウンロードしたインストーラーは`Git-1.9.5-preview20150319.exe`でした。

インストーラーの指示に従ってGit for Windowsをインストールします。


### Boot2Docker

[Docker] (https://www.docker.com/)からWindows用のインストーラーをダウンロードします。
ダウンロードしたインストーラーは`docker-install.exe`でした。

インストーラーの指示に従ってBoot2Dockerをインストールします。
インストールが終わるとデスクトップに`Boot2Docker Start`というアイコンが出来ますが、引き続きアップグレードを行いますのでクリックはしません。（クリックするとvmが作成されてしまいます。)

インストールが終了するとboot2dockerのインストールディレクトリに下記の実行ファイルが用意されます。
boot2dockerはこの2つ実行ファイルを使ってvmやコンテナを操作します。

* `boot2docker.exe`: vmを操作する実行ファイル
* `docker.exe`: dockerイメージやコンテナを操作する実行ファイル


#### Boot2Dockerのアップグレード

管理者モードでコマンドプロンプトを起動し、カレントディレクトリをBoot2Dockerのインストールディレクトリへ移します。

インストールディレクトリへ移動して

```bat
> cd C:\Program Files\Boot2Docker for Windows
```

upgradeを行います

```bat
C:\Program Files\Boot2Docker for Windows> boot2docker.exe upgrade
```

アップグレードが終了したら`Boot2Docker Start`アイコンをクリックしてVirtualbox上に`boot2docker-vm`を作成します。



#### インストール後の確認

上記のアップグレードに続いてインストール後の確認を行います。
下記のコマンドを実行してstatusが`running`となっていることを確認します。(Virtualboxを立ち上げて`boot2docker-vm`が実行中か確認する方法でも構いません)

vmの実行ステータスを確認

```bash
$ boot2docker.exe status
running
```

バージョンを確認

```bash
$ boot2docer.exe version
Boot2Docker-cli version: v1.7.1
Git commit: 8fdc6f5
```

IPを確認

```bash
$ boot2docker.exe ip
192.168.59.103
```

## boot2docker-vmの操作

`boot2docker-vm`とはVirtualbox上に作成された仮想マシンです。
`boot2docker-vm`にログインして下記のコマンドを実行すると`Core Linux`というOSであることがわかります。

```bash
docker@boot2docker:~$ cat /etc/issue
Core Linux
```

### boot2dockerコマンド

`boot2docker.exe`コマンドを使用して`boot2docker-vm`を操作します。

#### boot2docker-vmの操作

`boot2docker.exe`コマンドで行える操作の一部はVirtualboxでも行えます。

コマンドの使用方法

```text:Usage
boot2docker.exe [<options>] <command> [<args>]
```

コマンドの種類

```text
Commands:
   init                Create a new Boot2Docker VM.
   up|start|boot       Start VM from any states.
   ssh [ssh-command]   Login to VM via SSH.
   save|suspend        Suspend VM and save state to disk.
   down|stop|halt      Gracefully shutdown the VM.
   restart             Gracefully reboot the VM.
   poweroff            Forcefully power off the VM (may corrupt disk image).
   reset               Forcefully power cycle the VM (may corrupt disk image).
   delete|destroy      Delete Boot2Docker VM and its disk image.
   config|cfg          Show selected profile file settings.
   info                Display detailed information of VM.
   ip                  Display the IP address of the VM's Host-only network.
   shellinit           Display the shell commands to set up the Docker client.
   status              Display current state of VM.
   download            Download Boot2Docker ISO image.
   upgrade             Upgrade the Boot2Docker ISO image (restart if running).
   version             Display version information.
```

vmの起動

```bash
$ boot2docker.exe boot
```

vmの停止

```bash
$ boot2docker.exe halt
```

#### boot2docker-vmへsshでログインする

`boot2docker.exe`コマンドのsshで`boot2docker-vm`へログインします。

```bash
$ boot2docker.exe ssh

...省略...

_                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.7.1, build master : c202798 - Wed Jul 15 00:16:02 UTC 2015

Docker version 1.7.1, build 786b29d
docker@boot2docker:~$
```

続けて`hello-world`イメージを実行してインストールが正常に行われたか確認します。
正常に実行されると下記のような表示があります。

```bash
docker@boot2docker:~$ docker run hello-world
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

For more examples and ideas, visit:
 http://docs.docker.com/userguide/
```

* `hello-world`の情報は、[hello-World Repository | Docker Hub Registry] (https://registry.hub.docker.com/_/hello-world/)にあります。


最後に不要になったコンテナとイメージを削除します。

コンテナIDを確認してrmで削除します。

```bash
docker@boot2docker:~$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED         STATUS                      PORTS       NAMES
e1817ab9b9f7        hello-world         "/hello"            2 minutes ago   Exited (0) 2 minutes ago                sleepy_bardeen

docker@boot2docker:~$ docker rm e1817ab9b9f7
e1817ab9b9f7
```

イメージIDを確認してrmで削除します。

```bash
docker@boot2docker:~$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED         VIRTUAL SIZE
hello-world         latest              91c95931e552        3 months ago    910 B

docker@boot2docker:~$ docker rm 91c95931e552
Untagged: hello-world:latest
Deleted: 91c95931e552b11604fea91c2f537284149ec32fff0f700a4769cfd31d7696ae
Deleted: a8219747be10611d65b7c693f48e7222c0bf54b5df8467d3f99003611afa1fd8
```

#### Windowsからputtyを使ってsshでログインする

`boot2docker.exe`コマンドの他に例えばputtyを使ってログインすることも可能です。
puttyを立ち上げ"Host Name (or IP address)"の欄に、上記で確認したvmのIPアドレスを入力します。

* ユーザー: docker
* パスワード: tcuser

```bash
login as: docker
docker@192.168.59.103's password: tcuser
                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.7.1, build master : c202798 - Wed Jul 15 00:16:02 UTC 2015
Docker version 1.7.1, build 786b29d
docker@boot2docker:~$
```

### dockerコマンド

`docker.exe`コマンドでdockerイメージのダウンロードや実行を行うことができます。
上記の`hello-world`イメージの実行例では`boot2docker-vm`にログインしてからdockerコマンドを使用しましたが、vmにログインしなくても、直接`docker.exe`コマンドを使って同様の操作を行うことができます。

コマンドの使用方法

```text:Usage
docker.exe [OPTIONS] COMMAND [arg...]
```

```bash
$ docker.exe run -it ubuntu bash
root@abf3d4059b98:/#
```