type
status
date
slug
summary
tags
category
icon
password
Dockerアーキテクチャ概要
Dockerは、コンテナ化されたアプリケーションを管理・デプロイするためのプラットフォームで、クライアント・サーバー型のアーキテクチャを採用しています。以下に、Dockerの主な構成要素と機能について説明します。
Dockerアーキテクチャの構成要素
- クライアント
- Dockerクライアントは主にコマンドラインインターフェース(CLI)ツールである
docker
であり、ユーザーがコマンドを発行してDockerと対話します。 - サーバーとRESTful APIを介して通信し、操作リクエストを送信します。
- サーバー(デーモン)
- DockerサーバーはデーモンとしてOS上で動作し、コンテナイメージの作成、実行、ダウンロードといった主要な作業を担当します。
- デーモンはクライアントと同じシステム上またはリモートで実行できます。
- Dockerのコア要素
- イメージ:コンテナを作成するための読み取り専用のテンプレートで、ランタイム環境やアプリケーションが含まれています。
- レジストリ:イメージを保存する場所で、パブリック(例:Docker Hub)やプライベートで運用できます。
- コンテナ:ホストOS上でアプリケーションを分離して実行するユーザースペース環境です。
DockerにおけるLinuxカーネルの役割
- 名前空間(Namespaces)
- 特定のシステムリソース(ネットワークインターフェースやプロセスIDなど)を分離し、他のプロセスから見えないようにします。各コンテナは専用の名前空間で動作し、リソースの隔離が実現されます。
- コントロールグループ(cgroups)
- 各コンテナが使用できるシステムリソース(CPUやメモリなど)を制限するための仕組みです。これにより、あるコンテナがホストのリソースを過剰に使用することを防ぎます。
- SELinux
- セキュリティ強化Linux(SELinux)は、ホストシステムとコンテナの相互の保護を提供します。各コンテナのプロセスは、SELinuxの制約により他のコンテナやホストに対するアクセスが制限されます。
Dockerコンテナイメージ
- Dockerのイメージは、複数のレイヤーで構成されています。各レイヤーは変更不可であり、新しいレイヤーが既存のレイヤーの上に追加される仕組みです。
- これにより、コンテナに一貫したファイルシステムを提供し、UnionFSファイルシステムを使用してレイヤーの統合ビューを作成します。
Dockerイメージ作成方法
Dockerでは、コンテナイメージを作成するために2つの主要なアプローチがあります:
- 実行中のコンテナを使用する方法
- 不変(immutable)のイメージを基に新しいコンテナインスタンスを起動し、そのコンテナ内で必要な変更や更新を実施します。これらの変更は、読み書き可能な追加レイヤーとして保存されます。
- この追加レイヤーを既存のイメージに保存することで、新しいイメージを生成できます。
- シンプルで簡単な方法ですが、一時ファイルやログなど不要なファイルが含まれ、イメージサイズが大きくなる可能性があるため、推奨されないアプローチです。
- Dockerfileを使用する方法
- ベースイメージを基に、一連の「命令(instructions)」を記述したDockerfileから新しいイメージを作成します。
- 各命令はイメージ上に新しいレイヤーを作成し、最終的なコンテナイメージが構築されます。
- この方法は、各レイヤーにどのファイルを追加するかを制御できるため、イメージ作成の推奨アプローチです。
参考資料
- UnionFS Wikiページ: UnionFS - Wikipedia
Dockerfileを使用することで、効率的で無駄のないイメージが作成でき、コンテナ管理がより容易になります。
このように、Dockerはコンテナの隔離と効率的な管理を実現するために、クライアント・サーバー型のアーキテクチャとLinuxの機能を活用しています。
問題と解説(Dockerアーキテクチャについて)
質問1
以下のタスクのうち、Dockerクライアント以外のコンポーネントによって管理されるものはどれですか?(3つ選んでください)
a. レジストリからのコンテナイメージファイルのダウンロード
b. サーバーからのコンテナイメージのデプロイ要求
c. レジストリからのイメージ検索
d. コンテナイメージのビルド
解説
Dockerはクライアント・サーバーアーキテクチャを採用しています。
docker
コマンドを使用して、クライアントがサーバー(デーモン)と通信し、RESTful APIを介して操作を要求します。クライアント以外で管理されるタスクには、a. ダウンロード、c. イメージ検索、d. ビルドが含まれます。これらの処理はDockerデーモンまたはレジストリによって管理され、クライアントが直接実行するものではありません。正解:a、c、d
質問2
以下の選択肢のうち、コンテナイメージを最も適切に説明しているものはどれですか?
a. コンテナが作成される仮想マシンイメージ
b. コンテナが作成されるブループリント
c. アプリケーションが実行されるランタイム環境
d. レジストリで使用されるコンテナのインデックスファイル
解説
コンテナイメージは、アプリケーションのランタイム環境を構築するための「テンプレート」として使用されるブループリントです。イメージは変更できないため、一貫した環境を提供します。このため、正しい回答はb. ブループリントとなります。
正解:b
質問3
Dockerがコンテナのランタイム環境を作成および管理するために使用するカーネルコンポーネントはどれですか?(2つ選んでください)
a. ネームスペース
b. iSCSI
c. コントロールグループ(cgroups)
d. LVM
e. NUMAサポート
解説
Dockerは、Linuxカーネルの機能であるネームスペースとコントロールグループ(cgroups)を活用してコンテナを隔離し、リソースの制限と管理を行います。ネームスペースにより、ネットワークやファイルシステムなどのリソースを独立した環境として表示し、コントロールグループはコンテナが使用するリソースの制限を設定します。
正解:a、c
質問4
開発者のマシンでWordPressブログの既存イメージを更新し、新しい自作の拡張機能を追加しました。これらの更新内容を反映した新しいイメージを作成するための最適な方法はどれですか?(1つ選んでください)
a. 開発者のカスタムWordPressに行った更新を、プロダクションのWordPressにコピーし、イメージ内でパッチを適用する。
b. 開発者のカスタムWordPressに行った更新をDockerfileを使用して新しいイメージに組み込み、コンテナイメージを再構築する。
c. プロダクションと開発者のWordPressイメージの差分を実行し、すべてのバイナリ差分をプロダクションイメージに適用する。
d. 更新されたファイルを開発者のイメージからプロダクション環境の/tmpディレクトリにコピーし、イメージの更新を要求する。
解説
最適な方法はDockerfileを使用して新しいイメージを構築する方法です。Dockerfileによって一貫性を保ちながら更新を反映でき、変更内容が明確に記録されます。直接変更を反映する方法(a.やd.)では、一貫性が損なわれる恐れがあるため、推奨されません。
正解:b
- 作者:みなみ
- 链接:https://tangly1024.com/資格勉強/13fd7ae8-88e2-801f-b313-dfb315b1b942
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章