Dockerを採用したレッド・ブラック・デプロイメント
さて、ここからいよいよDockerのお話しです。実はDockerが、このレッド・ブラック・デプロイメントを斬新なものにします。
イミュータブル・インフラストラクチャにおいて、開発環境のシステムは、頻繁に更新が発生します。開発とテストが頻繁に行われるため、システムの更新作業、OSやミドルウェアのバージョンの戻し作業、開発用のソフトウェアの更新などが大量に発生します。アプリケーション開発者にとって、このようなシステムの更新作業や戻し作業は、非常に苦痛を伴うものです。特に開発者は、複数のOS上で稼働する異なるバージョンの開発環境を用意する必要があるため、開発用の環境の入手、利用、廃棄は、開発期間の工数を圧迫することなく、手間をかけずに行いたいと望みます。
この開発環境の入手、利用、廃棄という一連の作業は、まさにDockerが得意とする分野です。アプリケーションの動作試験を繰り返す際には、さまざまなOS環境が必要になるケースがありますが、そのようなさまざまなOS環境は、Dockerイメージとして事前に入手しておきます。アプリケーションを含めたDockerイメージを保存しておき、Dockerイメージからコンテナをすばやく起動すれば、さまざまなOS環境での業務アプリケーションの動作試験をすぐに行うことができます。
別のDockerコンテナでは、パッチ適用済みの業務アプリケーションを簡単にテスト、廃棄することが可能ですので、異なるOS環境で稼働する新旧のアプリケーションを交互にテストすることも容易になります。アプリケーションの動作試験が終了したら、そのDockerコンテナは、簡単に廃棄することができます。
さらに、高い負荷が発生した場合に自動的にスケールできるかどうかも、Docker社が提供している「Docker Compose」というソフトウェアを使うことで、簡単にテストできます。

Dockerを採用したレッド・ブラック・デプロイメント
ハードからアプリまでをカバーする「インフラストラクチャ・アズ・コード」
Dockerを活用したレッド・ブラック・デプロイメントでは、開発途上の古いバージョンのコンテナ環境を簡単に廃棄し、新しいバージョンのコンテナ環境をすばやく起動できますが、性能試験やスケール可否の試験をすばやく行うには、コンテナだけでなく、新旧の物理サーバ環境も自動的に用意できなければなりません。
そのため、物理サーバ、OS、コンテナ、アプリをいつでも指定した状態に戻す仕組みが必要になります。例えば、Hadoop用の物理サーバでは内蔵ディスクでRAIDを構成しませんが、ウェブアプリケーション用のサーバではRAIDを構成しますので、RAIDの構成有無などを自動的に設定しなければなりません。OSも、Hadoop用の調整とウェブアプリケーション用の調整は異なるため、パラメータの設定も自動的に行う必要があります。
物理からアプリケーションのレイヤにいたるまで、配備と廃棄の自動化を実現するには、ハードウェアとOSレベルでの自動配備の仕組みとコンテナ技術が必要不可欠です。
このような、ハードウェアからアプリまでの一連の配備、廃棄を柔軟に行うためには、ハードウェアレベルでの自動制御をする必要がありますが、ハードウェアの自動設定、OSの自動インストール、コンテナ環境の構築を別々に手動で行うと、IT部門の負荷が非常に高くなってしまいます。
そこで近年は、ハードウェア、OS、コンテナ環境、アプリ開発・実行環境までを一元的にオープンソースソフトウェアで開発したコードから制御し、配備しようという動きがあります。これは、「インフラストラクチャ・アズ・コード」と呼ばれ、ハードウェア、OS、コンテナ、アプリ環境の自動配備の一連の作業をオープンソースのコードによって記述します。
インフラストラクチャ・アズ・コードは、インフラ配備の手順をコード化するという意味で、仮想化基盤上で稼働するゲストOSとオープンソースの自動配備で利用される場合もありますが、イミュータブル・インフラストラクチャでは、ハードウェアも含めた「環境の自動配備のコード化」が必要になります。
このような自動配備を実現するものとしては、ChefやAnsibleといったオープンソースソフトウェアが有名ですが、ハードウェアレベルまでの制御をオープンソースから行うには、これら自動配備用のオープンソースソフトウェア向けに用意されたハードウェア制御用のプラグインやAPIが必要です。このようなプラグインやAPIは、ハードウェアベンダーから公開されています。例えば、PythonからHewlett Packard Enterprise(HPE)製サーバのハードウェアを制御するインフラストラクチャ・アズ・コードの開発支援キット「HPE OneView SDK for Python」では、IT基盤の運用を自動化するためのさまざまなPythonのサンプルコードが公開されています。
このように、ソフトウェアの開発過程で得られたさまざまな開発ノウハウをインフラ配備にも生かすことができるのが、インフラストラクチャ・アズ・コードであり、イミュータブル・インフラストラクチャを実現する非常に重要な要素技術なのです。
ちなみにHPEでは、Dockerによるインフラストラクチャ・アズ・コードを強く意識したイミュータブル・インフラストラクチャに必要とされる無償ソフトウェアなども提供しています。その1つが、「Docker Machine OneViewプラグイン」です。ハードウェア管理ソフトウェア(HPE OneView)とDocker社が提供しているDocker Machineが連携して動作し、ハードウェア設定、OSのインストールに加え、物理サーバにインストールされたOS上へのDocker環境の自動配備を実現します。Docker Machine OneViewプラグインについては、動画(英語)が公開されています。技術者向けの解説動画ですが、Dockerを活用したイミュータブル・インフラストラクチャを実現するにあたって必要となる自動化の技術要素と具体的な実行方法を理解できます。是非ご覧ください。
- 古賀政純
- 日本ヒューレットパッカード オープンソース・Linuxテクノロジーエバンジェリスト
兵庫県伊丹市出身。1996年頃からオープンソースに携わる。2000年よりUNIXサーバのSE及びスーパーコンピュータの並列計算プログラミング講師、SIを経験。2006年、米国ヒューレットパッカードからLinux技術の伝道師として「OpenSource and Linux Ambassador Hall of Fame」を2年連続受賞。プリセールスMVPを4度受賞。現在は、日本ヒューレットパッカードにて、Linux、FreeBSD、Hadoop、Dockerなどのサーバ基盤のプリセールスSE、文書執筆を担当。Red Hat Certified Virtualization Administrator、Novell Certified Linux Professional、Red Hat Certified System Administrator in Red Hat OpenStack、Cloudera Certified Administrator for Apache Hadoopなどの技術者認定資格を保有。著書に「Docker実践ガイド」「OpenStack 実践ガイド」「CentOS 7実践ガイド」「Ubuntu Server実践入門」などがある。趣味はレーシングカートとビリヤード。