検索
連載

「コンテナって何? どう使える?」――ソフトウェア開発の課題を解決するコンテナ技術これから始める企業のためのコンテナ実践講座(1)(3/3 ページ)

「コンテナ技術」やコンテナ実行環境の「Docker」、大量のコンテナ管理や負荷分散を実現する「Kubernetes」について概要から本番活用の仕方まで解説する本連載。第1回は「コンテナ技術」や「Docker」が、現代のソフトウェア開発に求められるようになった理由を解説します。

Share
Tweet
LINE
Hatena
前のページへ |       

コンテナ技術とDocker

 コンテナ技術は、実行環境を他のプロセスから隔離し、その中でアプリを動作させる技術です。コンテナが利用する名前空間やリソースは他のプロセスやコンテナからは隔離されて、それぞれ固有の設定を持てるようになります。そのため、コンテナに構築されたアプリからは、独立したコンピュータでアプリが動作しているように見えます。

 コンテナ技術を用いれば、異なるサーバであっても、簡単に同一構成の開発環境や本番環境を構築できます。もちろん、何もせずにそういう構成が勝手にできるわけではありません。そのための環境が必要です。その環境の一つが、コンテナ型アプリ実行環境のDockerです。

 Dockerでは、本番環境や開発環境の構成を「Dockerイメージ」として保存できます。開発者は、DockerレジストリーからDockerイメージを取得することで、構成済みの環境を再現できます。

Dockerイメージを用いて構成済みの環境を再現できるDocker
Dockerイメージを用いて構成済みの環境を再現できるDocker

コンテナ技術やDockerを利用するメリット

 コンテナ技術やDockerを利用するメリットについて、仮想化技術を用いて環境を構築した例で考えてみます。

 バージョン1.0の仮想サーバ環境を完全にコピーして、事前に修正や更新、アップデートを行ったバージョン1.1の仮想サーバ環境を用意します。アプリを更新する際は、古い仮想マシンから新しい仮想マシンに切り替えます。元に戻す場合は、古い仮想マシンに切り替えれば、元に戻ります。

本番稼働中のサーバを更新しなくても、新しいバージョンに切り替え可能
本番稼働中のサーバを更新しなくても、新しいバージョンに切り替え可能

 こうすれば、本番稼働しているサーバを手順書などで更新することなく、事前にテストして動作を確認済みの新環境へ切り替えることができるはずです。

 クラウドの登場後、こういった方法で新しいアプリをデプロイしたり、環境を更新したりすることが増えてきました。この移行例は、クラウドで柔軟なサーバリソースの確保ができるようになってきたから可能になった方法です。

 では、コンテナだとどうでしょう。コンテナは、仮想マシンよりももっと小さい単位で、アプリを分離できます。仮想サーバの場合、1つの仮想サーバに対してOSが必要ですが、コンテナでは不要になるため、OSの管理が不要になってセキュリティのリスクを減らすこともできます。また、上記のような仮想サーバを用いた移行例は、クラウド環境や潤沢な仮想環境でしか実現できませんが、コンテナであればオンプレミスでも同様の環境を再現でき、必要なリソースも少なく済みます。

 従来のサーバ仮想化とコンテナ技術の違いについての詳細は、下記記事も参照してください。

サーバでアプリを更新する作業を例えると

 サーバでアプリを管理したことがない人には、Dockerのメリットが分かりにくいかもしれません。そこで、「アプリ更新」という作業を、「デスクトップのアプリを更新する」例で考えてみましょう。

 あるアプリがあるとします。このアプリの現在のバージョンは1.0です。普通、デスクトップOSで利用中のアプリを更新するには、新しいアプリのインストーラーを入手して実行します。そうすれば新しいバージョンがインストールされ、利用できるようになります。新しいバージョンを1.1としておきます。

 一般的なアプリのインストールと更新は、上記の通りで何も困ることはありません。しかし裏では、アプリを更新する際、新しいアプリに必要なライブラリのインストールや更新、設定が行われています。もし、アプリを更新するインストーラーがないとしたらどうでしょうか? 新しいバージョンのアプリを利用するために、アプリを手動で入れ替え、必要なライブラリを適切なフォルダに設置し、レジストリーや設定ファイルを自分で書き換えないといけないかもしれません。デスクトップアプリのインストーラーは、そういったことを実行してくれているのです。

 Dockerの環境では、Dockerイメージに必要なアプリとライブラリの構成が記述され、Dockerイメージを基に作成されたDockerコンテナ(コンテナイメージといいます)にアプリやライブラリが含まれます。そのためDockerコンテナを実行すれば、アプリを実行できるのです。

 では、アプリが更新されたときにバージョン1.0にあった機能が次のバージョン1.1では利用できなくなった場合は、皆さんならどうしますか? 当然、1.1にはアップデートせず、1.0を使い続けることになるでしょう。しかし、それでは1.1以降に追加される機能が利用できません。コンテナ技術の場合は、両方のバージョンが独立して存在できるので、複数のバージョンを同時に利用できます(残念ながら現在のWindows OSではコンテナは実行できますが、デスクトップアプリのコンテナ実行まではできていません。Microsoftには、Microsoft Application Virtualization(App-V)という技術もありますが、別途導入が必要で一般的ではありません)。

 「複数のバージョンを同時に利用できる」ということは、さまざまなメリットを生み出します。

 例えば、1.0から1.1に移行する前に、1.0を使いつつ、1.1を試しに使ってみて問題がないか確認することができます。「いったん1.1を使い始めたが問題があった」場合は、1.0にバージョンを戻せます。また、普段利用するのは1.1としておき、1.0の機能を利用したいときのみ、1.0のアプリを起動させるということもできます。さらに、1.1のアプリを2種類用意して、A社向け環境とB社向け環境に構築するといったことも実現できます。

まとめ

 コンテナ技術やDockerにより開発者や運用管理者の負担が減り、開発環境の構築、アプリ更新のスピードが飛躍的に向上しました。その結果、Dockerの利便性を、「本番で稼働するアプリの運用にも活用できるのではないか?」と考えた人たちがいます。Kubernetesを作り始めたGoogleの開発者たちです。さらに、コンテナ技術を活用していく上で、アプリの機能の単位を小さくする「マイクロサービス」という概念にも注目が集まっています。今後は、さらにソフトウェアの開発、運用のスピードが上がり、より一層サービスや機能の開発、進化のサイクルが短くなっていくでしょう。

 次回は、Dockerをビジネスで扱う際に生まれた課題、そしてその課題を解決する「Kubernetes」を紹介します。

筆者紹介

矢野 哲朗

株式会社スタイルズ SIビジネスグループ エキスパート職

ネットワークからDBとストレージ、パフォーマンスチューニングに従事。「ownCloud」と「Nextcloud」からオープンソースへの貢献を深め、現在はコンテナに関する企画、SIに従事している。

棚田 美寿希

株式会社スタイルズ マーケティング・広報担当

社内初のコーポレート広報担当として、企画、計画〜運営に従事する。自社サービスや取り扱うオープンソースのマーケティング、PRも兼任。非エンジニアならではの視点で、技術情報やIT事例を世に広めていけるよう日々まい進している。


Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る