IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

クラウド時代のオープンソース実践活用

CTC 教育サービス

 [IT研修]注目キーワード   OpenStack  OpenFlow/SDN  情報セキュリティ  Python  システムトラブルシュート 

第42回 Dockerのイメージ管理を考える (中井悦司) 2014年4月

はじめに

 前回のコラムでは、コンテナ管理ツール「Docker」を学ぶ下準備として、Linuxコンテナそのものの仕組みを解説しました。Linuxサーバ上でアプリケーションの実行環境を分離する面白い技術ですが、Linuxコンテナを本格活用しようとすると、いくつか面倒な点もでてきます。その1つが、コンテナに見せるファイルシステム内のコンテンツ管理です。
 今回は、この点について補足説明すると共に、Dockerおけるファイルシステム(イメージ)管理の方法を紹介します。Dockerの具体的な利用例については、(*1)の記事が参考になるでしょう。

コンテナ用ファイルシステムのコンテンツ管理

 前回説明したように、コンテナで稼働するプロセスからは、ホストLinux上の特定のディレクトリがルートファイルシステムとして参照されます。以前からある、「chroot」に相当する仕組みです。したがって、この特定のディレクトリの中に、プロセスの稼働に必要なファイルをすべて入れておく必要があります。
 ところが、Apache HTTPサーバやSambaサーバなど、既存のアプリケーションをコンテナで稼働させようとすると、そもそもどんなファイルが必要なのか、すぐには判断ができません。Red Hat Enterprise Linux(RHEL)などが導入された普通のLinux環境であれば、yumコマンドでRPMパッケージを導入すると、必要なファイルは自動的に用意されます。しかしながら、コンテナ用に用意した新規の空ディレクトリに対して、パッケージをインストールするようなことはできるのでしょうか? yum/rpmコマンドのオプションを駆使すればできなくはないのですが、特殊な手順のため、誰にでも利用できる方法とは言えません。
 そこで、Dockerでは、コンテナに見せるファイルシステムを「イメージ化」して管理することで、この問題を解決しています。具体的には、図1のようになります。

fig01

図1 Dockerのイメージ管理方式

 まずはじめに、誰かが用意したファイルシステムの内容を1つの「イメージ」として登録しておきます。新たなコンテナを起動する際にイメージを指定すると、その内容のスナップショット(後述のThin Provisioning機能による論理コピー)がホストLinuxにマウントされて、それがコンテナのルートファイルシステムとして割り当てられます。コンテナの稼働が停止すると、スナップショットは破棄されます。
 一方、コンテナの稼働中において、コンテナが利用しているファイルシステムの内容をコピーして、新たな「イメージ」として保存することができます。この保存イメージを元に、新たなコンテナを起動することができます。
 そこで、この仕組みを利用した、次のような使い方を考えてみます(図2)。

fig02

図2 Dockerにおけるアプリケーション導入手順例

 はじめに、RHELやCentOSなどを最小構成で導入したものと同じ内容のファイルシステムを「イメージ」として登録しておきます。この部分だけは特殊なテクニックが必要ですが、一度誰かが作成しておけば、それをみんなで共有して利用することが可能です。そして、このイメージから新規のコンテナを起動します。この時点では、まだアプリケーションは何も入っていませんが、少なくとも「yumコマンド」を実行することはできますので、yumコマンドで必要なアプリケーションを導入していきます。
 アプリケーションの導入が終わったら、この状態のファイルシステムを新たなイメージとして保存します。これで、必要なアプリケーションが導入されたイメージの完成です。これ以降は、このイメージからコンテナを起動すると、導入したアプリケーションをすぐに実行することができます。

コンテナのイメージ管理のあり方

 前回、コンテナでは特定のアプリケーションのプロセスだけを起動するのであって、「OS一式」を動作させるわけではないということを説明しました。その意味では、コンテナに見せるファイルシステムの内容についても、アプリケーションの動作に必要な最小限の構成が理想と言えます。図2の方法では、最小構成のOSと同じ内容を用意していますので、本当の意味での「最小限」とは言えません。
 とはいえ、yumコマンドでアプリケーションを導入できるのは、確かに便利です。これまでに蓄積されたRPMパッケージの資産を再利用できるメリットは大きく、コンテナのイメージ管理における1つの「現実解」と言えるでしょう。
 ちなみに、現在、RHEL/CentOSでは、EPELリポジトリからDockerを導入することができます。RHEL/CentOS用のDockerでは、LinuxのDevice Mapperが提供する「Thin Provisioning」の機能を利用して、図1のイメージ管理の仕組みを実現しています。このあたりの詳細に興味がある方は、筆者のBlog記事(*2)を参考にしてください。

次回予告

 先週、OpenStack関連のセミナーで「OpenStackが実現するエンタープライズクラウドの実像」と題する講演を行いました。講演の中では、企業システムでOpenStackを活用するユーザ事例とともに、OpenStackのさまざまなユースケースについての議論を行いました。
 OpenStackのクラウド環境を使いこなす上では、「クラウドで何をするのか」というユースケースの理解が大切です。これは、Dockerについても同じかも知れません。Dockerのイメージ管理の仕組みは一見便利なようにも見えますが、場当たり的に手作業でイメージを作成していると、やがては、本当に必要なイメージがどれだか分からなくなる恐れもあります。Dockerのユースケースの研究はまだ始まったばかりと言えるでしょう。
 さて、次回のコラムは、ゴールデンウィーク明けの5月12日の週に掲載の予定です。それまで、筆者もDockerのさらなる研究を進めておきたいと思います。

参考資料

*1)「DockerでかんたんLAMP環境 for CentOS

*2)「RHEL7におけるDockerのディスクイメージ管理方式

 

++ CTC教育サービスから一言 ++
このコラムでLinuxや周辺技術の技術概要や面白さが理解できたのではないかと思います。興味と面白さを仕事に変えるには、チューニングやトラブルシューティングの方法を実機を使用して多角的に学ぶことが有効であると考えます。CTC教育サービスでは、Linuxに関する実践力を鍛えられるコースを多数提供しています。興味がある方は以下のページもご覧ください。
 CTC教育サービス Linuxのページ
 http://www.school.ctc-g.co.jp/linux/
 

Linux研修トレーニングならCTC教育サービス


 

筆者書籍紹介

Software Design plusシリーズ
「独習Linux専科」サーバ構築/運用/管理
  ――あなたに伝えたい技と知恵と鉄則

本物の基礎を学ぶ!新定番のLinux独習書

中井悦司 著
B5変形判/384ページ
定価3,129円(本体2,980円)
ISBN 978-4-7741-5937-9
詳しくはこちら(出版社WEBサイト)
「独習Linux専科」サーバ構築/運用/管理

 [IT研修]注目キーワード   OpenStack  OpenFlow/SDN  情報セキュリティ  Python  システムトラブルシュート