27. 27Copyright (C) Masanori Kataoka All Rights Reserved.
5.7 knifeコマンド
図5.1において、chef クライアント側からchef サーバーの持つ情報を
編集する手段としてknife コマンドがある。以下はknifeコマンドのサブ
コマンドである。
5.システム構成管理ツール1(Chef)
項番 サブコマンド 機能
1 bootstrap ノードの初期セットアップを行う
2 client クライアントの管理を行う
3 configure knife の初期設定を行う
4 cookbook cookbook の管理を行う
5 cookbook site cookbook 共有サイトと連携する
6 data bag Data Bag(共有データ)の管理を行う
7 delete Chef Server で管理されているオブジェクトを削除する
8 diff Chef Server で管理されているオブジェクトの差分を表示
9 download Chef Server からオブジェクトをダウンロードする
表5.2-1 knifeコマンドのサブコマンド一覧(1)
28. 28Copyright (C) Masanori Kataoka All Rights Reserved.
5.7 knifeコマンド(続き)
5.システム構成管理ツール1(Chef)
項番 サブコマンド 機能
10 environment Environment の管理を行う
11 exec ノードでChef Server APIのやり取りをするスクリプトを実行する
12 index rebuild Chef Server 上のインデックスを再生成する
13 list Chef Server で管理されているオブジェクト一覧を表示する
14 node ノードの管理を行う
15 raw Chef Server API へREST リクエストを送る
16 recipe list レシピを表示する
17 role ロールの管理を行う
18 search Chef Server に登録されているノード情報を検索する
19 show Chef Server で管理されているオブジェクトを参照する
20 ssh 複数のノードでコマンドを同時実行する
表5.2-2 knifeコマンドのサブコマンド一覧(2)
29. 29Copyright (C) Masanori Kataoka All Rights Reserved.
5.7 knifeコマンド(続き)
5.システム構成管理ツール1(Chef)
項番 サブコマンド 機能
21 status Chef Server に登録されているノードの状態を表示する
22 tag タグの管理を行う
23 upload Chef Server へオブジェクトをアップロードする
24 user ユーザの管理を行う
表5.2-3 knifeコマンドのサブコマンド一覧(3)
(注)上表において、「ノード」とは、Chef Server による管理の対象とされている
サーバーを言う。また、「ロール」は、ノードをその役割分担で分類した「役割」
を示す。例えば、「Webサーバー」「DBサーバー」等の分担を示す。
30. 30Copyright (C) Masanori Kataoka All Rights Reserved.
6.1 コンテナ型配置作業支援ツール Docker
情報システムの運用を開始するための配置作業(Deployment)は、
複雑で誤りの入りやすい作業である。配置作業に当たっては、次のよ
うな依存関係を考慮しなくてはならない。
① 配置するソフトウェアは、多くのソフトウェア部品やライブラリに
依存しているのでこれを正しく設定する必要がある
② 他のサービスに依存している場合もある
③ OSの特定バージョンに依存している
④ 利用可能なメモリの最少量や特定のポートへのバインド等のリソ
ース上の制約がある
これらの依存関係と共に、さらに次の条件の達成が必要である。
⑤ 同一サーバーに共存する他のソフトウェアとの分離
⑥ このソフトウェアがセキュリティ上の問題を起こしても他のソフトウ
ェアに影響を与えないこと
⑦ アップグレード、ダウングレード、バックアップの容易性
6.システム構成管理ツール2(Docker)
32. 32Copyright (C) Masanori Kataoka All Rights Reserved.
6.2 コンテナ型仮想化
VMは、図6.1に示すようにハイパーバイザー配下に実現される。すな
わち、ハードウェアやOSを含めてすべてが仮想化される。一方、コンテ
ナ型仮想化では、コンテナ管理ソフトウェアのもとに、複数のコンテナ
が動作して、このコンテナが仮想化を実現する。コンテナには、ミドルウ
ェア(および依存ライブラリ)とアプリケーションが含まれる。すなわち、
OS配下のすべてのソフトウェアがパッケージングされる。
コンテナ型仮想化では、仮想化の範囲が少ない(OSを仮想化の対象
としない)のでオーバーヘッドが少なくなる。したがって、配置作業が高
速で容易に出来る特徴を持っている。DockerはDocker社が提供する
コンテナ管理ソフトウェアであり、下記の機能を実現している。
① コンピューターリソースの隔離および制限
② 他のホスト、他のコンテナーとのネットワークの構成
③ ファイル/ディレクトリの世代と差分の管理
“Build, Ship and Run any app, anywhere”が標語である(図6.2)。
6.システム構成管理ツール2(Docker)
33. 33Copyright (C) Masanori Kataoka All Rights Reserved.
6.2 コンテナ型仮想化(続き)
図6.1 ハイパーバイザー型仮想化とコンテナ型仮想化
6.システム構成管理ツール2(Docker)
34. 34Copyright (C) Masanori Kataoka All Rights Reserved.
6.2 コンテナ型仮想化(続き)
図6.2 Docker社のホームページ
6.システム構成管理ツール(Docker)
35. 35Copyright (C) Masanori Kataoka All Rights Reserved.
6.3 Dockerを構成する技術
Dockerは、新しい技術を用いて実現されている訳ではない。Unix系
のOS(FreeBSD, Solaris等)で長い歴史を掛けて開発されてきて、
Linuxへと引き継がれてきた次の技術を用いて実現されている。
① Linux Namespaces:コンピューターリソースの隔離(ファイル
システム空間の区画化等)
② Linux cgroups:コンピューターリソースの制限
③ AUFS/Device Mapper Thin Provisioning:ファイル/ディレク
トリの差分管理(共通部分と変更差分を分離・統合化して管理)
④ Linux iptables:他のホスト、コンテナーとのネットワークを構成
コンテナ技術自身は、これまでにもGoogleのコンテナ技術、RedHat
のGear等で活用されてきた。Dockerはこれらの技術をうまくパッケー
ジング、標準化してベンダー非依存にしたことにおいて優れている。そ
して、Google, RedHat, Amazon を味方に引き入れて、彼らの支援を
取り付けたことも、成功の主要因と捉えられている。
6.システム構成管理ツール2(Docker)
36. 36Copyright (C) Masanori Kataoka All Rights Reserved.
6.4 Dockerによるメリット
Dockerはインフラ管理者、開発者に次のようなメリットをもたらす。
① アプリケーションを少ないリソースで効率良く実行できる
(VMで実行するよりも高速)
② Immutable Infrastructure(不変のインフラ構成)の実装。アプリ
の実行環境を使い捨てとし、環境を都度作り直すことにより構成
変更を行うことができ、アプリの実行環境をより管理し易くする。
③ Infrastructure as Codeの実践。Dockerはコンテナーの構成を
全て「Dockerfile」というテキストファイルに記述できる。
④ 既存の開発環境がDocker社の共通リポジトリDockerHubに登
録されており、これを再利用できる。また、開発環境と本番環境と
共通化出来る。Dockerでは、コンテナーの元となるDockerイメー
ジを異なるホスト間で共有出来る。
⑤ アプリ実行環境を高速にデプロイできる。Dockerは一般プロセス
で動き、VMでいうOSのブート処理が不要である。
6.システム構成管理ツール2(Docker)
37. 37Copyright (C) Masanori Kataoka All Rights Reserved.
6.5 Dockerを支える周辺技術
Dockerが普及するにつれて、Dockerをより使い易くするためのツー
ルが多数開発されている。主要なものとして次の3分野がある。
① コンテナ向け軽量OS
② Dockerコンテナ管理ツール
③ Docker機能強化ツール
1) コンテナ向け軽量OS
Docker コンテナは、Linux OS配下で稼働する。ここでは、Linuxは
VMシステムにおけるハイパーバイザーの役割を担う。したがって、
コンテナを動かすだけの機能があれば充分であって、その他のLinux
の機能は出来るだけ削ぎ落として、リソースの使用量を最小限にした
い。このようなDocker専用OSとして、CoreOS(CoreOS社)、
CentOS Atomic Hat(Red Hat社),Snappy UbuntuCore(Canonical
UK社)がある。Snappy Ubuntu Coreは、IOT(Internet of Things)向
けの最軽量OSであり、Docker向けには専用アダプタが必要である。
6.システム構成管理ツール2(Docker)
38. 38Copyright (C) Masanori Kataoka All Rights Reserved.
6.5 Dockerを支える周辺技術(続き)
2) Dockerコンテナ管理ツール
Docker自身はCLI で実現されているので、これをGUI で使えるよう
にするツールである。代表的なものとして、Paramax(Paramax社)、
ShipYard(Shipyard社)がある。Paramaxは、「人間のためのUI」を
標榜していて、その「テンプレート」機能を用いれば、連携が必要な
システムのための複数コンテナを1クリックで立ち上げられる。
3) Docker機能強化ツール
Docker自身は一台のホストマシンしか扱うことは出来ない。現代の
クラウドの時代においては複数のホストを対象としたクラスタリング
機能がどうしても必要となる。このようなDockerの機能の限界を拡張
するツールとして、Kubernetes(Google社)、GearD(Red Hat社)が
ある。Kubernetesは、大きな注目を集めているプロジェクトであり、
Google主導して、Docker, IBM, Microsoft, Red Hat, CoreOS社他
共同開発に参加している。
6.システム構成管理ツール2(Docker)
39. 39Copyright (C) Masanori Kataoka All Rights Reserved.
6.5 Dockerを支える周辺技術(続き)
3) Docker機能強化ツール(続き)
Kubernetesでは、コンテナのクラスタリングにおいて次のような
概念を用いている。
① Pod:複数のコンテナの集まりをPodとして扱うことが出来る。
Pod内のコンテナは、一つのホスト上に限定される。
② Label:Podに対して任意の名前を付けられる。
③ Minion:複数のPodの集まりをMinionとして扱うことが出来る。
Minionは複数のホストにまたがってまとめることが出来る。
④ Replica: Podは、Replica機能を使って複製できる。
⑤ Service: PodやMinionをどのネットワークと接続するかを
Service機能を用いて設定できる。
上述したKubernetesの機能により、Dockerコンテナを大規模な
システムで活用することが出来る。
6.システム構成管理ツール2(Docker)
40. 40Copyright (C) Masanori Kataoka All Rights Reserved.
6.6 Dockerのサポート状況
2014年12月現在でのDockerのサポート状況は次の通りである。
(参考文献16))
米Amazon Web Services(AWS)や米Google、米Microsoftなどの
クラウドサービスは既にDockerをサポートしているほか、Dockerベー
スの新しいサービスも相次いで登場している。Googleは2014年11月
に「Google Container Engine」を、AWSは同じく2014年11月に「
Amazon EC2 Container Service」を発表した。Microsoftは、次期版
Windows ServerにDockerを搭載し、その技術をMicrosoft Azureにも
展開することを明らかにしている。直近では12月4日に米IBMが、米
Dockerと提携してDockerベースのサービス「IBM Containers」を提供
することを発表した。
6.システム構成管理ツール2(Docker)
47. 47Copyright (C) Masanori Kataoka All Rights Reserved.
7.2 ビルドツールの歴史とGradle(続き)
7.ソフトウェア構成管理ツール
手続き的 規約による
ビルド
スクリプト Make
Gradle
XML Ant Maven
ビルド
定義
パラダイム
図7.1 ビルドツールの進化におけるGradleの位置付け(参考文献6))