(C)Copyright  1996-‐‑‒2014  SAKURA  Internet  Inc.
いまさら聞けない  Docker
コンテナ技術&Immutable  InfrastructureとDockerをまなぶ
2014/11/14  第5回コンテナ型仮想化の情報交換会@⼤大阪
さくらインターネット株式会社  ⽥田中邦裕
@kunihirotanaka
⾃自⼰己紹介
⽥田中邦裕
•  1978年年⼤大阪⽣生まれ
•  1996年年にさくらインターネットを創業
•  1998年年、舞鶴⾼高専卒
•  学⽣生時代の活動:ロボコン・吹奏楽
•  Twitter:  kunihirotanaka
趣味
3
•  プログラミング
– さくらのクラウドも最初は個⼈人で作ってました
– 昔はApacheドキュメント翻訳やってました
– いわゆるジェネレーター系サイトやってます
•  旅⾏行行&鉄道・電⼦子⼯工作・DTM
http://apache.jp
4
ホスティング中⼼心の⼤大阪&⽯石狩+ハウジング中⼼心の東京
様々なサービスが集約できる
国内最⼤大級の拡張性を持つ郊外型データセンター
郊外型データセンター
オフィス⾄至近、豊富な配信実績を持つ
都市型データセンター
都市型データセンター
⽯石狩
東京
⼤大阪
●⽤用途
  ハウジング、ホスティング、クラウド
●総ラック数
  2,650基(2013年年9⽉月現在)
●顧客数
  340,000件(2013年年4⽉月現在)
データセンターの紹介
売上の推移
近年年は、クラウド・ホスティングサービスの売上割合が増加
6
0
20
40
60
80
100
07年年 08年年 09年年 10年年 11年年 12年年 13年年 14年年
(単位:億円)
コロケーション ホスティング その他
やることとやらないこと
•  やること
– ホスティング
– クラウド
– その他インターネットサービス
•  やらないこと
– SI
– ⼈人材派遣
– 請負開発
– MSP
– システムのパッケージ販売
ここはパートナー様と共に
数字で⾒見見るさくらインターネット(四半期決算)
8
(⾦金金額:百万円)
サービス名
‘14/3期 ‘15/3期 前四半期⽐比
Q1会計 Q2会計 Q3会計 Q4会計 Q1会計 Q2会計 増減額 増減率率率
ハウジング 805 790 794 728 685 661 ▲24 ▲3.6
  構成⽐比 32.6 31.9 31.3 28.5 26.9 25.7
専⽤用サーバ 694 671 657 657 662 669 6 1.0
  構成⽐比 28.1 27.1 26.0 25.7 26.0 26.0
レンタルサーバ 517 537 548 565 570 581 11 1.9
  構成⽐比 20.9 21.7 21.6 22.1 22.4 22.6
VPS・クラウド 260 286 319 360 412 455 42 10.3
  構成⽐比 10.5 11.5 12.6 14.1 16.2 17.7
その他 195 192 214 247 215 209 ▲6 ▲2.9
  構成⽐比 7.9 7.8 8.5 9.7 8.5 8.1
ハウジングは減り、VPS・クラウドは⼤大きな伸び
専⽤用サーバは2014年年初頭から持ち直している。
Dockerを知る前に
9
サーバ管理理の⽅方法論論を⾒見見てみる
10
•  SSHを使った⼀一⻫斉変更更  →  超属⼈人的(ex:copy-‐‑‒tanaka.pl)
•  構成管理理ツールの利利⽤用  →  冪等性⾯面倒
– Chef  /  Ansible  /  Puppet
•  変更更毎に新しい環境を作る  →  お⾦金金かかる
– Immutable  Infrastructure
http://apache.jp
Immutable Infrastructureについて
11
•  セットアップした環境は書き換えない
•  新しい設定の環境を都度度作る
10/25  –  アプリケーションの修正
1/15  –  DBサーバーにセキュリティパッチ適⽤用
Server  4
アプリサー
バ
Server  5
アプリサー
バ
Server  3
DBサーバ
3/1  –  アプリサーバの設定変更更&増設(予定)
ロード
バランサー
Server  4
アプリサー
バ
Server  5
アプリサー
バ
Server  6
DBサーバ
Server  8
アプリサー
バ
Server  9
アプリサー
バ
Server  6
DBサーバ
Server  7
アプリサー
バ
古い環境
現⾏行行環境
新しい環境
Immutable Infrastructure(II)な時のサーバ設定変更更⽅方法
12
http://apache.jp
Server1
abc.com
Server1
abc.com
def.com
Server1
abc.com
def.com
ghj.com
Server1
abc.com
Server2
abc.com
def.com
Server3
abc.com
def.com
ghj.com
変更更 変更更
切切り換え
従来のやり⽅方
Immuta…(略略)の場合
破棄 破棄
Blue-Green Deploymentについて
13
http://apache.jp引⽤用:Publickey  「Blue-‐‑‒Green  Deployment」とは何か、マーチン・ファウラー⽒氏の解説
http://www.publickey1.jp/blog/14/blue-‐‑‒green_̲deployment.html
2つの環境は異異なったものだが、可能な限り同じにしておく必要がある。
それらは異異なったハードウェアだったり、同⼀一マシン上の(あるいは
別のマシン上の)仮想マシンだったり、あるいは同⼀一OS上で異異なるIP
アドレスを持った別のゾーンであったりもするだろう。
Immutable  Infrastructureの実現⽅方法
14
完全仮想化とコンテナとの違い
15
ハードウェア
ホストOS
ハイパーバイザー
ゲストOS
プロセス プロセス
ゲストOS
プロセス プロセス
ハードウェア
or
VPSインフラ・仮想サーバ
ホストOS
or
ゲストOS
プロセス プロセス プロセス プロセス
完全仮想化の場合 コンテナの場合
•  コンテナの場合、ハイパーバイサーが⼊入らない
•  またカーネルは共⽤用でユーザ空間が分離離される
仮想サーバ・VPSが提供するインフラはこの部分
仮想サーバ 仮想サーバ コンテナ コンテナ コンテナ
システムコンテナとアプリケーションコンテナ
16
•  システムコンテナ
– OSまるごとコンテナ内で実⾏行行
– PID=1はinitが担う
– 通常のサーバのように⾒見見える
– VPSとして販売するケースも(JoesCloudさんなど)
•  アプリケーションコンテナ
– コマンド(アプリケーション)だけをコンテナ化
– PID=1は各コマンドになる
– 実⾏行行が軽い
– デーモンを実⾏行行してもコンテナは即終了了してしまう
– Dockerはアプリケーションコンテナに近い
Dockerのメリット
17
•  簡単
– コンテナ基盤やファイルシステムなどがセットに
なっている
– イメージの管理理が楽
– 標準イメージも多数⽤用意されている
– Dockerファイルによる⾃自動化
•  技術⾯面
– 既存の⽐比較的枯れた技術を多⽤用
•  cgroups  /  aufs  /  LXC-‐‑‒>libcontainer  ほか
– リソース消費が完全仮想化より少なく、より⾼高速
Dockerを使ってみる
18
Dockerのインストール
19
•  CentOSの場合はyum⼀一発
$  sudo  yum  update  -‐‑‒y
$  sudo  wget  -‐‑‒P  /etc/yum.repos.d  http://www.hop5.in/
yum/el6/hop5.repo
$  sudo  yum  install  xz  docker-‐‑‒io  -‐‑‒y
$  sudo  service  docker  start
Starting  cgconfig  service:                                                                  [    OK    ]
Starting  docker:                                                                                      [    OK    ]
http://apache.jp
Dockerイメージの取得
20
•  pullで取得
$	
 sudo	
 docker	
 pull	
 centos	
 
Pulling	
 repository	
 centos	
 
5a1ebaa356ff:	
 Download	
 complete	
 
70214e5d0a90:	
 Download	
 complete	
 
68eb857ffb51:	
 Download	
 complete	
 
511136ea3c5a:	
 Download	
 complete	
 
34e94e67e63a:	
 Download	
 complete	
 
•  imagesで確認
$	
 sudo	
 docker	
 images	
 
REPOSITORY	
 	
 	
 	
 TAG	
 	
 	
 	
 	
 IMAGE	
 ID	
 	
 	
 	
 CREATED	
 	
 VIRTUAL	
 SIZE	
 
centos	
 	
 	
 	
 	
 	
 	
 	
 centos5	
 5a1ebaa356ff	
 2	
 days	
 ago	
 484	
 MB	
 
http://apache.jp
実⾏行行
21
•  runで実⾏行行
$	
 sudo	
 docker	
 run	
 -t	
 centos	
 /bin/bash	
 -c	
 "cat	
 /etc/redhat-release	
 
&&	
 ps	
 aux	
 &&	
 ip	
 addr	
 show	
 eth0"	
 
CentOS	
 Linux	
 release	
 7.0.1406	
 (Core)	
 
USER	
 	
 PID	
 %CPU	
 %MEM	
 	
 	
 	
 VSZ	
 	
 	
 RSS	
 TTY	
 STAT	
 START	
 	
 	
 TIME	
 COMMAND	
 
root	
 	
 	
 	
 1	
 	
 0.0	
 	
 0.0	
 	
 11552	
 	
 1360	
 ?	
 	
 	
 Ss+	
 	
 06:37	
 	
 	
 0:00	
 /bin/bash	
 -
c	
 cat	
 /etc/redhat-release	
 &&	
 ps	
 aux	
 &&	
 ip	
 addr	
 show	
 eth0	
 
root	
 	
 	
 10	
 	
 0.0	
 	
 0.0	
 	
 19696	
 	
 1236	
 ?	
 	
 	
 R+	
 	
 	
 06:37	
 	
 	
 0:00	
 ps	
 aux	
 
98:	
 eth0:	
 <NO-CARRIER,BROADCAST,UP,LOWER_UP>	
 mtu	
 1500	
 qdisc	
 
pfifo_fast	
 state	
 DOWN	
 qlen	
 1000	
 
	
 	
 	
 	
 link/ether	
 5e:0e:94:40:4c:8b	
 brd	
 ff:ff:ff:ff:ff:ff	
 
	
 	
 	
 	
 inet	
 172.17.0.2/16	
 scope	
 global	
 eth0	
 
	
 	
 	
 	
 inet6	
 fe80::5c0e:94ff:fe40:4c8b/64	
 scope	
 link	
 tentative	
 
	
 	
 	
 	
 valid_lft	
 forever	
 preferred_lft	
 forever	
 
•  実⾏行行するたびに環境は作り直される
http://apache.jp
Docker実⾏行行の仕組み
22
http://apache.jp
コンテナ
c1ae0d1372d8
コンテナ
15cb2a03c788
コンテナ
d7580743d875
イメージ
centos:test
イメージ
centos:  latest
docker  run
docker  commit
runするたびに、新しいコンテナが⽣生成される
commitして、イメージ化する
コンテナ
45e540c71952
docker  run
•  Runする度度に新しいユーザ空間が作成される
– 実⾏行行した結果を再利利⽤用する際はcommitして新しいイ
メージを作る
– Gitのように環境のバージョン管理理ができる
コミット
23
•  psで、実⾏行行終了了したコンテナのIDを取得
$	
 sudo	
 docker	
 ps	
 -a	
 
CONTAINER	
 ID	
 IMAGE	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 COMMAND	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 CREATED	
 
STATUS	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 PORTS	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 NAMES	
 
774a4e8b0840	
 centos:centos6	
 /bin/bash	
 -c	
 ‘cat	
 /e	
 12	
 minutes	
 
ago	
 Exited	
 (0)	
 12	
 minutes	
 ago	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 tender_morse	
 
•  commitでイメージをコミット
$	
 sudo	
 docker	
 commit	
 41b2bc26a2da	
 my:test1	
 
11833a8fa7f9ded35f5d91156a80ce23c1badbab18cb2d555	
 
$	
 sudo	
 docker	
 images	
 
REPOSITORY	
 	
 	
 TAG	
 	
 	
 IMAGE	
 ID	
 	
 	
 	
 	
 CREATED	
 	
 	
 	
 	
 	
 	
 	
 	
 VIRTUAL	
 SIZE	
 
my	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 test1	
 11833a8fa7f9	
 8	
 seconds	
 ago	
 	
 	
 224	
 MB  
コミットしたイメージからの実⾏行行
24
•  さっき作ったtest1から実⾏行行
$	
 sudo	
 docker	
 run	
 -t	
 my:test1	
 /bin/bash	
 -c	
 "ps	
 aux"	
 
USER	
 	
 PID	
 %CPU	
 %MEM	
 VSZ	
 	
 	
 RSS	
 	
 STAT	
 START	
 TIME	
 COMMAND	
 
root	
 	
 	
 	
 1	
 	
 0.0	
 	
 0.0	
 17596	
 1024	
 Rs+	
 	
 07:19	
 0:00	
 ps	
 aux	
 
•  実⾏行行結果を確認
$	
 sudo	
 docker	
 ps	
 -a	
 
CONTAINER	
 ID	
 IMAGE	
 	
 	
 	
 COMMAND	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 CREATED	
 	
 	
 	
 	
 	
 	
 
STATUS	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 PORTS	
 NAMES	
 
44100667c5d0	
 my:test1	
 /bin/bash	
 -c	
 'ps	
 aux	
 13	
 seconds	
 
ago	
 Exited	
 (0)	
 12	
 seconds	
 ago	
 	
 	
 	
 	
 	
 	
 cranky_engelbart
最後に
•  求⼈人しています。
•  さくらのクラウドの無料料クーポンあります
•  さくらのナレッジでも紹介しています
–  執筆者も募集中です!
25

いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪