Dockerだけではない
コンテナのはなし
2017.07.05 @ Adtech Developer Conferenece
Presented By Katsunori Kanda(@potix2)
⾃⼰紹介
神⽥勝規(かんだかつのり)@potix2
AI Studio Devグループ 責任者
OS/分散システムが専⾨
⾃律分散ゼミ
この話のきっかけ
kubernetes/cri-o
kubernetes/cri-o
• オーケストレーションツール全盛
と⾔われている状況で何故コンテ
ナランタイムに関わる新規プロジェ
クトを⽴ち上げたのか?
• OCIとコンテナ標準についてわ
かっていないとこのプロジェクト
の背景がわからない
コンテナ仮想化とその歴史
仮想化とは?
Hardware
Host OS
Hypervisor
Guest OS
Virtual Machine
Application
Hardware
Hypervisor
Guest OS
Virtual Machine
Application
Type1 Type2
Bin/Libs Bin/Libs
Hardware
Host OS
Bins/Libs
Application
Container Runtime
サーバー仮想化 コンテナ仮想化
Host OSの機能を使った隔離
(Linux: cgroups, capabilities, namespaces, etc)
コンテナ標準に関わる出来事
2013 2014 2015 2016
Docker/CoreOS誕⽣ OCI設⽴
コンテナ標準策定
Docker1.0リリース
Appc発表
2017
docker swarmの統合
コンテナ標準に関わる出来事
2013 2014 2015 2016
Docker/CoreOS誕⽣ OCI設⽴
コンテナ標準策定
Docker1.0リリース
Appc発表
2017
docker swarmの統合
Local
Docker Registry
Docker
• 前⾝はdotCloud
• 2013年にリリース
• イメージ構築ツール⼀式
• コンテナ実⾏ランタイム
Image
Dockerfile
build
Remote
Docker
Registry
push
pull
Image
container
run
CoreOS
• セキュリティとコンテナを中⼼としたテックカンパニー
• OSS: etcd, ContainerLinux, rkt(Rocket), flannel
• Commercial Products: Quay, Tectonic(kubernetes)
コンテナ標準に関わる出来事
2013 2014 2015 2016
Docker/CoreOS誕⽣ OCI設⽴
コンテナ標準策定
Docker1.0リリース
Appc発表
2017
docker swarmの統合
App Container Specの登場
• CoreOSが中⼼となって作成されたオープンな仕様(deprecated)
• App Container Image Format(ACI)
• App Container Executor(ACE)
• App Container Image Discovery
• https://github.com/appc/spec
• Linux: Rocket(rkt), FreeBSD: Jetpackなどいくつか実装がある
•Docker Inc.は不参加
Appc vs Docker
コンテナ仕様分裂の危機
コンテナ標準に関わる出来事
2013 2014 2015 2016
Docker/CoreOS誕⽣ OCI設⽴
コンテナ標準策定
Docker1.0リリース
Appc発表
2017
docker swarmの統合
Open Container Intiative設⽴
• 2015年に設⽴された
• Linux Foundationが管理
• コンテナの仕様をオープンに保つことを⽬的としている
• メンバー: Docker, CoreOS, Amazon, Google, Red Hat, IBM …
コンテナ標準に関わる出来事
2013 2014 2015 2016
Docker/CoreOS誕⽣ OCI設⽴
コンテナ標準策定
Docker1.0リリース
Appc発表
2017
docker swarmの統合
OCI コンテナ標準
• 現在、2つの仕様が存在する
• OCI Image Format Specification(最新版: v1.0.0-rc6)
• OCI Runtime Specification(最新版: v1.0.0-rc5)
• https://github.com/opencontainers
runtime-spec
• 仕様に含まれるもの
• 実⾏環境の設定 (process, mountsなど)
• コンテナのライフサイクル: create, start, kill, deleteなど
• 対象プラットフォーム
• Linux/Solaris/Window
• 参照実装として、runCがある
image-spec
• 策定が始まるのがruntime-specより遅かった
• OCI Imageの仕様
• manifest, image index, filesystem layouts, configurationが含まれ
る
• コンテナの構築から実⾏の準備までをカバーしている
• ただし、コンテナの配布⽅法に関しては仕様に含まれていない
docker imageの中⾝
$ docker pull busybox:latest
$ docker save busybox:latest | tar t
4669b4a8a33679a912d3ae167e12c0aaf5deafdaf8962c66d37b990782f5f990/

4669b4a8a33679a912d3ae167e12c0aaf5deafdaf8962c66d37b990782f5f990/VERSION

4669b4a8a33679a912d3ae167e12c0aaf5deafdaf8962c66d37b990782f5f990/json

4669b4a8a33679a912d3ae167e12c0aaf5deafdaf8962c66d37b990782f5f990/layer.tar

c30178c5239f2937c21c261b0365efcda25be4921ccb95acd63beeeb78786f27.json

manifest.json

repositories

(注意)2017.07.05時点で、docker saveはOCI Image Specで出力できないが、
https://github.com/moby/moby/pull/33355 などで実装は進んでいる
AppcとOCI Specの⽐較
App Container Image Format(ACI)
App Container Exector(ACE)
App Container Image Discovery
OCI Image Format Specification
OCI Runtime Specification
???
appc OCI
OCIのコンテナ仕様では、
コンテナ配布に関する内容が含まれていない
2016年の重要な出来事
Docker SwarmとDockerの統合
• 2016.06 Docker公式ブログ
• Docker 1.12にオーケストレーション機能
を統合
https://blog.docker.com/2016/06/docker-1-12-built-in-orchestration/
オーケストレーションの時代へ
Docker Swarm
vs
Kubernetes
マサカリを恐れず言うと・・・
オーケストレーションとは?
• 複数ホストの設定、構築、配備を⾃動化すること(明確な定義はなさそう)
• ちょっと前までは、このあたりのツールを指すことが多かった
• Chef, Puppet, Ansible, Fabric, Capistrano
• いまは、コンテナオーケストレーションという意味で使われるケースが増え
ている。このあたりのシステム。
• Kubernetes, Docker Swarm, Amazon ECS, DC/OS(Mesos)
Kubernetes
• コンテナプラットフォーム
• Googleが中⼼となって開発
• GKEなどいくつかのマネージ
ドサービスがある
Master
Node
Kubelet
Pod
Pod
kubectl
Kubernetesとコンテナランタイム
• Docker以外のコンテナランタイムもサポートしている
• rkt: simple, secure
• hyper: hypervisor-based
• 複数ランタイムのサポートによって⽤途や環境への柔軟性が⾼まる
• と、同時にDockerへの依存を減らしたい(ランタイムがDocker⼀択と
いう状況を避けたい)
複数コンテナランタイムサポートの課題と解決⽅法
コンテナランタイムはkubeletと深く結びついている
コンテナランタイム作成者はkubeletの内部構造を理解する必要がある
コンテナランタイムとKubeletの間に共通I/Fを設けて依存度を下げる
Container Runtime Interface (CRI)
解決方法
課題
POD
CRIのアーキテクチャ
kubelet CRI
container
runtime
container
runtime
container
container
container
POD
container
container
container
Kubernetes
Master
Worker NodeMaster Node
gRPC
gRPC
DriverDriver
CRIの現状
• 2016.12.09の公式ブログから
• early stage
• CRIとコンテナランタイムのインテグレー
ションプロジェクトが始まっている
• cri-o (for OCI runtime)
• rktlet (for rkt)
• frakti (for hyper)
• docker CRI shim
http://blog.kubernetes.io/2016/12/container-runtime-interface-cri-in-kubernetes.html
そういえば、ECSはどうなの?
ECSはどうなっているのか?
• amazon-ecs-agentというリポジトリが公開されている
• Docker Clientに依存している
今後どうなっていくのか?
• Dockerへの依存度を低くしようという動きが加速する?
• Dockerがカバーしている範囲が広すぎる(過度にDocker依存)
• イメージビルドツールなど
• Image Distributionの問題
• いつ、どこからイメージを取得するのか?

Dockerだけではないコンテナのはなし