Docker メモ書き
目次
-
- 3.1. Docker エンジン
- 3.2. Docker クライアント
- 3.3. Docker サーバー
- 3.4. Docker Hub
-
- 4.1. コンテナーとは
- 4.2. ソフトウェアのコンテナー化とは
-
- 5.1. コンテナー イメージとは
- 5.2. ホスト OS とは
- 5.3. コンテナー OS とは
- 5.4. スタック可能な統合ファイル システム (Unionfs) とは
- 5.5. 基本イメージとは
- 5.6. 親イメージとは
- 5.7. 基本イメージと親イメージの主な違い
- 5.8. Dockerfile とは
はじめに
Microsoft Learn の Docker コンテナーの概要 から抜粋して概念と用語を整理。
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 クライアントには 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 Hub
Docker Hub は、サービスとしてのソフトウェア (SaaS) の Docker コンテナー レジストリです。 Docker レジストリは、作成したコンテナー イメージを格納して配布するために使用するリポジトリです。 Docker Hub は、Docker でイメージ管理に使用される既定のパブリック レジストリです。
プライベート Docker レジストリを作成して使用することも、利用可能な多くのクラウド プロバイダー オプションのいずれかを使用することもできることに留意してください。 たとえば、Azure Container Registry を使用してコンテナー イメージを格納し、複数の Azure Container 対応サービスで使用できます。
コンテナー
コンテナーとは
コンテナーとは、ソフトウェア パッケージを構築して実行できる、緩く分離された環境です。 これらのソフトウェア パッケージには、任意のコンピューティング環境でアプリケーションを迅速かつ確実に実行するためのコードとすべての依存関係が含まれています。 これらのパッケージは、"コンテナー イメージ" と呼ばれます。 コンテナー イメージは、アプリケーションの配布に使用される単位になります。
ソフトウェアのコンテナー化とは
ソフトウェアのコンテナ化は OS 仮想化のひとつの方法で、仮想マシン (VM) を使用せずにコンテナーをデプロイして実行するのに使用されます。 コンテナーは、物理ハードウェア、クラウド、VM、さらに複数のオペレーティング システムで実行できます。
Dockerイメージ(コンテナー イメージ)
コンテナー イメージとは
コンテナー イメージは、ソフトウェアが含まれている移植可能なパッケージです。 このイメージを実行すると、コンテナーになります。 コンテナーは、イメージのメモリ内インスタンスです。
コンテナー イメージは変更できません。 イメージは、ビルドすると変更できません。 イメージを変更する唯一の方法は、新しいイメージを作成することです。 この機能により、運用環境で使用されるイメージが、開発および QA で使用されるイメージと同じであることが保証されます。
ホスト OS とは
ホスト OS は、Docker エンジンが実行される OS です。 Linux 上で実行される Docker コンテナーはホスト OS カーネルを共有していて、バイナリが OS カーネルに直接アクセスできる限り、コンテナー OS は必要ありません。
ただし、Windows コンテナーにはコンテナー OS が必要です。 コンテナーでは、ファイル システム、ネットワーク管理、プロセス スケジューリング、メモリ管理などのサービスの管理には、OS カーネルが利用されます。
コンテナー OS とは
コンテナー OS とは、パッケージ化されたイメージの一部である OS です。 異なるバージョンの Linux や Windows オペレーティング システムを、1 つのコンテナーに柔軟に含めることができます。 この柔軟性により、特定の OS の機能へのアクセスや、アプリケーションが使用する追加のソフトウェアのインストールを実行できます。
コンテナー OS は、ホスト OS から分離されている、アプリケーションをデプロイして実行する環境です。 イメージの不変性と組み合わされることで、この分離は、開発でのアプリケーションの実行環境が運用環境と同じであることを意味します。
この例では、コンテナー OS として Ubuntu Linux を使用していて、この OS は開発から運用になっても変わりません。 使用するイメージは常に同じです。
スタック可能な統合ファイル システム (Unionfs) とは
※Unionfs の読み:ゆにおんえふえす Docker イメージの作成に Unionfs を使用します。 Unionfs は、ブランチと呼ばれる複数のディレクトリを、内容がマージされているかのようにスタックできるファイル システムです。 ただし、内容は物理的に個別に保持されます。 Unionfs では、ファイル システムを構築するときに、ブランチを追加および削除できます。
たとえば、前に作成した Web アプリケーションのイメージをビルドしているものとします。 ブート ファイル システムの最上位に、基本イメージとして Ubuntu ディストリビューションをレイヤー化します。 次に、Nginx と Web アプリをインストールします。 実質的には、元の Ubuntu イメージの上に、Nginx と Web アプリをレイヤー化することになります。
コンテナーがイメージから実行されると、最終的な書き込み可能レイヤーが作成されます。 ただし、このレイヤーは、コンテナーが破棄されるときに保持されません。
基本イメージとは
基本イメージとは、Docker の scratch イメージを使用するイメージです。 scratch イメージは、ファイル システム レイヤーが作成されない空のコンテナー イメージです。 このイメージでは、実行するアプリケーションはホスト OS カーネルを直接使用できることが想定されています。
親イメージとは
親イメージとは、イメージを作成する元になるコンテナー イメージです。
たとえば、scratch からイメージを作成した後で Ubuntu をインストールするのではなく、既に Ubuntu が基盤であるイメージを使用します。 Nginx が既にインストールされているイメージを使用することもできます。 通常、親イメージにはコンテナー OS が含まれます。
基本イメージと親イメージの主な違い
どちらの種類のイメージでも、再利用可能なイメージを作成できます。 ただし、基本イメージを使用する方が、最終的なイメージの内容を制御できる範囲が広くなります。 イメージは不変であり、イメージへの追加だけができてイメージからの削除はできないという前の説明を思い出してください。
Windows では、Windows の基本コンテナー イメージに基づくコンテナー イメージのみを作成できます。 Microsoft は、以降の Windows ベース コンテナー イメージを提供およびサービスします。
Dockerfile とは
Dockerfile は、Docker イメージをビルドして実行するために使用する命令が含まれているテキスト ファイルです。 イメージの次の側面が定義されています。
- 新しいイメージを作成するために使用する基本イメージまたは親イメージ
- ベース OS を更新して追加のソフトウェアをインストールするためのコマンド
- 開発したアプリケーションなど、含めるビルド成果物
- ストレージやネットワーク構成など、公開するサービス
- コンテナーが起動されるときに実行するコマンド
Dockerのメリット7選
- Dockerのメリット① 簡単に環境構築
- Dockerのメリット② 軽量でスピーディーな開発
- Dockerのメリット③ ハードウェアの資源削減
- Dockerのメリット④ 共有化されたシステム
- Dockerのメリット⑤ イミュータブル・インフラストラクチャである
- Dockerのメリット⑥ 物理サーバの考慮を後回しにできる
- Dockerのメリット⑦ モダンなエコシステム
Dockerの3つのデメリット
- Dockerのデメリット① 同一のOS(カーネル)を利用すること
- Dockerのデメリット② 提供できるホストの種類が少ない
- Dockerのデメリット③ 習得に時間がかかる