コンテナ関連コミュニティの動向 (2017年6月・7月)

気になっているニュースを適当に書き連ねてみた．

- 4月・5月号 http://qiita.com/AkihiroSuda/items/e4785014c6c50496f11b
- 3月号 http://qiita.com/AkihiroSuda/items/746328a8ee59301807b6
- Docker 1.13号 http://qiita.com/AkihiroSuda/items/d762b8cdc1d704f8efdf
- Docker 1.12号 http://qiita.com/AkihiroSuda/items/ba3e118389e0a550c000

## Docker関連
### Docker 17.06 (6/28)
https://blog.docker.com/2017/06/announcing-docker-17-06-community-edition-ce/

Docker 17.03以来，2番目のquarterly release (新スキームでの安定版)．次のquaterly releaseは17.09．

17.05から，あまり大きい変更はないが，Multi-stage Dockerfileをサポートするquarterly releaseとしては初．

また，このバージョンからは，Moby Projectのリポジトリ (https://github.com/moby/moby) ではなく，Docker社のリポジトリ (https://github.com/docker/docker-ce) のソースを用いてビルドされるようになった．

両リポジトリの内容はほぼ同じ．Moby Projectのリポジトリへの変更は，Docker社員が随時Docker社のリポジトリにcherry-pickしてくれる．


### Docker 17.07 (8月になっても未リリース..)
https://github.com/docker/docker-ce/releases/tag/v17.07.0-ce-rc1

- `~/.docker/config.json` にプロキシの設定を書いておくと，`docker build`時や`docker run`時に使われるようになった． https://github.com/docker/cli/pull/93
- `docker ps` 時のコンテナオブジェクトに対するロックが無くなった．劇的に軽くなったように感じられる．https://github.com/moby/moby/pull/31273
- `docker build`時にデーモンに送信されるコンテキストを，2回目以降は差分のみ転送できるようになった． https://github.com/moby/moby/pull/32677
- "Linux containers on Windows" (LCOW) のコードも部分的に入り始めたが，まだ動かない．

## Moby Project関連

※ Dockerの上流となっているcommunity-drivenなプロジェクト． 大まかには，Docker : Moby Project ≒ RHEL : Fedora と考えてよい．

### Moby Core (7/12)
https://forums.mobyproject.org/t/topic-find-a-good-and-non-confusing-home-for-the-remaining-monolith/37/54

4月，`github.com/docker/docker`リポジトリが `github.com/moby/moby` にリネームされたが，近々 更に `github.com/moby/moby-core` にリネームされる予定．
従来の`dockerd`としての"moby" (→Moby Core)と，Mobyコンポーネントを組み合わせるツールとしての"moby" (`github.com/moby/tool`)とが紛らわしいための措置．

`/usr/bin/dockerd`のバイナリも，`/usr/bin/moby-core-server`のような名前になる見込み．
他にも，Dockerfileなど名前に"docker"とつくものは全て，Moby Coreからは順次削除される見込み． https://forums.mobyproject.org/t/topic-find-a-good-and-non-confusing-home-for-the-remaining-monolith/37/66

### BuildKit (6/24)
https://github.com/moby/buildkit

`docker build` を再実装する構想．

- low-levelなフォーマットとして「LLB」が提供される．LLBは人間が直接読み書きするものではない．
- LLBの命令間の依存性は，DAGとして表現される．並行性の抽出などによる高速化が可能となる．
- 従来のDockerfileは，LLBに変換されて実行される．今後，Dockerfile以外の上位言語も出てくるかもしれない?


## OCI関連

### Image Spec & Runtime Spec v1.0発表 (7/19)
https://www.opencontainers.org/announcement/2017/07/19/open-container-initiative-oci-releases-v1-0-of-container-standards
https://blog.docker.com/2017/07/oci-release-of-v1-0-runtime-and-image-format-specifications/

2年かかってようやく，イメージ仕様・ランタイム仕様の標準化がなされた．

今後は，OCI仕様準拠実装の認定などが，OCIの主なミッションとなりそう．https://github.com/opencontainers/certification

イメージ配布プロトコル(Docker Registry HTTP APIがde facto standard)については，今のところOCIのスコープ外であるが，今後OCI入りする可能性もあり．


## containerd関連

Docker・Kubernetesなどで共通で使われる予定の，次世代ランタイム．

![image](https://qiita-image-store.s3.amazonaws.com/0/90542/b77280af-9d1f-7080-8923-e7eaaf0915fd.png)

### alphaステージに到達 (7/20)
https://github.com/containerd/containerd/releases/tag/v1.0.0-alpha1

実装予定の機能はほぼ実装されたが，まだWindows対応などの課題あり．

## Swarmkit関連
### CNI対応のPR (7/6)

https://github.com/docker/swarmkit/pull/2299

libnetwork (CNM)に加え，CNIもSwarmkitで使えるようになる．
今後はDockerでもKubernetesでも，CNIが共通のフレームワークとなっていきそう．

## Kubernetes関連
### Kubernetes 1.7リリース (6/29)
http://blog.kubernetes.io/2017/06/kubernetes-1.7-security-hardening-stateful-application-extensibility-updates.html

StatefulSetがベータになった．

参考: http://qiita.com/tkusumi/items/817cf85917efd24c7a4f

## Azure関連
###  Azure Container Instances (7/26)
https://azure.microsoft.com/en-us/blog/announcing-azure-container-instances/

いちいちVMのインスタンスを立ち上げずに，直接コンテナを起動できるサービス．
Kubernetesでもオーケストレートできる． https://github.com/azure/aci-connector-k8s
ようやくCaaSらしいCaaSが出てきた印象．

### Draft (5/31)
https://azure.microsoft.com/en-us/blog/streamlining-kubernetes-development-with-draft/

Dockerfileやchartをいちいち書かなくても，簡単にサービスをKubernetesにデプロイできるツール

## Oracle関連
### Smith, Crashcard, & Railcar (6/29)
https://blogs.oracle.com/developers/three-new-open-source-container-utilities

コンテナ関連のOSSが3つ同時に発表された．

- Smith: 「microcontainer」をビルドするツール．イメージはread-only，shell無しが基本．軽くてセキュア．(https://blogs.oracle.com/developers/the-microcontainer-manifesto)
- Crashcard: 「microcontainer」用のデバッガ．microcontainer内にshellをインストールすることなく，tcpdump, straceやgdbなどを実行できる．
- Railcar: Rustで書かれたOCIランタイム実装．Rustで書かれているので，GCのオーバヘッドや，[namespace関連の問題](https://blogs.oracle.com/developers/building-a-container-runtime-in-rust)が無い．

### containerd, DockerのSolaris対応

[Docker 1.13でSolarisサポートが入りかけていたが，その後動きがなかった](https://github.com/moby/moby/pull/28056)．

最近，作業が再開された模様．
https://github.com/containerd/containerd/pull/1224