Docker 1.8 リリースのまとめ

# 概要
Docker 1.8 と関連ツール類の最新バージョンがリリースされたのでまとめてみます。対象は以下のものです。

* Docker Engine 1.8
* Docker Toolbx
* Docker Registry 2.1
* オーケストレーションツール(Compose, Swarm, Machine)


# Docker Engine 1.8
Docker イメージに対するセキュリティ機能の Docker Content Trust(DCT) が目玉で、その他ボリューム周りやログ周りなどに更新が入っている。なお、1.8 にはバグがあり、[すぐに1.8.1 がリリース](https://github.com/docker/docker/releases/tag/v1.8.1)されている。

## Docker Content Trust（DCT）
Docker イメージを「なりすまし」と「改ざん」から保護するセキュリティ機能で、以下から構成される。

* Docker イメージへ発行者のデジタル署名を付ける
* イメージの利用時(pull など)に「発行者」と「イメージが改ざんされていないこと」を検証する

DCT はそれ用の新しいコマンドが追加されたわけではなく、Docker クライアントの push, build, create, pull, run コマンドに対して自動で機能する。

* push, build - 自動で鍵の生成やイメージが署名が行われる
* create, pull, run - 自動でイメージの署名が検証される

DCT はデフォルトでは無効になっており、環境変数 DOCKER_CONTENT_TRUST をセットすると使えるようになるようだが、自分の環境(CentOS7.1 + Docker 1.8.1) ではまだ動作させることができていない。

```bash
# DCT を有効化する
export DOCKER_CONTENT_TRUST=1

# Official なイメージを Pull してみる
# エラーになって pull できない(本来なら署名の検証が行われて、問題無ければ pull 出来るはず)
$ docker pull centos:latest
no trust data available for remote repository

# 自分で作ったイメージを push してみる
# エラーになって push できない(本来なら、署名を付けるステップに進むはず)
$ docker push arturias/trusttest:latest
(中略)
Signing and pushing trust metadata
ERRO[0007] Could not publish Repository: invalid character '<' looking for beginning of value
no trust data available for remote repository
```

なお、DCT は Notary というコンテンツの発行や検証のためのユーティリティを使って開発されており、さらに Notary は [The Update Framework (TUF)](http://theupdateframework.com/) を利用して作られている。

## ボリュームプラグインの安定板
Docker のボリュームとして、3rd パーティ製のストレージシステムを使用できる機能。Docker Engine 1.7 で Experimental として導入されたが 1.8 で安定板になった。Blockbridge, Ceph, ClusterHQ, EMC, Portworx 用のプラグインが利用可能。

## Logging Drivers のプラグインの追加
Docker Engine 1.6 で導入されたログのプラグイン機構(Logging Driver)では、コンテナのログを syslogd などに転送できるようになったが、Docker Engine 1.8 でプラグインが追加されて GELF, Fluentd にログを転送できるようになった。


## その他
### ホストからコンテナ内へのファイルコピー
以前のバージョンでは、docker cp で「コンテナからホスト」へファイルコピーはできたが、「ホストからコンテナ」へファイルがコピーできるようになった。

```bash
docker cp ./test.txt ContainerName:/tmp/test.txt
```

### Docker デーモンの起動方法
以前は Docker デーモンを "docker -d" というコマンドラインで起動していたが、"docker daemon" で起動するようになった。これにより、docker コマンドのオプションが、クライアント用なのかデーモン用なのか分かりやすくなった。

### docker ps コマンドの出力のカスタマイズ
docker ps コマンドを出力を --format でカスタマイズできるようになった。以下は、「コンテナID、イメージ名、ポート番号」を出力する例：

```bash
$ docker ps --format "{{.ID}} : {{.Image}} : {{.Ports}}"
7e7c64c66a13 : mongo : 27017/tcp
7bc088b5b664 : nginx : 80/tcp, 443/tcp
````

### Docker クライアントの設定
Docker クライアントの設定ファイル類が ~/.docker に置かれるようになった。DCTで使われるキーもこの場所に置かれる。

# Docker Toolbox
Mac や Windows 上で簡単に Docker 環境を構築するためのツールで、今まで使われていた Boot2Docker を置き換えるもの。

次のコンポーネントがインストールされて、すぐに Docker が使えるように設定される。
* Docker クライアント
* Docker Machine
* Docker Compose (Mac の場合のみ)
* Docker Kitematic
* VirtualBox

以下、Windows 8.1 に Docker Toolbox をインストールしてみた際の画像です。


【インストーラー】
![ToolBox01.PNG](https://qiita-image-store.s3.amazonaws.com/0/79316/19b01a46-22ab-91dd-899b-3f1dd9677f66.png)

【インストーラー：コンポーネントの設定】
![ToolBox02.PNG](https://qiita-image-store.s3.amazonaws.com/0/79316/916ded22-6d5d-ec86-cd87-6a97d8497f24.png)

【インストール後にデスクトップに作成されるアイコン】
![ToolBox03.PNG](https://qiita-image-store.s3.amazonaws.com/0/79316/577a9096-228e-dfb5-6166-caf465b8f7d4.png)

【Docker Quickstart Terminal を起動したところ】
![ToolBox04.PNG](https://qiita-image-store.s3.amazonaws.com/0/79316/f99b2758-f7e5-281f-5aa5-f7842f753137.png)

【Kitematic を起動したところ】
![ToolBox05.PNG](https://qiita-image-store.s3.amazonaws.com/0/79316/f8b6b506-7794-6cce-7324-c4fa2f868fbe.png)

【Kitematic からコンテナの起動が可能】
![ToolBox06.PNG](https://qiita-image-store.s3.amazonaws.com/0/79316/15e9429d-18b3-91ac-7481-f186ebed2842.png)



# Docker Registry 2.1
イメージの pull の高速化の他、いくつかの新機能が追加されている。

* API 経由でのリポジトリの列挙
* Docker Registry のイメージ保存場所として今までは AWS S3 と Azure が使えたが、今回 OpenStack Swift、Ceph Rados、Aliyun OSS が追加された。

# オーケストレーションツール(Compose, Swarm, Machine)

* Compose 1.4  
  コンテナの停止・開始の高速化、container_name オプションによるコンテナ名の指定など。
* Swarm 0.4   
  ビルトインのスケジューラの改善(イメージの pull に失敗したときに、そのイメージを持っているホストにコンテナを配備する)、Mesos との統合など。
* Machine 0.4  
  Docker Engine が使用する HTTP プロキシの設定をサポート、など。