Dockerはエンタープライズテクノロジの鍵となります
2016年の早い段階で、500を超えるITオペレーションと開発者を対象にアンケートを実施し、アプリケーションの構築方法をなどについてエンタープライズアプリケーションチームの主要な鍵となる要素を調査/集計しました。3つの主要なエンタープライズイニシアチブには、クラウドの採用、マイクロサービス、およびDevOpsが含まれています。
Dockerは、アプリケーションの新しいアプローチを用い、アプリケーションとすべての依存関係をパッケージ化し、機敏性、可搬性、制御性を実現するソフトウェアです。
近年のテクノロジの環境変化
2000年以前〜それ以降で主流であった大型なモノリシックなシステム構成は、近年ビジネス変化のスピードに順応していく必要性により小型化、疎結合化されています。現段階においてその環境をより適切に効率的に実現するテクノロジーがDockerであると言えます。
Dockerコンテナとは
Dockerコンテナは、実行する必要があるすべてのファイルシステム(コード、ランタイム、システムツール、システムライブラリなど)を含む完全なファイルシステム内のソフトウェアを包括しています。
すべてをコンテナ内にカプセル化し隔離することで、実行中の環境にかかわらずコンテナは常に同じものを実行することが保証されます。
コンテナはDockerイメージから構築されます。Dockerイメージは、union filesystemを使用し、複数のレイヤーで構成されています。
”docker run”コマンドを実行すると、Dockerエンジンは指定されたイメージからコンテナを起動します。Dockerエンジンには、新しいコンテナの作成、既存のコンテナのスケーリング、停止、削除など、すべてのコマンドが含まれています。
docker run ubuntu:14.04 echo "Hello World"
docker run ubunto ps ax
Dockerは仮想化の替わりになるか?
何年もの間、エンタープライズチームは仮想化テクノロジを利用してIT環境を最適化してきました。仮想化はアプリケーションのパッケージ化と実行の現実解と見なされていますが、VMは重く動作する為にOSすべてが必要です。
Dockerコンテナのアーキテクチャは、VMや軽量VMとはまったく異なります。次の図は、Dockerコンテナと仮想化の主な違いを示しています。Dockerコンテナはホスト上でOSカーネルを共有し、仮想化では各VMはVM内にOSのフルコピーを保持しています。
Dockerコンテナと仮想化が互いに排他的であるという意味ではありません。Dockerコンテナは、Dockerエンジンがインストールされている環境(vSphere、Hyper-VのVMやAWS、Azure、Googleなどのクラウドも含む)であればどこでも実行できます。また、Dockerコンテナが、アプリケーションを再コーディングすることなく、任意の環境から別の環境に移植可能であることです。
さらに、多くのユーザーがコンテナを既存の仮想インフラストラクチャに追加して、VMごとに可能なワークロードの密度を向上させています。一部のエンタープライズチームは、インフラストラクチャの最適化で20倍の密度を実現しました。
Dockerの3つの優位性
Dockerコンテナは、Dockerプラットフォームとライフサイクル全体の一部です。商用ソリューションであるDocker Datacenterには、コンテナ管理、レジストリ、商用でサポートされているDockerエンジンが含まれており、コンテナをサービス(CaaS)として企業に提供しています。
Docker Datacenterによって提供されるCaaSにより、ITチームや開発チームが必要とする機敏性、可搬性、制御性をエンタープライズチームが持つことができます。
-
- Agility -機敏性-
- 開発チームは、新しいマイクロサービスアプリケーションを迅速に作成してパッチを適用したり、既存のアプリケーションをコンテナ化してIT運用チームに渡すことができます。IT運用チームは、レジストリからイメージを取得し、アプリケーションを起動し、アプリケーションを本番環境に迅速に展開することができます。チームは長期間かかっていたアプリケーションのデプロイを、DevOpsのワークフローに載せる事により合理化し、13倍の頻度でデプロイできるようになります。
-
- Portability -可搬性-
- Docker化されたアプリケーションは、どのインフラストラクチャやあらゆる環境でも実行できるため、チームはアプリケーションをクラウドに移行することもできます。IT運営チームはポータブルコンテナ化されたアプリケーションを、Dockerのコンテナオーケストレーションツールを使用して選択したクラウドサービスプロバイダ(AWS、Azure、Google Cloudなど)内で実行できます。また、複数のクラウドサービスプロバイダを活用し、アプリケーションをプライベートクラウドからパブリッククラウドに移行することもできます。
-
- Control -制御性-
- 開発者は、マイクロサービスやコンテナ化されたレガシーアプリケーションを実行するために必要な機能を有し、バグが見つかった場合でもすぐに修正することができます。IT運用チームは、これらの分散アプリケーションを実稼動環境で管理および展開し、マイクロサービスアプリケーションが内包する管理の複雑さを削減することができます。また、ビジネス上の要求であるインフラストラクチャの最適化やコストの削減、セキュリティの向上等を実現するために、クラウドサービス上にコンテナを移動することもできます。
Dockerを採用する3つの道
Dockerのコンテナを実際に使い始めるにあたって、チームはアプリケーションのニーズと期待される結果に対して幾つかの異なる方法があります。
最も一般的な3つの方法を見てみましょう。
- 1
-
モノリスのコンテナ化
CI導入(ビルドテスト)クラウド移行
VMと比較したCapEX/OpEXの改善
- 2
-
モノリスのマイクロサービス化
マイクロサービス化できる
サービスを選択しマイグレーションする。
- 3
-
新しくマイクロサービスを作成する
CaaSによる新規作成
-
1.既存のアプリケーションのコンテナ化
Dockerコンテナを使用して既存のレガシー(モノリシック)アプリケーションをコンテナ化します。 これを「リフト・シフト」戦略と呼びます。このケースではMerckのような顧客は、Dockerコンテナが提供する移植性の恩恵を受けました。この移植性により、ソフトウェアサプライチェーンの合理化とCI / CD戦略の開発が可能になります。次に、これらのコンテナ(アプリケーション)をVM内で実行して、リソースを最適化し、CapExとOpExの使用量を削減できます。
-
2.リファクタリングを行いコンテナ化する
たとえば、ADPのような顧客は、既存のレガシーアプリケーションをコンテナ化し、移行後に段階的にアプリケーションをマイクロサービスにリファクタリングする方法を取りました。彼らは、組織にとっての重要性とIT運用チームとの対話によってDocker化されたアプリをマイクロサービスへ移行する為の優先順位付けを行いました。
-
3.新しくマイクロサービスを構築する
Dockerを使用してチームが新しいマイクロサービスアプリケーションを構築する手助けをします。Dockerコンテナは、各分散サービスをパッケージ化し、実稼働環境で1つの実行中アプリケーションとして展開します。これは、シリコンバレーにあるDoubleDutch社の事例です。