Docker とは
Docker コンテナーの簡単なツアーを始める前に、チームでどのようにアプリケーションの開発とデプロイが行われているか見てみましょう。 また、チームが直面する課題についても、いくつか簡単に説明します。
通常、社内でアプリケーションを開発および管理するプロセスには、1 つ以上のチームが含まれます。 ソフトウェアを作成する開発チームと、これらのアプリケーションのデプロイを担当する運用チームがあります。 運用チームは、アプリケーション ホスティング インフラストラクチャの管理も担当しています。
たとえば、会社のさまざまな店舗で使用する注文追跡ポータルを開発しているとします。 アプリの開発と発行のプロセスの間に、複数の環境でアプリケーションがホストされます。 最初に、開発チームは開発環境でソフトウェアを開発し、テストします。 ここから、ソフトウェアは品質保証 (QA) 環境にデプロイされた後、運用前環境を経て、最終的な運用環境にデプロイされます。
上記のシナリオでは、以下のいくつかの課題について考慮する必要があります。
ホスティング環境の管理
さまざまな環境のすべてにおいて、ソフトウェアとハードウェア両方の管理が必要になります。 それぞれでインストールされているソフトウェアと構成されているハードウェアを、同じものにする必要があります。 また、環境ごとのネットワーク アクセス、データ ストレージ、セキュリティなどの側面を、一貫性があり簡単に再現できる方法で構成する必要もあります。
ソフトウェア配信の継続性
環境へのアプリケーションのデプロイは、一貫性を確保して行われる必要があります。 各展開パッケージには、すべてのシステム パッケージ、バイナリ、ライブラリ、構成ファイルなど、アプリケーションが完全に機能するために必要な各種アイテムが含まれていなければなりません。 また、これらすべての依存関係がソフトウェアのバージョンおよびアーキテクチャと一致していることを確認する必要もあります。
効率的なハードウェアの使用
デプロイされた各アプリケーションは、同じハードウェア上で実行されている他のアプリケーションから分離された方法で実行される必要があります。 サーバーごとに複数のアプリケーションを実行して、リソースを最大限に活用することを目的とします。
アプリケーションの移植性
アプリケーションの移植性が重要であることにはいくつかの理由があります。 ホスティング環境で障害が発生する場合や、アプリケーションのスケールアウトが必要になる場合があります。 どちらの場合も、結果として、ソフトウェアを新しい環境へ再デプロイすることが考えられます。 基盤となるインフラストラクチャが異なる場合でも、あるホストから別のホストにソフトウェアを移動する必要があります。 このような移動は、顧客のダウンタイムを減らすために、できるだけ迅速に行う必要があります。
これらの課題の解決に役立つ Docker の機能について説明する前に、いくつかの概念について説明し、Docker のアーキテクチャの概要を見ておきます。
コンテナーとは
コンテナーとは、ソフトウェア パッケージを構築して実行できる、緩く分離された環境です。 これらのソフトウェア パッケージには、任意のコンピューティング環境でアプリケーションを迅速かつ確実に実行するためのコードとすべての依存関係が含まれています。 これらのパッケージは、"コンテナー イメージ" と呼ばれます。
コンテナー イメージは、アプリケーションの配布に使用される単位になります。
ソフトウェアのコンテナー化とは
ソフトウェアのコンテナ化は OS 仮想化のひとつの方法で、仮想マシン (VM) を使用せずにコンテナーをデプロイして実行するのに使用されます。 コンテナーは、物理ハードウェア、クラウド、VM、さらに複数のオペレーティング システムで実行できます。
Docker とは
Docker は、コンテナーの開発、出荷、実行に使用されるコンテナー化プラットフォームです。 Docker ではハイパーバイザーは使用されず、アプリケーションを開発およびテストする場合は、デスクトップまたはノート PC で Docker を実行できます。 デスクトップ バージョンの Docker では、Linux、Windows、および macOS がサポートされています。 運用システムでは、Linux および Microsoft Windows Server 2016 以降の多くのバリエーションを含む、サーバー環境で Docker を利用できます。 Azure を含む多くのクラウドで、Docker がサポートされています。
Docker のアーキテクチャ
Docker プラットフォームは、コンテナー化されたアプリケーションをビルド、実行、管理するために使用する複数のコンポーネントで構成されています。
Docker エンジン
Docker エンジンは、クライアントとサーバーが同じホスト上で同時に実行されるクライアント/サーバーの実装として構成される、複数のコンポーネントで構成されています。 クライアントは、サーバーとの通信に REST API を使用しますが、これを使用して、リモート サーバーのインスタンスとも通信できます。
Docker サーバー、実行中のコンテナー、格納されているコンテナー イメージ間の通信を示す矢印もあります。 これらの矢印は、Docker サーバーが格納されているコンテナー イメージをどのように読み込み、実行中のコンテナーを管理しているかを示しています。
Docker クライアント
Docker クライアントには、次の 2 つの選択肢があります。1 つは docker
という名前のコマンドライン アプリケーション、もう 1 つは Docker Desktop という名前のグラフィカル ユーザー インターフェイス (GUI) ベースのアプリケーションです。 CLI と Docker Desktop の両方が Docker サーバーと対話します。 CLI または Docker Desktop で docker
コマンドを実行すると、Docker の REST API を使用してローカル サーバーまたはリモート サーバーに命令が送信されます。このコマンドはコンテナーの管理に使用する主要なインターフェイスとして機能します。
Docker サーバー
Docker サーバーは dockerd
という名前のデーモンです。 dockerd
デーモンは、Docker の REST API 経由でクライアント要求に応答し、他のデーモンと対話できます。 Docker サーバーも、コンテナーのライフサイクルの追跡を行います。
Docker オブジェクト
コンテナーのデプロイをサポートするために、複数のオブジェクトを作成して構成します。 これらには、ネットワーク、ストレージ ボリューム、プラグイン、その他のサービス オブジェクトが含まれます。 ここではこれらのオブジェクトのすべてについて説明はしませんが、これらのオブジェクトは、必要に応じて作成およびデプロイできる項目であることに注意してください。
Docker Hub
Docker Hub は、サービスとしてのソフトウェア (SaaS) の Docker コンテナー レジストリです。 Docker レジストリは、作成したコンテナー イメージを格納して配布するために使用するリポジトリです。 Docker Hub は、Docker でイメージ管理に使用される既定のパブリック レジストリです。
プライベート Docker レジストリを作成して使用することも、利用可能な多くのクラウド プロバイダー オプションのいずれかを使用することもできることに留意してください。 たとえば、Azure Container Registry を使用してコンテナー イメージを格納し、複数の Azure Container 対応サービスで使用できます。