Docker

menu icon

Docker

Dockerは、コンテナ化されたアプリケーションを構築、デプロイ、管理するためのオープンソース・プラットフォームです。 コンテナについて、またコンテナとVMの比較やDockerが広く採用され使用されている理由について、ご説明します。

Dockerとは

Dockerはオープンソースのコンテナ化プラットフォームです。 Dockerを使用して、開発者はアプリケーションをコンテナにパッケージ化できます。コンテナは、アプリケーションのソースコードとオペレーティング・システム(OS)ライブラリー、およびそのコードを任意の環境で実行するために必要な依存関係を組み合わせた、標準化された実行可能コンポーネントです。 コンテナは分散アプリケーションの配信を簡素化するものであり、組織のクラウドネイティブ開発とハイブリッド・マルチクラウド環境への移行が進むのに伴い、ますます人気が高まっています。

開発者はDockerなしでコンテナを作成することもできますが、このプラットフォームを使用することで、コンテナの構築、デプロイ、管理が、より簡単でシンプルかつ安全になります。 Dockerは基本的に、開発者が単一のAPIを介して簡単なコマンドと、省力化を実現する自動化を使用することで、コンテナの構築、デプロイ、実行、更新、停止を可能にするツールキットです。

Dockerは、Dockerの商用バージョンを販売する会社であるDocker, Inc.(IBM外部へのリンク)と、Docker, Inc.とその他の多くの組織や個人が貢献しているDockerオープンソース・プロジェクト(IBM外部へのリンク)を指すこともあります。

コンテナの仕組みと人気の理由

コンテナは、Linuxカーネルに組み込まれているプロセス分離と仮想化の機能によって実現されます。 これらの機能としては、 複数のプロセスにリソースを割り当てるためのコントロール・グループ(Cgroups)や、システムの他のリソースと領域に対する、プロセスのアクセスと可視性を制限するための、名前空間などが挙げられます。 こうした機能は、ハイパーバイザーが複数の仮想マシン(VM)による単一のハードウェア・サーバーのCPU、メモリー、およびその他のリソースの共有を可能にするのとほぼ同じ方法で、複数のアプリケーション・コンポーネントがホスト・オペレーティング・システムの単一インスタンスのリソースを共有できるようにします。

その結果、コンテナ・テクノロジーは、アプリケーションの分離、費用効果の高い拡張性、廃棄可能性など、VMのすべての機能とメリットに加え、 以下のように、さらなる重要なメリットももたらします。

  • 軽量化:VMとは異なり、コンテナはOSインスタンス全体とハイパーバイザーのペイロードを保持する必要がなく、コードの実行に必要なOSプロセスと依存関係のみを含みます。 (一部のVMはギガバイト単位となるのに対し)コンテナのサイズはメガバイト単位です。コンテナではハードウェア容量をより有効に活用し、起動時間を短縮できます。
  • リソース効率の向上:コンテナを使用すると、VMを使用する場合の数倍の数のアプリケーションのコピーを同じハードウェアで実行できます。 これにより、クラウドへの支出を減らすことができます。
  • 開発者の生産性の向上:VMと比較して、コンテナはデプロイ、プロビジョニング、再起動がより高速で簡単です。 これは、継続的インテグレーション継続的デリバリー(CI/CD)のパイプラインでの使用にとって理想的であり、アジャイルとDevOpsのプラクティスを採用する開発チームにとっては、より適した選択肢となります。

コンテナを使用している企業は、アプリの品質の向上、市場の変化への迅速な対応など、数多くのメリットを挙げています。 詳細については、以下のインタラクティブ・ツールでご覧ください。

レポート全体をダウンロード:企業におけるコンテナ(PDF、1.4 MB)

なぜDockerを使用するのか?

Dockerは今日非常に人気があるため、「Docker」と「コンテナ」は同じ意味で使用されています。 しかし、初期のコンテナ関連テクノロジーは、Dockerが2013年に一般にリリースされる数年前、さらには数十年前から(IBM外部へのリンク)利用可能でした。

特に、2008年にはLinuXContainers(LXC)がLinuxカーネルに実装され、Linuxの単一インスタンスの仮想化が完全に実現されています。 LXCは現在でも使用されているものの、Linuxカーネルを使用した新しいテクノロジーが登場しています。最新のオープンソースのLinuxオペレーティング・システムであるUbuntuも、この機能を備えています。

Dockerでは、以下を実現する各種テクノロジーを活用して、ネイティブのLinuxコンテナ化機能を強化しています。

  • 改善された、シームレスな移植性:LXCコンテナは多くの場合、マシン固有の構成を参照しますが、Dockerコンテナは変更なしで、あらゆるデスクトップ、データセンター、クラウド環境で実行できます。
  • さらに軽量で詳細な更新:LXCでは、複数のプロセスを1つのコンテナ内で組み合わせて実行することがあります。 Dockerコンテナでは、各コンテナで実行できるプロセスは1つだけです。 これにより、アプリケーションの一部が更新または修復のために停止されている間も実行を継続可能なアプリケーションを構築できます。
  • コンテナの自動作成:Dockerは、アプリケーションのソースコードに基づいてコンテナを自動的に構築できます。
  • コンテナのバージョン管理:Dockerでは、コンテナ・イメージのバージョンの追跡、以前のバージョンへのロールバック、誰がどのようにバージョンを作成したかのトレースが可能です。 既存のバージョンと新しいバージョンの差分のみをアップロードすることもできます。
  • コンテナの再利用:既存のコンテナは、基本的に新しいコンテナを構築するためのテンプレートのように、ベース・イメージとして使用できます。
  • 共有コンテナ・ライブラリー:開発者は、ユーザーが寄与した何千ものコンテナが含まれる、オープンソースのレジストリーにアクセスできます。

現在、Dockerコンテナ化はMicrosoft Windowsサーバーでも機能します。 また、ほとんどのクラウド・プロバイダーは、開発者がDockerでコンテナ化されたアプリケーションを構築、出荷、実行するのに役立つ、特定のサービスを提供しています。

こうした理由から、Dockerの採用はすぐに爆発的に広がり、急増し続けています。 この記事の執筆時点で、Docker Inc.は、開発者数は1,100万人、毎月のコンテナ・イメージのダウンロード数は130億に上ると述べています(IBM外部へのリンク)。

Dockerのツールと用語

Dockerを使用するときに遭遇するツールと用語には、次のようなものがあります。

DockerFile

すべてのDockerコンテナは、Dockerコンテナ・イメージを構築する方法についての説明を含む、単純なテキスト・ファイルで始まります。DockerFileは、Dockerイメージの作成プロセスを自動化します。 基本的には、イメージをアセンブルするためにDocker Engineが実行するコマンド・ライン・インターフェース(CLI)の命令のリストです。

Dockerイメージ

Dockerイメージには、実行可能なアプリケーション・ソースコードと、アプリケーション・コードをコンテナとして実行するために必要な、すべてのツール、ライブラリー、および依存関係が含まれています。 Dockerイメージを実行すると、コンテナの1つのインスタンス(または複数のインスタンス)になります。

Dockerイメージを最初から作成することは可能ですが、ほとんどの開発者はイメージを一般的なリポジトリーからプルします。 1つのベース・イメージから複数のDockerイメージを作成でき、それらのイメージでスタックは共通したものとなります。

Dockerイメージはレイヤーで構成されており、各レイヤーはイメージのバージョンに対応しています。 開発者がイメージに変更を加えるたびに、新しい最上位レイヤーが作成され、前の最上位レイヤーに替わってこのイメージの現行バージョンとなります。 前のレイヤーは、ロールバック用に、あるいは他のプロジェクトでの再利用のために保存されます。

Dockerイメージからコンテナが作成されるたびに、コンテナ・レイヤーと呼ばれるさらに別の新しいレイヤーが作成されます。 ファイルの追加や削除など、コンテナに加えられた変更は、コンテナ・レイヤーにのみ保存され、コンテナの実行中にのみ存在します。 この反復的なイメージ作成プロセスにより、複数のライブ・コンテナ・インスタンスを単一のベース・イメージから実行でき、またその際にはインスタンスで共通のスタックが活用されるため、全体的な効率が向上します。

Dockerコンテナ

Dockerコンテナは、あるDockerイメージの、実行中のライブのインスタンスです。 Dockerイメージは読み取り専用ファイルですが、コンテナはライブの一時的な実行可能コンテンツです。 ユーザーはコンテナと対話でき、管理者はdockerコマンドを使用してコンテナの設定と条件を調整できます。

Docker Hub

Docker Hub(IBM外部へのリンク)は、「コンテナ・イメージの世界最大のライブラリーとコミュニティー」を自称する、Dockerイメージのパブリック・リポジトリーです。商用ソフトウェア・ベンダー、オープンソース・プロジェクト、および個人の開発者から提供された、100,000を超えるコンテナ・イメージを保持しています。 これには、Docker, Inc.によって作成されたイメージ、Docker Trusted Registryに属する認定イメージ、および、その他の何千ものイメージが含まれます。

すべてのDocker Hubのユーザーは、イメージを自由に共有できます。 また、Dockerファイル・システムから事前定義されたベース・イメージをダウンロードして、コンテナ化プロジェクトの開始点として使用することもできます。

Dockerデーモン

Dockerデーモンは、Microsoft Windows、Apple MacOS、iOSなどのオペレーティング・システムで実行されるサービスです。 このサービスは、クライアントからのコマンドを使用してDockerイメージを作成して管理し、Docker実装のコントロール・センターとして機能するものです。

Dockerレジストリー

Dockerレジストリーは、Dockerイメージ用の、拡張が容易なオープンソースのストレージと配布システムです。 レジストリーを使用すると、識別用のタグ付けによって、リポジトリー内のイメージのバージョンを追跡できます。 これは、バージョン管理ツールであるgitを使用して行われます。

Dockerのデプロイメントとオーケストレーション

業界で事実上、標準のランタイムとなっているDocker Engine内でのアプリケーション管理は、実行しているコンテナが少なければ、非常に簡単です。 ただし、デプロイメントが数千のコンテナと数百のサービスで構成されている場合、そのワークフローを次のような専用ツールを使用せずに管理することはほぼ不可能です。

Docker Compose

すべてが同じホスト上にある複数のコンテナ内のプロセスからアプリケーションを構築している場合は、Docker Composeを使用してアプリケーションのアーキテクチャーを管理できます。Docker Composeは、アプリケーションに含まれるサービスを指定するYAMLファイルを作成し、単一のコマンドでコンテナをデプロイして実行できます。 また、Docker Composeを使用すると、ストレージの永続ボリュームの定義、ベース・ノードの指定、サービスの依存関係の文書化と構成を行うこともできます。

Kubernetes

より複雑な環境でコンテナのライフサイクルを監視および管理するには、コンテナ・オーケストレーション・ツールを使用する必要があります。 Dockerには独自のオーケストレーション・ツール(Docker Swarmと呼ばれる)が含まれていますが、ほとんどの開発者はKubernetesを選択します。

Kubernetesは、Google社で社内使用のために開発されたプロジェクトから派生した、オープンソースのコンテナ・オーケストレーション・プラットフォームです。Kubernetesは、コンテナのデプロイメント、更新、サービス・ディスカバリー、ストレージのプロビジョニング、ロード・バランシング、正常性モニタリングなど、コンテナ・ベースのアーキテクチャーの管理に不可欠なタスクをスケジュールおよび自動化します。 さらに、IstioKnativeなどのKubernetes用のツールのオープンソース・エコシステムにより、組織はコンテナ化されたアプリケーション向けの生産性の高いPaaS(Platform as a Service)を導入できると共に、より迅速にサーバーレス・コンピューティングを展開することが可能となります。

Kubernetesの詳細については、動画「Kubernetesの説明(Kubernetes Explained)」をご覧ください。

Kubernetesの説明(Kubernetes Explained)(10:59)

DockerとIBM Cloud

エンタープライズ・コンテナ・プラットフォームは、複数のパブリッククラウドとプライベートクラウドにまたがるオーケストレーションを提供し、環境を統合してビジネス・パフォーマンスと運用パフォーマンスを向上させます。 これは、ベンダーの囲い込みを回避し、どこでも一貫性をもってワークロードを構築して実行し、お客様のすべてのITを最適化してモダナイズできるようにするための、オープン・ハイブリッドクラウド戦略の重要な構成要素です。

詳細情報はこちら:

  • IBM Cloudのエンタープライズ・レベルのスケールとセキュリティーを活用して、更新、スケーリング、プロビジョニングを自動化する、OpenShiftのマネージド・サービスであるRed Hat OpenShift on IBM Cloudを使用して、可用性の高いフルマネージドKubernetesクラスターをデプロイします。
  • マネージド分散クラウド・ソリューションであるIBM Cloud Satelliteを使用して、ベンダーを問わず、オンプレミス、エッジコンピューティング、パブリッククラウドの環境全体でアプリをデプロイして実行できます。
  • IBMのハイブリッドクラウド・ストレージ・ソリューションを使用して、オンプレミスとパブリッククラウドの環境全体にコンテナ対応のエンタープライズ・ストレージをシームレスに展開することで、データレイクを簡素化して統合します。
  • IBM Cloudマネージド・サービスを使用して、複雑なハイブリッドIT管理をシンプルにします。

IBM Cloudアカウントを今すぐ始めましょう。