環境構築
- 0. 概要
- 1. コンテナ型仮想化
- キーワードまとめ
Contents
0.章の概要
環境構築は、AIモデルやアプリケーションを動作させるために必要なソフトウェアやライブラリ、依存関係を適切に整備する作業です。 ここでは、現代の開発環境で欠かせない仮想化技術(主にDocker)についてをメインに扱っていきます。
1. コンテナ型仮想化
学習キーワード: 仮想化環境、ホスト型、ハイパーバイザー型、コンテナ型、Docker、Dockerfile
概要
仮想化環境とは、1つの物理的なハードウェア上で、複数の独立した計算環境を構築する技術です。 これにより、1台のサーバーを仮想的に分割して複数のOSやアプリケーションを同時に実行できるようになります。
※ちなみに、今となっては考えられないですが、仮想化技術が普及する以前は、サーバーは各用途に応じて専用のハードウェアを必要としていたため、サーバーの種類や数が増えるにつれて保有するハードウェアの台数も増加していました。
以下に仮想化の特徴をいくつか挙げておきます。
- メリット:
- リソースの効率的な使用:物理サーバーが持つリソースを複数の仮想サーバーに自由配分でき、効率的に使用できる。(例:メールサーバーはたまにしか使わないが、Webサーバーはよく使うので多くのリソースを割りあてる、など)
- 環境の再現性が高い:仮想サーバーの設定を簡単に複製でき、環境の再現性が高まる。(故障時の復旧も簡単)
- ハードウェアの削減:仮想化によって、物理サーバーの数を削減でき、ハードウェアのコストを削減することが可能。
- デメリット:
- セキュリティの懸念:仮想サーバー間のセキュリティを確保する必要があり、従来のセキュリティ対策では不十分。
- パフォーマンスの低下:リソースの分配によっては、システムのパフォーマンスが低下する可能性がある。
仮想化技術には、ホスト型仮想化、ハイパーバイザー型仮想化、コンテナ型仮想化が挙げられ、特に、コンテナ型仮想化は、高速な起動時間やリソース効率、環境の再現性が高いことから、近年のAI開発環境で主流となっています。その代表例が、後述するDockerになります。
仮想化環境の種類
まずは、ホスト型仮想化、ハイパーバイザー型仮想化、コンテナ型仮想化の概要を下記に示します。
一般的に、ホストOSは、仮想環境をつくるベースとなるOSを指し、ゲストOSは仮想環境上のOSを指します。
ホスト型仮想化
ホスト型仮想化は、ホストOSに仮想環境作成ソフトウェアをインストールする方法で、パソコンにホストOSをインストールし、そのOS上で仮想環境を作成します。手軽に始められるメリットがありますが、ホストOSを起動しなければならない点や、ホストOSと仮想マシン間のオーバーヘッドが大きくなるという欠点もあります。
オーバーヘッドとは・・・
仮想環境の実行に伴い追加される計算リソースや、ホストOSと仮想環境間のデータ転送にかかる処理負荷を指します。
ホスト型仮想化の例: VMware Workstation、VirtualBox。
ハイパーバイザー型仮想化
ハイパーバイザー型仮想化は、ハイパーバイザーを直接ハードウェアにインストールする方法で、ホストOSの起動を要しないため、起動が早く、リソースの効率化にもつながります。ただし、既存のハードウェアを流用できないため、新規のハードウェア購入など、コストがかかることに注意が必要です。
ハイパーバイザー型仮想化の例: VMware ESXi、Microsoft Hyper-V、KVM(Kernel-based Virtual Machine)。
コンテナ型仮想化
コンテナ型仮想化は新しいタイプの仮想化技術で、ホストOSに「コンテナエンジン」とよばれる仮想化ソフトウェアをインストールし、その中でコンテナと呼ばれる環境を作り、アプリケーションを実行させる方法です。コンテナはホストOSのカーネルを共有して利用するため、従来の仮想化と違いゲストOSという概念はありません。そのため、余分なリソースが不要であり、軽快な環境が構築できます。
コンテナ型仮想化の例: Docker、Kubernetes(Dockerを管理するためのツール)。
Dockerの仕組み
Dockerはコンテナ型仮想化の代表的なツールで、軽量な仮想化環境を構築できます。各コンテナは、ホストOSから隔離された環境として、アプリ開発環境を構築する事できるため、複数人での開発環境の統一が簡単に実現できます。
- Dockerの特徴:
- 高速なデプロイ:コンテナの起動が数秒で完了する。
- 再現性の高い環境:異なるマシンでも同じ動作を行える。
- リソース効率:複数のコンテナが同一OSを共有する。
- 基本構成要素:
- Dockerイメージ: 実行環境を定義した、編集可能なテンプレートファイルで、アプリケーション実行に必要な情報を持っています。Docker Hubに公式のものや、他人が作成したイメージが公開されています。(SQLのテンプレートやPythonのテンプレートなどを作成しておき、仮想環境で必要なファイルを組み合わせて使用するイメージ。)
- Dockerコンテナ: Dockerで構築される仮想環境のことで、Dockerコンテナは独立した環境として存在しています(Dockerイメージの内容を元に作成)。
- Dockerfile: Dockerイメージを作成するための設定ファイルを指します。
Dockerを使った基本的な流れ(新しく自作コンテナを作成する場合)
- Dockerfileの作成: 必要な環境やパッケージを定義します。
- Dockerイメージのビルド: `docker build -t <イメージ名> .` を実行。
- コンテナの起動: `docker run -it <イメージ名>` を実行。
Dockerfileの記述例
以下は、Python環境をセットアップするDockerfileの例です。
- FROM: ベースとなるOSイメージを指定。
- WORKDIR: 作業ディレクトリを指定。
- COPY: 必要なファイルをコンテナ内にコピー。
- RUN: コマンドを実行(例: パッケージのインストール)。
- CMD: コンテナ起動時の実行コマンド。
関連用語の補足
- カーネル: OSの中核部分で、ハードウェアとソフトウェアを仲介。
- Docker Compose: 複数のコンテナを一元管理する仕組みで、各コンテナの設定や依存関係を「.yml」ファイルで記述する。これにより、複数のサービスを連携させて容易に起動・停止可能になる。
- Kubernetes: コンテナを管理・スケーリングするためのツール。
- Docker Hub: Dockerイメージを管理するリポジトリ
キーワードまとめ
仮想化環境、ホスト型、ハイパーバイザー型、コンテナ型、Docker、Dockerfile