今まで利用されてきた仮想化環境とDockerを比べ、Dockerならでは評価点を説明します。
Dockerは安全なバックアップ、パフォーマンス(速度)、スケーラビリティー・デプロイの容易性、ポータビリティー、
ライセンスと、エンタープライズの現場で活用する場合に十分な機能を初めから対応しています。
安全なバックアップ
仮想化環境の運用を検討する際、安全なバックアップの取得方法についても検討すると思います。Dockerにはexportコマンドが準備されているため、コマンドラインから簡単にバックアップが取得できます。
docker export red_panda > latest.tar
exportコマンドの詳細はDockerのリファレンスを参照して下さい。(https://docs.docker.com/reference/commandline/export/)
復元にはimportコマンドがあります。
cat exampleimage.tgz | docker import - exampleimagelocal:new
importコマンドの詳細はDockerのリファレンスを参照して下さい。(https://docs.docker.com/reference/commandline/import/)
公式イメージ・レジストリサービス
DockerにはOS・ミドルウェア・アプリケーションの公式イメージがあります。一覧はDocker Hubの一覧をご確認下さい。(https://hub.docker.com/explore/)
Docker HubはDocker社が運営している公開レジストリで登録数は10万を超えます。企業や個人によるプライベートレジストリも登録できます。
開発やテストに必要なミドルウェアの調達や、プライベートな開発環境の共有、本番運用環境の共有をDocker Hubで実現できます。イメージの取得や更新といった操作はDockerコマンドラインから行えるため、CIツールなど自動化ツールからDockerの操作が比較的簡単にできます。DockerリモートAPIも利用することが出来ます。
今までは、開発環境やテスト環境に合わせてミドルウェアを個別にインストールするのが一般的でした。複数人で開発やテストを行う場合にはインストールマニュアルを準備するか、インストール手順を自動化したツールを利用しました。
Dockerがインストールしてあれば、開発環境・テスト環境の差異を気にせずにコンテナ単位でミドルウェアをインストールする事ができます。開発環境・テスト環境の構築がコンテナのインストールで済むため、個別にマニュアルを見て設定を行う、自動化ツールを動作させる必要がなくなり、関係者全員が適切に設定済みのミドルウェアを即利用できるようになります。
パフォーマンス(速度)
仮想化環境の欠点として、ネイティブ環境と比べて遅い点があります。遅くなる主な理由は仮想ハードウェア上でOSから動作させるためですが、Dockerは起動しているコンテナ(実質はプロセス)上で動作するため他の仮想化ソフトウェアと比べると格段に動作が速いです。
Dockerを経由してもパフォーマンスの劣化が小さいため、OSに直接ミドルウェアをインストールして利用する場合と、Docker Hubから取得したミドルウェアを利用する場合でパフォーマンスに大きな差が出ません。
仮想化環境をコピーしてその中で開発を行う、またはアプリケーションを運用する企画や計画を見たり聞いたりした事がある方も多いと思います。仮想化された中で運用を行うとなると、パフォーマンス上の問題が発生し、その解決のために特別なハードウェアの購入を必要とする場合がありました。
Dockerではパフォーマンス上の問題が発生しませんし、特殊なハードウェアが無ければ満足に動作しないといった事がありません。
スケーラビリティー・デプロイの容易性
Dockerはコンテナをファイルで移動させる、またはレジストリ上からコンテナの取得が容易です。そのためDocker自身がスケーラビリティーを備えている訳ではありませんが、スケーラビリティーを確保した環境の中で利用するのにDockerは向いています。
ソースコードをダウンロードしてコンパイル、ビルドを行い環境に合わせて作られたバイナリの動作は速いですが、デプロイに時間がかかります。開発環境やテスト環境のように、様々な環境で動作することを前提としている場合はDockerでインストールする方が環境差異によるビルド失敗もありませんし、インストールが早く済みます。
(Photo by:Vasile Cotovanu)
ポータビリティー
Dockerは他の環境にコンテナを持ち出して利用する前提で設計されている事もあり、ポータビリティーがとても高いです。コンテナにOS本体が含まれないため、ファイルサイズが小さいです。コンテナの内部に状態を持たせない、状態を保存するならコンテナ外で保存する設計が主流のためファイルサイズ肥大化も起こりづらいです。
用途に合わせた単位でコンテナを作るため、全て入りの巨大なコンテナにするよりもロールモデルで小さく分割されたコンテナを作ることが好まれます。全て入りの大きなコンテナよりも、必要とするロールで分割されたコンテナを必要な分だけインストールする形です。
今までの仮想化環境のイメージデータは何10ギガものファイルサイズになり、コピーするだけでも大変でした。対してDockerでは数10メガのファイルサイズで済むことが多くなりコピーが楽です。
全て1つの仮想化環境に入っている場合は、1つ動かなくなると全体が動かなくなるトラブルが起こりがちですが、Dockerでは適度な単位でコンテナが分割されていると、複数コンテナ内の1つが動かなくなっても他コンテナは問題なく動作します。
ライセンス
DockerはApache License 2.0で提供されています。そのためDockerを使ったソフトウェアや、環境に同梱した場合にはライセンスの表記が必要です。ただDockerはインフラ上に構築されたコンテナとして利用するケースが多いと思いますので、殆どの状況でライセンスを気にすることが無いと思います。
DockerのGithub(https://github.com/docker/docker)からソースコードを利用してサードパーティーツールを開発した場合などでライセンスを確認する必要があります。
要約・まとめ
今までの仮想化技術とは一線を画してLinuxカーネル寄りの技術で作られたDockerは全体的に軽量でシンプルです。アプリケーションやミドルウェアをコンテナ単位でインストールできるのが、開発環境や動作環境が多様化している現在の状況に合致しています。
オフィスへの出社可能範囲で採用活動していては優秀な開発者を採用できないと、海外含めてリモートワークで従業員を募集する企業が増えつつある現状、Dockerを利用して開発環境コンテナを共有すればリモートワークを実現し易くなります。
AWSに代表されるクラウド環境内での利用にもデプロイが容易なDockerは向いています。
オープンソースで公開されていることもあり、企業システムでも問題なく利用ができます。実績面でも機能面でも利用にあたり特段障害が無いように思えます。あるとすれば国内に限定した話になりますが、日本語での公式なマニュアルがないぐらいでしょうか。
本ブログは、Git / Subversionのクラウド型ホスティングサービス「tracpath(トラックパス)」を提供している株式会社オープングルーヴが運営しています。
エンタープライズ向け Git / Subversion 導入や DevOps による開発の効率化を検討している法人様必見!
「tracpath(トラックパス)」は、企業内の情報システム部門や、ソフトウェア開発・アプリケーション開発チームに対して、開発の効率化を支援し、品質向上を実現します。
さらに、システム運用の効率化・自動化支援サービスも提供しています。
”つくる情熱を支えるサービス”を提供し、まるで専属のインフラエンジニアのように、あなたのチームを支えていきます。
No Comments