SlideShare a Scribd company logo
VMwareユーザのための 
docker入門 
工藤真臣 
1
免責事項 
• 書いてあることが全部正しいこととは限りません 
• 間違ってても石を投げないでください 
2
dockerって? 
• LinuxコンテナやUnionMountで実現するコンテナ型仮想化をいまどきの 
Git風に実装された管理ツール 
3 
カーネル空間 
プ 
ロ 
セ 
ス 
プ 
ロ 
セ 
ス 
プ 
ロ 
セ 
ス 
カーネル空間 
プ 
ロ 
セ 
ス 
プ 
ロ 
セ 
ス 
プ 
ロ 
セ 
ス 
プ 
ロ 
セ 
ス 
非仮想化環境仮想コンテナ環境 
カーネル空間カーネル空間 
カーネル空間 
プ 
ロ 
セ 
ス 
プ 
ロ 
セ 
ス 
プ 
ロ 
セ 
ス 
プ 
ロ 
セ 
ス 
仮想マシン環境 
Hypervisor
dockerのアーキテクチャ 
• dockerはあくまでも管理ツール 
• Linuxコンテナ自体が複数の技術から構成されている 
• 各コンポーネントごとに抽象化されているため、 
様々な技術の組み合わせが可能 
• 特にLinuxコンテナを便利に使えるように、コンテナのイメージの管理に 
色々な配慮がされている 
• コンテナイメージを公開するためのレジストリが公開されていたり、 
イメージを高速展開するための差分ディスク作成等が特徴 
4
便利なの? 
• 公開されているレジストリからCentOSのテンプレートの最新版を取得 
# docker pull centos:latest 
• 取得済みイメージからコンテナを実行 
# docker run centos:latest 
• 稼動中のコンテナからイメージを作成 
# docker commit コンテナ名イメージ保存先 
• 定義ファイルからコンテナを作成 
# docker build コンテナ名イメージ保存先 
• 作成したイメージをレジストリに公開する 
# docker push コンテナ名 
5
定義ファイルからイメージを作成 
パラメータ用途 
FROM テンプレートになるDockerイメージの指定 
MAINTAINER 公開者の情報 
RUN コマンドの実行 
ADD ファイルやディレクトリを追加 
CMD コンテナーの実行コマンド1 
ENTRYPOINT コンテナーの実行コマンド2 
WORKDIR 作業ディレクトリの指定 
ENV 環境変数の設定 
USER 実行ユーザの指定 
EXPOSE ネットワークポートの公開 
VOLUME 外部ボリュームのマウント 
6
イメージがあれば 
展開,ログオンまで 
数秒 
7
Immutable 
Infrastructure 
ぽくね? 
8
Dockerやるな! 
9
もしかして 
ESXiの 
ライバル?!! 
10
コンテナ型って 
ホストのカーネルを共有して 
いるから 
動作するOSに制限が 
あるんじゃ? 
11
12 
仮想コンテナ環境 
カーネル空間 
プ 
ロ 
セ 
ス 
プ 
ロ 
セ 
ス 
プ 
ロ 
セ 
ス 
プ 
ロ 
セ 
ス 
カーネル空間カーネル空間 
カーネル空間 
プ 
ロ 
セ 
ス 
プ 
ロ 
セ 
ス 
プ 
ロ 
セ 
ス 
プ 
ロ 
セ 
ス 
仮想マシン環境 
Hypervisor 
CentOS Ubuntu 
CentOS Windows
確かにOSが 
色々必要だと 
いいかもね 
13
でも仮想マシンって 
クローン作成するのも 
時間がかかるよね? 
何かあるの? 
14
あるよ 
15
リンククローン 
• テンプレートになるディスクを読み取り専用として、 
書き込み可能な差分ディスクをレイヤリングして使用可能にする技術 
16
さっきの図を使うとこんな感じ 
17 
カーネル空間 
プ 
ロ 
セ 
ス 
プ 
ロ 
セ 
ス 
プ 
ロ 
セ 
ス 
カーネル空間 
プ 
ロ 
セ 
ス 
プ 
ロ 
セ 
ス 
プ 
ロ 
セ 
ス 
プ 
ロ 
セ 
ス 
非仮想化環境仮想コンテナ環境 
仮想マシン環境 
プ 
ロ 
セ 
ス 
Hypervisor 
リンククローン 
カーネル空間 
プ 
ロ 
セ 
ス 
カーネル空間 
プ 
ロ 
セ 
ス 
プ 
ロ 
セ 
ス 
カーネル空間 
書き込み差分 
テンプレート 
(読み取り専用)
18 
リンククローンって 
VDI専用じゃないの?
19 
vSphere単体でもできるよ 
New-VM -Name MyLinkedCloneVM1 
-VM $mySourceVM -LinkedClone -ReferenceSnapshot $myReferenceSnapshot 
-ResourcePool $vmhost -Datastore $myDatastore 
とかvCenter Orchestratorとか
dockerのリンククローン 
• Linuxのカーネルに実装されている、Union Mount(AUFS),LVM Thin 
Provisioningを使ったりしてファイルシステムのレイヤリングを実現 
20
さっきの図を使うとこんな感じ 
21 
カーネル空間 
プ 
ロ 
セ 
ス 
プ 
ロ 
セ 
ス 
プ 
ロ 
セ 
ス 
Apache MySQL 
Apache Oracle 
カーネル空間 
プ 
ロ 
セ 
ス 
プ 
ロ 
セ 
ス 
プ 
ロ 
セ 
ス 
プ 
ロ 
セ 
ス 
非仮想化環境仮想コンテナ環境 
仮想マシン環境 
プ 
ロ 
セ 
ス 
Hypervisor 
カーネル空間 
プ 
ロ 
セ 
ス 
カーネル空間 
プ 
ロ 
セ 
ス 
プ 
ロ 
セ 
ス 
カーネル空間 
テンプレート 
(読み取り専用) 
OSテンプレート 
(読み取り専用) 
OSテンプレート 
(読み取り専用) 
OSテンプレート 
(読み取り専用) 
リンククローン 
AUFS AUFS 
Apache MySQL Oracle
22 
差分展開できても 
完全仮想化だよね? 
起動時間は 
早くならないよね?
23 
リンククローンて 
複数のテンプレートを 
合成できたっけ?
ぐぬぬぬ・・・ 
24
25
26
リンククローンと 
何が違う?おいしいの? 
27
メモリも差分だけで展開可能 
28
29
あれっ複数ディスクから 
1つのイメージ作る件は 
どうした? 
30
31
32
Cloud Volumesとは 
• ThinAppのようにOSレイヤは吸収できないけど、dockerのAUFS相当な 
らもっとクールに実現できる 
33
これでデータの割り当ては思いのまま 
34
35 
Project FargoとCloud 
Volumeの組み合わせも可能
36
でもライセンスは必要 
37
本日のまとめ 
docker vSphere Project Fargo Project Meteor 
仮想化方式コンテナハイパーバイザーハイパーバイザーハイパーバイザー 
OS柔軟性 
× 
Linuxカーネル依存 
◎ 
かなり自由 
◎ 
かなり自由 
◎ 
かなり自由 
性能オーバヘッド 
◎ 
極小 
△ 
小~中 
△ 
小~中 
△ 
小~中 
イメージの展開+起動 
○ 
差分ディスク 
△ 
差分ディスク 
○ 
差分ディスク+ 
差分メモリ 
○ 
差分ディスク+ 
差分ディスク 
アプリケーション柔軟性 
○ 
展開後自動実行+ 
定義ファイル 
× 
なし 
× 
なし 
◎ 
共有ディスク+ 
差分ディスク 
38 要するに適材適所

More Related Content

VMwareユーザのためのdocker入門 ~Re:Virtualization Night #1~