Dockerとは

オーストラリア、キャンベラの航空写真

共同執筆者

Stephanie Susnjara

Staff Writer

IBM Think

Ian Smalley

Staff Editor

IBM Think

Dockerとは

Dockerとは、開発者がコンテナ化されたアプリケーションを構築、展開、実行、更新、管理できるオープンソース・プラットフォームです。

コンテナとは標準的で実行可能なアプリケーション・コンポーネントであり、アプリケーション・ソース・コードと、そのコードをあらゆる環境で実行するために必要なオペレーティング・システム(OS)ライブラリーや依存関係を組み合わせています。

ここで注意しておきたいのは、「Docker」とは通常、コンテナを構築および実行するためのランタイムであるDocker Engineや、Docker商用版を販売しているDocker社1を指しています。また、Docker社をはじめとする多くの組織や個人が寄与するDockerオープンソース・プロジェクト2にも関連しています。

コンテナは、分散アプリケーションの開発と配信を簡素化します。クラウド・ネイティブ開発とハイブリッド・マルチクラウド環境への移行が進む中で、コンテナの人気は高まっています。開発者は Linux®やその他のオペレーティングシステムに組み込まれている機能を直接使用することで、Dockerなしでコンテナを作成できますが、Dockerを使用するとコンテナ化がより迅速かつ簡単になります。この記事を書いている時点で、Docker社は毎月2000万人以上の開発者がこのプラットフォームを利用していると報告しています3Kubernetesを含む他のコンテナ化技術と同様に、Dockerは最新のソフトウェア開発、特にマイクロサービス・アーキテクチャにおいて重要な役割を果たしています。

マイクロサービスとは

大規模で密結合されたアプリケーションの、従来のモノリシックなアプローチとは対照的に、マイクロサービスはクラウド・ネイティブのアーキテクチャー・フレームワークを提供します。このフレームワークは、多数の小規模で、疎結合で、独立して導入可能な小規模なコンポーネントまたはサービスから単一のアプリケーションを構成します。各サービスはDockerを使用してコンテナ化できるため、導入が簡素化され、チームは新しいバージョンを導入し、必要に応じてアプリケーションを拡張できます。

ビジネス街をバックにスマホを持つ手

The DX Leaders

「The DX Leaders」は日本語でお届けするニュースレターです。AI活用のグローバル・トレンドや日本の市場動向を踏まえたDX、生成AIの最新情報を毎月お届けします。

コンテナの働き

コンテナは、Linuxカーネルに組み込まれたプロセス分離および仮想化機能によって利用可能となります。これらの機能には、プロセス間でリソースを割り当てる制御グループ(Cgroups)や、システムの他のリソースまたはエリアへのアクセスや可視性を制限する名前空間が含まれます。

これにより、複数のアプリケーション・コンポーネントが、ホスト・オペレーティング・システムの単一インスタンスのリソースを共有できるようにします。この共有は、ハイパーバイザーが、複数の仮想マシン(VM)が単一のハードウェア・サーバーの中央処理装置(CPU)、メモリーやその他のリソースを共有できるようにする方法に類似しています。

コンテナ・テクノロジーは、アプリケーションの分離やコスト効率の高い拡張性など、仮想マシン(VM)のすべての機能とメリットに加えて、その他の重要な利点も提供します。

  • 軽量化: VMと異なり、コンテナにはOSインスタンスとハイパーバイザー全体のペイロードがない。コンテナには、コード実行に必要なOSプロセスと依存関係のみが含まれており、コンテナのサイズはメガバイト単位で測定され(一部のVMではギガバイト)、ハードウェア容量をより有効に活用し、起動時間も速くなる。

  • 開発者の生産性向上: コンテナ化されたアプリケーションは、一度作成するだけで、場所を問わず実行できる。また、VMと比較して、コンテナは導入、プロビジョニング、再起動がより迅速かつ容易。

  • 効率性の向上: コンテナを使用すると、開発者はVMを使用する場合と比較して、同じハードウェア上でアプリケーションの数倍のコピーを実行できます。この効率化により、クラウドの支出を削減できます。

コンテナを使用する組織は、アプリケーションの品質向上、市場の変化への対応の迅速化など、他にも多くのメリットを報告しています。

AI Academy

ハイブリッドクラウドでAI対応を実現

IBMのエキスパートが主催するこのカリキュラムは、ビジネス・リーダーが成長を促進するAI投資に優先順位を付けるために必要な知識を習得できます。

Dockerが人気の理由

Dockerは最も広く使われているコンテナ化ツールで、市場シェアは実に82.84%です。4現在、Dockerは非常に人気があるため、「Docker」は「コンテナ」の代名詞として使用されるほどですが、史上初のコンテナ関連技術は、2013年にDockerがオープンソースとして公開される前に、数年も数十年も前に利用可能でした。5

特に2008年には、LinuxカーネルにLinuXContainers(LXC)が実装され、Linuxの単一インスタンスでの仮想化が完全に可能となりました。LXCは現在でも使用されていますが、より新しいLinuxカーネル・テクノロジーも利用できます。最新のオープンソースLinuxオペレーティングシステムであるUbuntuも、この機能を提供しています。Dockerを利用することで、開発者は簡単なコマンドを用いてこれらのネイティブ・コンテナ化機能にアクセスし、作業を効率化するアプリケーション・プログラミング・インターフェース(API)を通じて自動化することができます。

DockerのメリットとLXCとの比較

Dockerには、互換性が低く、古いLXCよりも多くのメリットがあります。

  • 改善されたシームレスなコンテナのポータビリティー
  • さらに軽量かつ、よりきめ細かなアップデートを実現
  • コンテナの自動作成
  • コンテナのバージョン管理
  • コンテナの再利用
改善されたシームレスなコンテナのポータビリティー

LXCコンテナは多くの場合、マシン固有の構成を参照する一方で、Dockerコンテナは、デスクトップやデータ・センタークラウド・コンピューティング環境全体にまたがり、変更なしで実行されます。

さらに軽量かつ、よりきめ細かなアップデートを実現

Dockerを使用すると、開発者は単一のコンテナ内で複数のプロセスを組み合わせることができます。この柔軟性により、アプリケーションはその一部が更新または修理のために停止されている間も実行を継続できます。

コンテナの自動作成

Dockerは、アプリケーションのソースコードに基づいてコンテナを自動的に構築できます。

コンテナのバージョン管理

Dockerはコンテナ・イメージのバージョンを追跡し、以前のバージョンにロールバックし、誰がどのようにビルドしたかを追跡することができます。古いバージョンと新しいバージョンの間の更新箇所(ソフトウェア・モジュールの部分的なリリース)のみをアップロードすることもできます。

コンテナの再利用

開発者は、ユーザーが提供した何千ものコンテナを含むオープンソース・レジストリーにアクセスできます。

現在、Dockerコンテナ化はMicrosoft WindowsサーバーおよびApple MacOSでも機能します。開発者は、任意のオペレーティング・システム上でDockerコンテナを実行できます。Amazon Web Services(AWS)、Microsoft Azure、Google Cloud Services、IBM® Cloudなど、すべての主要クラウドサービス・プロバイダー(CSP)は、開発者がDockerでコンテナ化されたアプリケーションを構築、導入、実行するのに役立つ特定のサービスを提供しています。

Dockerのアーキテクチャー、条件、ツール

Dockerはクライアント/サーバー・アーキテクチャーを使用しています。以下は、Dockerに関連するコア・コンポーネントと、それ以外のDockerの条件およびツールの内訳です。

Dockerホスト:DockerホストはLinux(または他のDocker Engine対応OS)を実行している物理マシンまたは仮想マシンです。

Dockerエンジン:Dockerエンジンは、Dockerデーモン、デーモンと連携するDocker API、およびデーモンと通信するコマンド・ライン・インターフェース(CLI)で構成されるクライアント/サーバー・アプリケーションです。

Dockerデーモン:Dockerデーモンは、お客様からのコマンドを使用してDockerイメージを作成および管理するサービスです。基本的に、DockerデーモンはDocker導入のコントロール・センターとして機能します。

Dockerクライアント:Dockerクライアントは、Docker API(REST API)にアクセスして、Unixソケットまたはネットワーク・インターフェースを介してDockerデーモンと通信するCLIを提供します。クライアントをデーモンにリモートで接続することも、開発者が同じコンピューター・システム上でデーモンとクライアントを実行することもできます。

Dockerオブジェクト:Dockerオブジェクトは、アプリケーションのパッケージ化と配信に役立つDocker導入のコンポーネントです。これには、イメージ、コンテナ、ネットワーク、ボリューム、プラグインなどが含まれます。

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

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

Dockerイメージを最初から構築することも可能ですが、ほとんどの開発者は共通リポジトリからDockerイメージをプルダウンします。開発者は単一の基本イメージから複数のDockerイメージを作成可能で、スタックの共通事項を共有できます。

Dockerイメージはレイヤーで構成されており、各レイヤーはイメージのバージョンに対応しています。開発者がイメージに変更を加えるたびに、新しいトップ・レイヤーが作成され、このトップ・レイヤーがイメージの現在のバージョンとして以前のトップ・レイヤーに置き換えられます。以前のレイヤーは、ロールバックまたは他のプロジェクトで再利用するために保存されます。

Dockerイメージからコンテナが作成されるたびに、コンテナ・レイヤーと呼ばれるさらに別の新しいレイヤーが作成されます。ファイルの追加や削除など、コンテナに加えられた変更はコンテナ層に保存され、これらの変更はコンテナの実行中にのみ存在します。

この反復的なイメージ作成プロセスにより、複数のライブ・コンテナ・インスタンスが1つのベース・イメージから実行でき、その際に共通のスタックが使用されるため、全体的な効率が向上します。

Dockerビルド:Dockerビルドは、Dockerイメージをビルドするためのツールや機能を備えたコマンドです。

Dockerfile:すべてのDockerコンテナは、Dockerコンテナ・イメージの構築方法を記したシンプルなテキスト・ファイルから始まります。DockerfileはDockerイメージの作成プロセスを自動化します。これは基本的に、Docker Engineがイメージを組み立てるために実行するCLI命令のリストです。Dockerコマンドのリストは膨大ですが、標準化されています。Dockerの操作は、コンテンツ、インフラストラクチャー、その他の環境変数に関係なく、同じように機能します。

Dockerドキュメンテーション:Dockerドキュメンテーション、またはDocker Docsとは、コンテナ化されたアプリケーションを構築するためのリソース、マニュアル、ガイドの公式なDockerライブラリーを指します。

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

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

GitHub8などの他のイメージ・リポジトリーも存在します。GitHubはリポジトリー・ホスティング・サービスであり、アプリケーション開発ツールとして、またコラボレーションとコミュニケーションを促進するプラットフォームとしてよく知られています。Docker Hubのユーザーは、多くのイメージを保持できるリポジトリーを作成できます。リポジトリーはパブリックまたはプライベートにでき、GitHubまたはBitBucketアカウントにリンクできます。

Dockerデスクトップ:Dockerデスクトップは、Docker Engine、Docker CLI クライアント、Docker Compose、Kubernetesなどが含まれるMacまたはWindows用のアプリケーションです。また、Docker Hubへのアクセスも提供します。

Dockerレジストリー:Dockerレジストリーは、Dockerイメージ用のスケーラブルでオープンソースのストレージおよび配信システムです。これにより、開発者は識別用のタグ付けを使用して、リポジトリー内のイメージのバージョンを追跡できるようになります。この追跡と識別は、バージョン管理ツールであるGitを使用して行われます。

Dockerプラグイン:開発者はプラグインを使用してDocker Engineをさらに機能的にしています。Docker Engineプラグイン・システムには、認証、ボリューム、ネットワークをサポートするいくつかのDockerプラグインが含まれています。サードパーティーのプラグインも読み込めます。

Docker拡張機能:Docker拡張機能により、開発者はDocker Desktop内でサードパーティー・ツールを使用し、その機能を拡張することができます。開発者ツールの拡張機能には、Kubernetesアプリケーション開発、セキュリティー、オブザーバビリティなどが含まれます。

Docker Compose: 開発者はDocker Composeを使用して、すべてのコンテナが同じDockerホスト上で実行されるマルチコンテナ・アプリケーションを管理できます。Docker Composeは、アプリケーションに含まれるサービスを指定するYAML(.YML)ファイルを作成し、1つのコマンドでコンテナを導入して実行できます。YAML構文は言語に依存しないため、YAMLファイルはJava、Python、Ruby、その他多くの言語で記述されたプログラムで使用できます。

開発者は、Docker Composeを使用してストレージの永続ボリュームを定義し、ベース・ノードを指定してサービスの依存関係をドキュメント化および構成することもできます。

Kubernetesおよびコンテナのオーケストレーション

少数のコンテナを実行する場合、業界の事実上のランタイムであるDocker Engine内でアプリケーションを管理するのは非常に簡単です。しかし、数千のコンテナと数百のサービスで構成されるデプロイメントの場合、コンテナ・オーケストレーション・ツールを使用せずにコンテナのライフサイクルを監視および管理することはほぼ不可能です。

Dockerには独自のオーケストレーション・ツール(Docker Swarm)が含まれていますが、業界標準はKubernetesです。その他の人気のあるコンテナ・オーケストレーション・プラットフォームには、Apache MesosやNomadなどがあります。

Kubernetesは、Googleの内部使用のために開発されたプロジェクト「Borg」から派生したオープンソースのコンテナ・オーケストレーション・プラットフォームです。2014年に一般公開されたKubernetesは、コンテナの導入、更新、サービスの検出、ストレージのプロビジョニング、負荷分散、健全性監視など、コンテナ・ベースのアーキテクチャーの管理に不可欠なタスクをスケジュールおよび自動化します。2015年、Google社はKubernetesを、オープンソースでベンダー・ニュートラルなクラウド・ネイティブ・コンピューティングのハブである、Cloud Native Computing Foundation(CNCF)9に寄付しました。

さらに、IstioKnativeTektonなどの Kubernetes用のツールのオープンソース・エコシステムにより、組織はコンテナ化されたアプリケーション向けに生産性の高いプラットフォーム・アズ・ア・サービス(PaaS)を導入できます。このエコシステムは、サーバーレス・コンピューティングへのより迅速な導入も可能にします。

Dockerとコンテナの業界標準

オープン・コンテナ・イニシアチブ(OCI)10は、Dockerがコンテナ・イメージ仕様とランタイム・コード「runc」を寄付した後の2015年に設立され、コンテナ・イメージ形式とランタイムに関するオープンな業界標準の作成に取り組むLinux Foundationのプロジェクトです。OCIは、Docker社、IBM、Red Hat社などの大手企業で構成されており、イノベーションを支援しながら、組織がベンダーロックインを回避しやすいようサポートしています。

Dockerは最もよく知られ、よく使用されているコンテナ・テクノロジーですが、より広範なエコシステムは、コンテナ化や他の代替手段(LXC、CRI-O、Podmanなど)で標準化されています。2017年、Dockerはコンテナ化プロジェクトをCNCFに寄付しました。コンテナ化は、「runc」を使用する業界標準のコンテナ・ランタイムであり、Docker Engineのコア・コンテナ・ランタイムです。

Dockerのセキュリティー

コンテナ化されたワークロードを取り巻く複雑さには、コンテナとその基盤となるインフラストラクチャーを保護するセキュリティー対策の導入・維持が欠かせません。Dockerコンテナのセキュリティー対策は、コンテナ化されたアプリケーションをセキュリティ侵害、マルウェアや悪意のある行為者から保護するために設計されています。

Dockerコンテナは相互に分離されており、またホスト・システムからも分離されているため、固有のセキュリティー・レベルが設計段階で備わっています。ただし、この分離は絶対的なものではありません。Dockerのセキュリティーは、コンテナのランタイム、ビルド、オーケストレーションを含む包括的なゼロトラスト・フレームワークを中心に展開しています。

Dockerやその他のコンテナ関連のセキュリティー・ニーズにより、DevSecOpsの人気が高まっています。これは、設計の初期段階から統合、テスト、配信、導入に至るまで、ソフトウェア開発ライフサイクルのあらゆる段階でセキュリティー対策の統合を自動化するセキュリティー・アプローチです。また、Dockerセキュリティーのベスト・プラクティスには、本番環境に影響を与える前にセキュリティー上の問題を検知できる、スキャンや監視などのサードパーティ製のコンテナ・セキュリティー・ツールおよびソリューションが含まれています。

Dockerのユースケース

クラウド移行

Dockerのポータビリティーは、データ、アプリケーション、ワークロードをオンプレミスのデータセンターからクラウド・ベースのインフラストラクチャーに移動したり、あるクラウド環境から別のクラウド環境に移動したりする場合でも、さまざまな環境からのクラウド移行プロセスを簡素化および高速化します。

マイクロサービス・アーキテクチャー(マイクロサービス)

Statista社によると、世界の大企業の85%以上が、アプリケーション開発にマイクロサービスを利用しています11。Dockerは、各マイクロサービスをコンテナ化して個別にスケーリングおよび管理できるため、開発者が特定の環境を構成・管理する必要がなくなり、アプリケーションの導入を簡素化します。

継続的インティグレーション/継続的デリバリー(CI/CD)

Dockerは、アプリケーションのテストと導入のための一貫した環境を提供し、導入中に発生する可能性のあるエラーを減らすため、継続的インテグレーション継続的デリバリー(CI/CD)のパイプラインにおいて理想的です。

DevOps

ソフトウェア開発アプローチとしてのマイクロサービスとDockerを組み合わせることで、DevOps チームに強固な基盤が構築されます。これにより、アジャイルなプラクティスを採用できるようになり、迅速な反復と実験が可能になります。これは、市場が要求する速度でソフトウェアとサービスを提供するために不可欠です。

ハイブリッド・マルチクラウドの導入

Dockerのような軽量コンテナ技術により、異なる環境間でアプリケーションを簡単に移動させることができます。すべての主要なクラウド・サービス・プロバイダーは、オンプレミス、パブリック・クラウドプライベート・クラウドエッジ構成を統合したハイブリッドクラウド環境でのDocker実行をサポートする、Docker関連の開発および管理サービスを提供しています。Dockerは、複数のクラウド・ベンダーによるクラウド・サービスである、マルチクラウドのITインフラストラクチャー全体に簡単に導入できます。

コンテナ・アズ・ア・サービス(CaaS)

コンテナ・アズ・ア・サービス(CaaS)は、開発者がコンテナ化されたアプリケーションを管理および導入することを可能にし、Dockerコンテナを大規模に実行することを容易にします。主要なCSPはすべて、インフラストラクチャー・アズ・ア・サービス(IaaS)ソフトウェア・アズ・ア・サービス(SaaS)などとともに、クラウド・サービスのポートフォリオの一部としてCaaSを提供しています。

人工知能/機械学習(AI/ML)

Dockerは、高速で簡単、さらにポータビリティーが高いアプリケーション開発により、人工知能機械学習の開発を加速し、イノベーションと市場投入までの時間を短縮します。また、Docker Hubには、AL/ML開発チームをさらにサポートする何百件ものAL/MLイメージがあります。2023年、Docker社はDocker AI12を発売しました。これは、開発者がDockerfileまたはDocker Composeファイルを編集する際に、コンテキスト固有の自動ガイダンスを提供します。

関連ソリューション
IBM Red Hat OpenShift

Red Hat OpenShift on IBM Cloudは、フルマネージドのOpenShiftコンテナ・プラットフォーム(OCP)です。

Red Hat OpenShiftの詳細はこちら
コンテナ・ソリューション

コンテナ・ソリューションは、セキュリティー、オープンソースのイノベーション、迅速なデプロイメントにより、コンテナ化されたワークロードを実行およびスケールアップします。

コンテナの詳細はこちら
クラウド・コンサルティング・サービス 

IBMのクラウド・コンサルティング・サービスで新しい機能にアクセスし、ビジネスの俊敏性を高めましょう。ハイブリッドクラウド戦略や専門家とのパートナーシップを通じて、ソリューションを共創し、デジタル・トランスフォーメーションを加速させ、パフォーマンスを最適化する方法をご覧ください。

クラウド・サービス
次のステップ

IBMのコンテナ・ソリューションでインフラストラクチャーをモダナイズします。IBMの包括的なコンテナ・プラットフォームを使用して、柔軟性、セキュリティー、効率性を備えたコンテナ化されたワークロードを環境全体で実行、拡張、管理します。

コンテナ・ソリューションの詳細はこちら 無料のIBM Cloudアカウントを作成