仮想化技術の概要
1台の物理サーバー上で複数の仮想サーバーを動作させ、リソースを効率化し、サーバー運用コストを削減する。
また、複数の物理リソースに 同一の環境を構築可能。
なぜ仮想化技術が必要なのか?
-
物理リソースの有効活用
- 従来の物理サーバーでは、リソースが固定的で多くの無駄が生じていた。仮想化により複数の仮想サーバーを動作させることでリソース利用率を向上できる。
-
コスト削減
- 複数の物理サーバーを減らし、電力、冷却、スペースの削減が可能になる。
-
環境の分離
- 開発・テスト・本番環境を1台の物理サーバー内に構築可能。環境ごとの干渉を防ぎ、安定性が向上。
-
柔軟性とスケーラビリティ
- 必要に応じて仮想サーバーを追加・削除でき、ビジネスニーズに即座に対応できる。
-
ディザスタリカバリ
- 仮想マシンのバックアップと復元が容易で、障害時のリカバリが迅速に行える。
仮想化技術は、物理リソース(CPU、メモリ、ストレージなど)の効率化や環境の分離により、サーバー運用を最適化します。
ハイパーバイザーの種類
-
ベアメタルハイパーバイザー
- ホストOSを必要とせず、ハードウェア上で直接動作する。
例: VMware ESXi、Microsoft Hyper-V。
- ホストOSを必要とせず、ハードウェア上で直接動作する。
-
ホスト型ハイパーバイザー
- ホストOS上で仮想化ソフトウェアが動作し、その上にゲストOSを配置。
例: VirtualBox、VMware Workstation。
- ホストOS上で仮想化ソフトウェアが動作し、その上にゲストOSを配置。
-
コンテナ技術またはOSレベル仮想化
- ゲストOSを仮想化せず、ホストOSのカーネルを共有。
例: Docker、LXC。
- ゲストOSを仮想化せず、ホストOSのカーネルを共有。
Docker(コンテナ)について
Docker(コンテナ)の特徴
-
ポータビリティ
- 環境依存の問題を解消し、どの環境でも同じ動作を実現。
-
軽量で高速
- 仮想マシンよりも高速に起動可能。
-
アプリケーションに特化
- アプリケーションと依存関係だけをパッケージ化。
コンテナ技術は仮想化技術の派生として、軽量で環境の再現性が非常に高い特徴を持っています。
開発環境の構築や、スケールアウトなどに非常に適しており、迅速なデプロイが可能です。
Dockerが実現できる技術 一例
-
ポートフォワーディング
-
ホストマシンの特定のポートをコンテナに転送し、外部からコンテナ内のアプリケーションにアクセス可能にします。
例: コンテナの80番ポートをホストの8080番ポートにフォワーディング。
docker run -p 8080:80 <image_name>
-
-
ボリュームマウント
-
ホストマシンのディレクトリをコンテナにマウントして、データの永続化や共有を実現。
docker run -v /path/on/host:/path/in/container <image_name>
-
-
ネットワークの分離と構築
-
Dockerは仮想ネットワークを作成し、コンテナ間の通信を独立させることが可能。
docker network create <network_name> docker network connect <network_name> <container_name>
-
-
マルチステージビルド
- イメージ作成時に複数のステージを使用し、軽量なイメージを効率的に作成可能。
- 用途: ビルド環境と実行環境を分離。
-
クロスプラットフォームの動作
- 異なるOS環境(例: Windows、Linux)間で同一のアプリケーションを実行。
基本的なコマンド一覧
# 現在稼働中のコンテナを一覧表示します。の基本コマンドを調べてみました。
docker ps
# ローカルに保存されているDockerイメージを一覧表示します。
docker images
# 指定したイメージから新しいコンテナを作成し、実行します。
docker run** -it <image_name>
# 実行中のコンテナを停止します。
docker stop
# 停止したコンテナを削除します。
docker rm
# ローカルに保存されたイメージを削除します。
docker rmi
# 実行中のコンテナ内でコマンドを実行します。
docker exec** -it <container_id> bash