moby project (may 25, 2017, tokyo)
TRANSCRIPT
Copyright©2017 NTT Corp. All Rights Reserved.
NTT ソフトウェアイノベーションセンタ須田 瑛大 (Akihiro Suda)
DockerCon 2017 Recap Meetup2017.5.25
2Copyright©2017 NTT Corp. All Rights Reserved.
•須田 瑛大 (Akihiro Suda)
• GitHub: @AkihiroSuda
• Twitter: @_AkihiroSuda_
• NTT ソフトウェアイノベーションセンタ
• Docker コアメンテナ (2016.11~2017.04)
• Moby コアメンテナ (2017.04~)
• OSS「プロジェクト」としてのDockerはMobyに名前が変わった
•最近はcontainerdやOCI関連でも活動
自己紹介
3Copyright©2017 NTT Corp. All Rights Reserved.
•Mobyとは何か
•Mobyのインパクト
•Buildkit構想
•ありがちな誤解
•デモ
お話しする内容
だいたい4/27のmeetupでお話した内容ですが..
NEW
4Copyright©2017 NTT Corp. All Rights Reserved.
Mobyとは何か
"the most important project at Dockersince the launch of Docker itself"
5Copyright©2017 NTT Corp. All Rights Reserved.
Moby is a project which provides a “Lego set” of dozens of components
(https://mobyproject.org)
Mobyとは何か
画像: Docker本社(San Francisco)にて撮影 (須田・Kunal)
6Copyright©2017 NTT Corp. All Rights Reserved.
• Docker daemonが複数の「Lego」的なMobyコンポーネントに(今後徐々に)分割される
• Mobyコンポーネントを自由に組み合わせて,独自のプロジェクトを開発できる
• Docker製品も,Mobyコンポーネントから構成される
Mobyとは何か
containerd + runc
Moby
"swarmd"
"layerd"
REST API
任意..
Docker CLI
Docker(for Mac, Win, AWS...)
3rdパーティプロジェクト
7Copyright©2017 NTT Corp. All Rights Reserved.
「Moby」という単語が色々な意味で使われていて,わかりにくい
• Docker daemonを構成する「Lego」ブロック群
•「Lego」を組み合わせるツール (コマンド名moby)• Dockerと全然関係ないプロジェクトを構築することもできる
• LinuxKitのコードネーム• DockerConにて発表された,コンテナ専用Linux distro
• Docker for Mac/Win/AWS..のOS (Moby Linux)
• Dockerの鯨 (Moby Dock)
Mobyとは何か
8Copyright©2017 NTT Corp. All Rights Reserved.
MobyでDockerをビルドする
kernel:image: "linuxkit/kernel:4.9.x"
onboot:- name: formatimage: "linuxkit/format"
- name: mountimage: "linuxkit/mount"
services:- name: dhcpcdimage: "linuxkit/dhcpcd"
- name: ntpdimage: "linuxkit/openntpd"
- name: dockerimage: "linuxkit/docker-ce"
outputs:- format: kernel+initrd
$ moby build docker.yml..Create outputs:
docker-bzImagedocker-initrd.img
$ linuxkit run qemu docker..Welcome to LinuxKit/#
docker サービスは,今後徐々に"swarmd"など細かいコンポーネントに分割されていく見込み
(任意のコンポーネントだけ選んでビルドできる)
Docker自体も含めて,全てのパッケージがcontainerdコンテナ
9Copyright©2017 NTT Corp. All Rights Reserved.
Docker以外のプロジェクトにも使える
https://www.slideshare.net/Docker/dockercon-2017-general-session-day-1-solomon-hykes-75362520
mobyを使って,redisコンテナ入りのVMを作成(redisコンテナはdocker抜きで直接containerd上で動作)
10Copyright©2017 NTT Corp. All Rights Reserved.
Docker以外のプロジェクトにも使える
https://www.slideshare.net/Docker/dockercon-2017-general-session-day-1-solomon-hykes-75362520
mobyを使って,k8sコンテナ入りのVMを作成
11Copyright©2017 NTT Corp. All Rights Reserved.
•Mobyとは何か
•Mobyのインパクト
•Buildkit構想
•ありがちな誤解
•デモ
お話しする内容
12Copyright©2017 NTT Corp. All Rights Reserved.
•製品としてのDockerの名前がMobyに変わったわけではない
• GitHubのdockerリポジトリは,確かにmobyになった
• Dockerの実行コマンドは,従来通り"docker"
• "moby"コマンドは全く別の用途 (コンポーネントを組み合わせるための"assembler")
• "moby"コマンドは開発者向けツールであり,ユーザが実行するものではない
• Dockerfileも,従来通り"Dockerfile"
• "Mobyfile"にはならない
ユーザへの直接的な影響は(ほぼ)無い
13Copyright©2017 NTT Corp. All Rights Reserved.
ただし,APIはRESTからgRPCに変わる見込み(REST互換レイヤも提供される)
今後追加される新機能は,新API経由で利用するのが良さそう
詳細は未だ議論中 https://forums.mobyproject.org /t/proposal-engine-v1-rest-api-transition/49
ユーザへの直接的な影響は(ほぼ)無い
クライアント
dockerd
REST
gRPC デマルチプレクサ
containerd swarmd ...d
クライアント
互換レイヤ
REST
gRPC
gRPC
gRPC gRPC gRPC
旧 新
移行
14Copyright©2017 NTT Corp. All Rights Reserved.
•「product」と「project」との境界が明確になった
• Moby部分については,ガバナンスの透明性向上が期待される
•一方,CLIについては,Docker社が単独で主導することとなった
• ソースコードは従来通りApache License 2.0で公開(https://github.com/docker/cli)
Mobyのインパクト
開発主体 透明性 商用導入向き 例
「product」 単独企業 × ○DockerRHEL
「project」 コミュニティ ○ ×MobyFedora
15Copyright©2017 NTT Corp. All Rights Reserved.
•Mobyとは何か
•Mobyのインパクト
•Buildkit構想
•ありがちな誤解
•デモ
お話しする内容
16Copyright©2017 NTT Corp. All Rights Reserved.
•Docker daemonを「Lego」ブロックに分割する作業は,まだ始まっていない
•docker build 相当部分が,比較的早期に分割されそう
⇒Buildkit構想 (DockerCon後に発表)
•まだ構想段階https://github.com/moby/moby/issues/32925
• 注: https://buildkit.io/ は関係ない
Buildkit構想
17Copyright©2017 NTT Corp. All Rights Reserved.
• low-levelなフォーマットとして「LLB」が提供される• 人間が直接触るものではない (LLVM IRと同じ)
• LLBの命令間の依存性は,DAG(有向非巡回グラフ)として表現される⇒並行性やキャッシュを考慮したスケジューリングが可能
• 従来のDockerfileは,LLBに変換されて実行される
• 今後,Dockerfile以外の上位言語も出てくるかもしれない?
Buildkit構想
Dockerfile
3rd パーティ新言語
LLB DAG変換
最終イメージ
依存物(並行ビルド可)
18Copyright©2017 NTT Corp. All Rights Reserved.
今のところDockerfile一強だが..
低位ランタイム
rktrunc• いずれもOCI ランタイム 仕様に準拠.CoreOS社は独自のappc仕様を推進していたが,現在はOCIに合流.• rktはruncよりやや上位のレイヤも兼ねる (イメージ関連など)
中位ランタイム
containerd
CRI-containerdCRI-O rktlet
• いずれもk8sのCRI(Container Runtime Interface)に準拠.ただしcontainerd自体はCRI非対応で,CRI-containerdを別途要する.• いずれもOCI (Open Containers Initiative) イメージ仕様に準拠.
高位ランタイム・オーケストレータ
Docker(Moby)
Kubernetes
イメージ記述言語
Dockerfile
• CoreOS社が推進するacbuildなどの競合もいくつかあるが,現時点では有力とは言いがたい
ほぼ空白 (今後変化する?)
19Copyright©2017 NTT Corp. All Rights Reserved.
•Mobyとは何か
•Mobyのインパクト
•Buildkit構想
•ありがちな誤解
•デモ
お話しする内容
20Copyright©2017 NTT Corp. All Rights Reserved.
×Dockerの製品名がMobyになった
×docker コマンドの代わりに moby コマンドを使う世
界が来る
×Dockerfileの代わりにMobyfileを書く世界が来る
×docker-compose.ymlの代わりにMobyのYAMLを書
く世界が来る
×Dockerはlinuxkitでしか動かなくなった
×Dockerはクローズドソースになった
ありがちな誤解
21Copyright©2017 NTT Corp. All Rights Reserved.
•Mobyとは何か
•Mobyのインパクト
•Buildkit構想
•ありがちな誤解
•デモ
お話しする内容
22Copyright©2017 NTT Corp. All Rights Reserved.
※今後のバージョンで,YAMLやコマンドの仕様は変更される可能性が高い
デモ
$ moby build docker.yml..Create outputs:
docker-kerneldocker-initrd.img
$ linuxkit run docker..Welcome to LinuxKit/# runc list/# runc exec docker docker version
23Copyright©2017 NTT Corp. All Rights Reserved.
•Dockerは今後,Legoブロックの如く,Mobyコンポーネントを組み合わせてビルドされる
•GitHubのdockerリポジトリはmobyリポジトリになったが,製品名やコマンド名が変わったわけではない
•DockerがRHELだとすると,MobyはFedoraのようなもの
まとめ