- 「Docker(コンテナ技術)」について学びたいけど理解できるか不安・・・
- 「Docker(コンテナ技術)」を使うメリットが分からない
- 「Docker(コンテナ技術)」を体系的に教えて!
「Docker(コンテナ技術)」はコンテナ型仮想化ソフトウエアであり複数人での開発環境や開発環境と本番環境の統一を容易にするものですが、興味があってもその内容の理解が難しいケースは非常に多いです。
私は過去に基本情報技術者試験(旧:第二種情報処理技術者試験)に合格し、また2年程前に「一般社団法人 日本ディープラーニング協会」が主催の「G検定試験」に合格しました。現在、「E資格」にチャレンジ中ですが3回不合格になり、この経験から学習の要点について学ぶ機会がありました。
そこでこの記事では、「Docker」の内容について解説します。
この記事を参考にして「Docker」のポイントが理解できれば、E資格に合格できるはずです。
1.仮想環境とは
- ハードウェア上で独立した複数の環境を実行する技術
- ホスト型、ハイパーバイザー型、コンテナ型の3種類が存在
ホスト型 | ハイパーバイザー型 | コンテナ型 | |
---|---|---|---|
概要 | 物理的なホストOS上で動作 | ハードウェア上で直接実行 | 単一のOSカーネルで複数のコンテナ実行 |
メリット | ・インストールの簡単さ ・ホストOSのデバイスドライバ利用 ・異なるOSの同時実行 | ・高い性能と安定性 ・ハードウェアと直接通信するため負荷が少ない ・完全なゲストOSの隔離 ・ハードウェアの効率的な利用 | ・起動の速さ ・リソースの負荷の少なさ ・移植性 |
デメリット | ・性能の負荷 ・セキュリティ問題の影響 | ・セットアップと管理が複雑 ・ハードウェアのリソースに直接依存 ・Type2の場合 ホストOSの負荷が存在 | ・完全な隔離の不足 ・特定のOSカーネルへの依存 |
ソフトウェアの例 | ・VMware Workstation ・Oracle VirtualBox | ・VMware vSphere ・Microsoft Hyper-V | ・Docker ・LXC |
備考 | なし | 〈Type1とType2の違い〉 Type1:高い性能と安定性 Type2:・ホストOS上で動作、設定の簡単さ | なし |
2.コンテナ技術の利用価値
総合的なコスト変化を下表に整理する。
ハードウェアインフラ | 開発環境 | 開発サイクル | サービスのデプロイメント | サービスの運用 | |
---|---|---|---|---|---|
運用コスト | ⤴ | ⤴ | ↘ | ↘ | ↘ |
構築コスト | ↘ | ↘ | ⤵ | → | → |
維持コスト | ⤵ | ↗ | ↗ | → | → |
トータルコスト | ↘ | ⤴ | ⤵ | ↘ | → |
必要最小限のファイル ⇔ コンテナは軽量 ⇔ 必要最小限のライブラリ
※デプロイメント(deployment):配備する、配置する、展開する、配置につく、などの意味を持つ英単語。ITの分野では開発したソフトウェアを実際の運用環境に配置・展開して実用に供することを指す場合が多い。
3.コンテナ型の仮想化について
3.1 仮想化とは
- 仮想化のメリット:サービスやOSの容易な移動が可能

【参考】10 分で理解できる特性要因図|書き方から原因を特定する方法まで
引用元:Dropbox
3.2 「完全VM」と「プロセスVM」
- 仮想マシン(Virtual Machine:VM):
・物理コンピュータと同じ機能をソフトウェアで実現したコンピュータ。
・物理コンピュータと同様に、オペレーティング システムとアプリケーションを実行。
・仮想マシンの実体はコンピュータのファイル、物理コンピュータ上で実行され、物理コンピュータと同じように動作する。 - 完全VM:OSを仮想化
- プロセスVM:CPUを仮想化

3.3 ハイパーバイザー(hypervisor)
- 「完全VM」⇒ OSを仮想化する
・コンピュータを仮想化するための制御プログラム
・サーバー仮想化などで利用
・ハイパーバイザーには、次の2つがある。
①ネイティブハイパーバイザー:ハードウェア上で直接動作
②ホストハイパーバイザー:OS上で実行される - ①ネイティブハイパーバイザー
・性能面で優れている
・仮想化されたサーバー上でシステムを実行
・エンタープライズ用途で広く利用されている。 - ②ホストハイパーバイザー
・ネイティブハイパーバイザーよりも性能が低下。
・用途としては、ソフトウェア開発やテストを行うための環境の構築が挙げられる。

3.4 「VM(ハイパーバイザー)」と「 コンテナ」 の対比

VM(ハイパーバイザー)型 | コンテナ型 | |
---|---|---|
特徴 | ・同一サーバ内で異なるOSを併用できる(ホストOSとは別にゲストOSを使用できる) | ・コンピュータリソースの使用効率が良い(ホストOSのカーネル(kernel)を利用するため) ・アプリケーションの起動速度が速い(ホストOSのカーネル(kernel)を利用するため) ・設定が容易(ハードウエアやOSの設定が実行環境に依存しないため) |
例 | ・ESXi ・HyperーV | ・Docker |
3.5 ソフトウェアによる仮想化とハードウェアによる仮想化
ソフトウェアによる仮想化
⇒ ハードウェアに組み込まれた仮想化機能を利用しないでソフトウェア上で仮想化を実現する
ソフトウェアによる仮想化 ⇔ ハードウェアによる仮想化
※Type1、Type2、コンテナとは、交差する概念ではない
4.Dockerの仮想化
- アプリケーションと依存関係をコンテナとしてパッケージ化
- どの環境でも一貫した動作を保証
- アプリケーションの依存関係をインフラから分離
- Dockerエンジン
・コア技術
・Linuxのcgroups、namespacesを利用 - Dockerイメージ
・アプリケーションと依存関係のスナップショット - Dockerコンテナ
・イメージから生成
・アプリケーションの実行環境
- 2013年にDocker Engineとして公開
- Microsoftとの協力でWindows Serverに導入
- 現在はデータセンター、クラウドプロバイダーでの採用
4.1 Dockerにおける仮想化とは
- アプリケーションの開発とテスト
・現代の開発の複雑さ
・Dockerによる業務の流れの簡素化と加速 - 本番環境でのデプロイ(deploy)
・コンテナの概念を導入することによる環境の隔離
・2013年のDocker導入以降の業界標準化 - マイクロサービスアーキテクチャの実装
・各マイクロサービスの独立したデプロイ
・システムの柔軟性と耐障害性の向上 - 環境の統一と再現性の確保
・アプリケーションと依存関係のコンテナ化
・開発、テスト、本番環境の動作の一貫性 - 補足
・デプロイ(deploy)・・・システムにおいて「実行ファイルを実際のWebサーバー上に配置して利用できる状態にすること」
・マイクロサービス・・・小さなサービスを組み合わせて一つのアプリケーションを開発するアプローチ
インフラ構成管理がコードにより可能
↓
イメージ構成:Dockerfileで管理
複数のコンテナの構成:docker-compose.ymlで管理
↓
手作業によるミスや管理コストを削減
補足)compose・・・直訳すると「作曲する」という意味

- docker build:Dockerfileからイメージ作成
ソースコードやアプリケーションの依存関係を含むイメージ作成 - docker run:コンテナの起動
指定されたイメージから新しいコンテナを作成・実行
オプションや引数でカスタマイズ可能 - docker ps:実行中のコンテナの一覧表示
ーaオプションで停止中のコンテナも表示 - docker images:ローカルのイメージ一覧表示
ID、リポジトリ名、タグ、作成日時などの情報表示 - docker pull:Docker Hub や他のレジストリからイメージ取得
ローカルに存在しないイメージのダウンロード - docker push:ローカルのイメージをレジストリにアップロード
自作イメージの公開・共有 - docker start
停止しているコンテナの起動
既存の停止コンテナを再起動 - docker stop
実行中のコンテナの停止
docker startで再起動可能 - docker rm
コンテナの削除
停止しているコンテナをシステムから完全削除
一度削除したコンテナは復元不可
- コンテナイメージの作成手順を定義するための指示書
- 主要な命令
- Dockerfileとは
- 基本構文
- ベストプラクティス
4.2 Docker における仮想化の利点
Dockerを使用することで、GPUの計算リソースを効率的に活用したアプリケーションの開発とデプロイが簡単に行える。
- 背景
GPUはディープラーニングや高性能計算に広く利用
DockerがGPUサポートを強化 - DockerでのGPUサポート
- GPUアプリケーションのコンテナ化
- NVIDIA Container Toolkitの特徴
- 深層学習モデルの開発とDocker
- Dockerのコンテナは、軽量なので起動時間が顕著に高速
- コンテナOSが「Linux」の場合
カーネルバージョンは問題にならない - コンテナOSが「非 Linux OS」の場合
カーネルバージョンの互換性に配慮が必要な場合あり
4.3 コンテナオーケストレーション
「コンテナオーケストレーション」は、大規模なアプリケーションなどで複数のコンテナ管理を実現するソリューション
- コンテナオーケストレーション
・定義
コンテナのデプロイ、スケーリング、運用の自動化プロセス
・必要性
大規模アプリケーション・マイクロサービスの効果的な管理
コンテナダウン時の自動復旧
・代表的ツール
kubernetes(オーケストレーションニーズ対応) - 主な機能
・サービスディスカバリーとロードバランシング
・ストレージオーケストレーション
・自動ロールアウト・ロールバック
・セルフヒーリング
・シークレット・設定管理 - 代表的なオーケストレーションツール
・kubernetes:オープンソース、大規模運用向け
・dockerーcompose:Docker公式、開発環境・小規模デプロイ向け
補足1)デプロイ・・・「展開する、配置する」などの意味。IT分野では、Webアプリケーションなどのシステム開発工程で、アプリケーションの機能やサービスをサーバー上に配置・展開し、利用可能な状態にする一連の作業を指す。
4.4 Dockerにおける仮想化の注意点
ホストOSと共有されるカーネルへの攻撃の可能性
↓
セキュリティ対策が必要
5.Dockerによる具体的なオペレーション
5.1 dockerーcompose
docker コマンドのショートハンド
↓
dockerーcompose

6.まとめ
最後まで読んで頂きありがとうございます。
皆様のキャリアアップを応援しています!!
コメント