第15回 1つのDockerコンテナでサービスをたくさん動かすには?(基礎編)古賀政純の「攻めのITのためのDocker塾」(1/2 ページ)

サービスを稼働させる上で、ハイパーバイザ型の仮想化環境とDockerコンテナの環境では大きな違いがあります。まずは基礎知識から解説しましょう。

» 2016年02月03日 08時00分 公開

仮想化のゲストOSとDockerコンテナでは、サービスの起動方法が異なる?

 Dockerを使ったコンテナ環境は、ハイパーバイザ型の仮想化基盤ソフトウェアで稼働するゲストOS環境と大きく異なる点があります。それは、アプリケーションの”起動方法”です。

 「アプリなんて、コンテナ基盤でも仮想化基盤でも同じパッケージをインストールして使うのに、なぜ起動方法が異なるの?」と思われるかもしれません。実は、ハイパーバイザ型の仮想化基盤ソフトウェアには無いコンテナ環境ならではの考慮すべき点があります。

 ハイパーバイザ型の仮想化ソフトウェアは、仮想的なBIOSや仮想的なCPU、仮想的なメモリ、仮想的なNICなどをゲストOSにみせます。ゲストOSからみれば、ハイパーバイザ型の仮想化ソフトウェアが提供する環境(エミュレートされた環境)における各種の仮想的なデバイスは、あたかも物理サーバに搭載されているデバイスとして認識されます。つまり、「ゲストOSをだますソフトウェア」と言えます。

 ゲストOSは自身が物理サーバで稼働していると思っていますので、ゲストOSのインストーラや各種サービスの起動方法などは、物理サーバの場合となんら変わりません。逆に言えば、OSのシャットダウン処理を正常に行わないと、物理サーバにOSをインストールした場合と同様に、ゲストOS自体が損傷してしまう可能性もあります。アプリケーションに至っては、物理環境でもハイパーバイザ型の仮想化環境のゲストOSでも、まったく同じインストール方法であり、サービスの起動方法もアプリケーションに付属している起動・停止スクリプトをそのまま使用できます。

 ハイパーバイザ型の仮想化ソフトウェア上で稼働するゲストOSは、物理サーバ環境の場合と全く同様に、OSに付属する各種サービス用の起動・停止スクリプトをそのまま利用できます。例えば、ゲストOSとしてCentOS 7を導入し、その上でApache Webサーバを稼働させるために、httpdデーモンを起動するとします。この場合、サービスの起動・停止方法はパッケージに付属する起動・停止スクリプトをそのまま利用できます。CentOS 7側は、systemdとよばれるOS付属のサービス管理の仕組みを使って、httpdデーモンの起動・停止の制御ができるようになっています。

 しかし、コンテナ環境ではsystemdなどのOS付属のサービス管理の仕組みを使用しない場合がほとんどです。CentOS 7のコンテナ環境の場合に限らず、必要最低限のプロセスのみを起動するため、OS環境が用意するサービス管理の仕組み(systemd)を利用せずにhttpdデーモンを起動させることになります。httpdデーモンに付属する起動・停止用のスクリプトが使われないので、コンテナ環境においてはサービスの起動・停止に関わる別の方法を考慮しなければなりません。

 コンテナ内でOSが提供するサービス管理の仕組み(systemd)を使う方法もありますが、コンテナを特権モードで起動する必要があるなど、セキュリティ上の懸念事項もあります。多くの本番環境ではOS付属のサービス管理の仕組みを使用しない方法が検討されています。

図:従来の仮想化とDockerにおけるサービスの起動・停止の違い
       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ