Docker
Dockerとは
オープンソーステクノロジーを活用したDockerプラットフォームを使用すると、開発者はアプリケーションをコンテナ内に構築できるため、開発中のアプリケーションの修正や更新が容易になります。
開発者がDockerを使用する理由
Dockerを使用すると、開発者はアプリケーションをパッケージ化し、コンテナと呼ばれる仮想化環境で実行することができます。この分離とセキュリティにより、単一のホストシステム上で複数のコンテナを独立して同時に実行することが可能になります。Dockerには、コンテナのライフサイクルを管理するためのツールとプラットフォームが用意されています。
Dockerのメリット
2013年に登場したDockerは、ソフトウェア開発におけるコンテナ化の普及に貢献しました。Dockerにより、コンテナ化されたアプリケーションの構築、共有、実行が簡単になります。アプリケーションのすべての依存関係を含め、新しいコンテナを数分でセットアップすることができます。コンテナ化されたアプリケーションは、任意の場所、任意のインフラストラクチャ上で実行できるため、ポータビリティに優れています。
コンテナが役立つ理由
コンテナは軽量で、アプリケーションの実行に必要なものがすべて含まれており、ソフトウェアをホストインフラストラクチャから抽象化します。また、コンテナは互いに分離されているため、システム全体の安定性が高まります。大きなプロジェクトを複数の開発チームに分割でき、ワークロードを分散して展開までの時間を短縮できます。
Dockerの仕組み
Dockerでは、Linuxカーネルのいくつかの機能を利用して、Dockerの機能を実現しています。コンテナを構築するために名前空間を使用します。コンテナを実行すると、Dockerによりこのコンテナ用に1組の名前空間が作成されます。この名前空間が、コンテナ分離用のレイヤーになります。コンテナの各側面は個別の名前空間で実行され、アクセスは該当する名前空間に制限されます。
ホストシステムのリソースをハードウェアレベルで抽象化する仮想マシン (VM) とは異なり、Dockerではオペレーティングシステム (OS) のレベルで抽象化が行われます。このレベルで仮想化されているため、コンテナのインスタンスはVMと比べて軽量で高速です。
Dockerが選ばれる理由
Dockerにより、ソフトウェア開発のワークフローが簡素化、高速化されます。開発者は、各プロジェクト固有のニーズに基づいて、ツール、アプリケーションスタック、展開環境を自由に選択してイノベーションを実現することができます。
Dockerは軽量かつ高速であるため、ハイパーバイザーベースのVMで実行するよりも多くのワークロードを、同じホストシステム上で実行することができます。高密度環境と、より少ないリソースでより多くのことを行う必要がある中小規模の展開の両方に適しています。
Dockerのコンテナベースのプラットフォームにより、ワークロードの高いポータビリティが実現されます。Dockerコンテナは、開発者のローカルデバイス、物理的なオンプレミスやコロケーション型データセンターのハードウェア、VMインスタンス、パブリッククラウドプラットフォーム、またはハイブリッド環境で実行することができます。このポータビリティにより、ワークロードを動的に管理し、ビジネスニーズに応じてアプリケーションやサービスをほぼリアルタイムで拡大縮小することが容易になります。
Dockerを使えば、開発者は本番サーバーと同じようなローカル環境を構築し、異なる構成の複数の開発環境を実行することができます。ソフトウェアテストを迅速に実施して、新しい変更がさまざまな環境や条件で正しく動作するかどうかを確認できるため、継続的改善/継続的開発 (CI/CD) の目標達成に役立ちます。
Dockerを使用すると、大きな開発プロジェクトを複数の小規模なアジャイルチームに分割し、ワークロードを分散して展開までの時間を短縮することもできます。このような効率的なDevOpsワークフローは、企業がソフトウェアをより頻繁に展開し、エラーからより迅速に回復し、変更の失敗率を大幅に下げるために役立ちます。
Dockerの展開とオーケストレーションの方法
ユーザーはクライアントからDockerを操作します。このクライアントは、Dockerデーモンと呼ばれる、ホスト上のコンテナを管理するバックグラウンドプロセスと通信します。このデーモンは、Docker環境に関するすべてをトラッキングします。
システムの中核であるDocker Engineは、クライアントサーバー アーキテクチャーを採用したアプリケーションで、ホストマシンにインストールされます。ホストは、アプリケーションを実行する環境を提供します。ホストには、Dockerデーモンと以下のDockerオブジェクトが収容されています。
- イメージは、コンテナの構築に使用される読み取り専用のバイナリテンプレートです。メタデータにより、コンテナの機能とニーズを記述します。イメージは、それだけで使用してコンテナを構築することも、カスタマイズして要素を追加したり現在の構成を拡張したりすることもできます。コンテナイメージは、組織内外で共有することができ、開発者間のコラボレーションを可能にします。
- コンテナは、イメージと、起動時に提供される追加の構成オプション (ネットワーク接続やストレージオプションなど) によって定義されます。コンテナは、イメージに定義されているリソースにのみアクセスできます。ただし、イメージをビルドしてコンテナにするときに追加のアクセスを定義できます。
- ネットワークにより、システム内の分離されたコンテナが互いに通信できます。
- コンテナ内のデータのストレージは、デフォルトでは非永続的で、コンテナの実行が終了すると消滅します。一方、Dockerにはデータボリュームやストレージプラグインといった、データを転送したり、永続的に保存したりするためのオプションが用意されています。
Dockerクライアントはデーモンと同じシステム上で実行するか、DockerクライアントからリモートのDockerデーモンに接続することができます。Dockerクライアントは複数のDockerデーモンと通信することもできます。Dockerクライアントとデーモンは、REST APIを使用して、UNIXソケットやネットワークインターフェイスを介して通信します。
Dockerの使用方法
Dockerはワークフローを簡素化、高速化するため、ソフトウェア開発チームに多くの利点を提供しますが、特にDockerが役立つ特定のシナリオがあります。
マイクロサービス アーキテクチャーの採用
多くの企業は、デジタルトランスフォーメーションの一環として、レガシーなモノリシックアプリケーションの置き換えを望んでいます。モノリシックアプリケーションが単一のユニットとして機能するのに対し、マイクロサービス アーキテクチャーでは、より小さな独立したユニットの集合体に分割されます。Dockerは、これらのマイクロサービスのコンテナ化を可能にし、その配信と管理を簡素化します。コンテナ化により、個々のマイクロサービスに独自のワークロード環境が提供され、独立した展開と拡張性が実現されます。
レガシーアプリケーションをコンテナに移す
マイクロサービスとして再構築できないアプリケーションの場合は、そのままコンテナに移すという選択肢もあります。Dockerを使用してこれらのアプリケーションをコンテナ化することで、開発とテストの効率化、展開とディザスタリカバリの簡素化ができ、新しいアプリケーションと競合しないでレガシーアプリケーションの複数のインスタンスを実行できます。
機械学習 (ML) の展開
トレーニング (学習) 済みモデルを本番環境で大規模に展開することは、機械学習の開発において最も重要な課題の1つです。Dockerは、TensorFlowなどのプラットフォームを活用してGPUサポートを可能にすることで、MLアプリケーションの開発と展開の両方を簡素化します。また、複数のマシンやクラウド上でコンテナを起動し、オーケストレーションテクノロジーでそれらすべてを管理することで、MLアプリケーションの配布も効率化されます。
サーバー統合
VMと同様に、Dockerのアプリケーション分離機能により、企業は複数のサーバーを統合してコストを削減することが可能になります。VM環境では複数OSを実行する必要がある一方、Dockerにはそのオーバーヘッドがないため、VMでは実現できない高密度なサーバー統合を実現できます。
HPEのソリューションとDocker
HPEのDocker Enterprise Editionは商業的にサポートされているサブスクリプションバンドルで、あらゆる環境にコンテナを実装するために必要なコンポーネントを備えています。DockerのBasic Editionには、コンテナエンジンとオーケストレーション機能が含まれています。Standard Editionにはイメージとアクセス管理の複数のレイヤーが追加されており、Advanced Editionを利用すると、セキュリティスキャンと脆弱性の監視を追加できます。
永続的なボリュームのプロビジョニングをわずかなコマンドで開始する際に、HPEストレージのシンプルさと耐障害性が役立ちます。HPE Nimble Storageと、HPE 3PARのオールフラッシュ、ハイブリッド、セカンダリフラッシュアレイは、コンテナ環境に適したパフォーマンスとスケールを提供します。
HPE Ezmeral Runtimeは、オープンソースのKubernetesをベースとして構築された統合アプリケーション コンテナプラットフォームであり、オンプレミスのインフラストラクチャ、複数のパブリッククラウド、ハイブリッドモデル、エッジを問わず、すべてのインフラストラクチャでクラウドネイティブと非クラウドネイティブの両方のアプリケーションを実行できるように設計されています。
このプラットフォームは、従量制課金モデルにより、HPE GreenLakeとともにas a serviceで提供できます。インストールと構成は、HPEのエンジニアが行います。また、HPEは、ソリューションのフルマネージドサービス、サポート用の単一窓口に加え、お客様の環境とビジネスに詳しいテクニカルチームを提供します。このソリューションは、標準化されたハードウェアとソフトウェアで構成されているため、手動による高コストの展開が不要になります。またデータセンターにわずか14日以内で納入されます。