【一緒に学ぼう】Azure資格取得への道 - AZ-104試験対策 第6回:コンテナ技術を基礎から理解する

この記事の内容

  • 仮想化技術(ハイパーバイザー型VM)の仕組みとデメリットを整理します
  • VMとコンテナの違いを、OS共有・プロセス分離の観点から解説します
  • コンテナイメージのレイヤー構造とDockerfileを使ったビルドの仕組みを学びます
  • Docker Desktopを使ったApache HTTP Serverコンテナの作成・起動手順を紹介します
  • カスタムイメージの作成と、複数コンテナの同時起動によるスケーリングの概念を確認します

はじめに

本シリーズ「AZ-104試験対策」も第6回となりました。これまでに、第1回では「Azure ADのオブジェクト」、第2回では「アクセス制御」、第3回では「ストレージの実装と管理」、第4回では「ARMテンプレート」、第5回では「仮想マシン」について学んできました。今回はその続きとして「コンテナ」について解説します。

本来はAzure上でのコンテナ関連サービス(Azure Container InstancesやAKSなど)を扱う予定でしたが、まずはコンテナそのものの仕組みを理解することを目的として進めます。仮想マシンに比べてコンテナに馴染みのない方も多いと思いますので、基礎から丁寧に整理していきましょう。


仮想化技術の復習

コンテナを理解するために、まず仮想化技術の基本構造を振り返ります。

物理サーバーにはCPU・メモリ・ストレージ・ネットワークが搭載されており、その上でプログラムやサービスを実行します。これを効率的に活用する仕組みが「仮想化」です。

物理サーバーの上に「ハイパーバイザー」という層を設けることで、複数の仮想マシン(VM)を作成できます。各VMは独立したCPU・メモリ・ストレージ・ネットワークを持ち、完全に分離された環境として動作します。それぞれにOSをインストールし、必要なランタイムやミドルウェアを導入してアプリケーションを動かす構成です。

この仕組みにより、リソースの柔軟な割り当てや分離が可能になります。たとえば、重い処理を行うVMには多くのリソースを、軽い処理のVMには少なめに設定することができます。


仮想化のデメリット

便利な仮想化技術にも、いくつかの課題があります。

  • 起動に時間がかかる:VMはOSごとに立ち上げる必要があります
  • オーバーヘッドが大きい:各VMにOSやランタイムが必要になります
  • 管理負荷が高い:パッチ適用や設定をVM単位で行う必要があります
  • 自動化が難しい:GUI操作が多く、コードによる一括管理がしづらい面があります
  • 移行が容易ではない:ハイパーバイザー間で互換性の問題が発生することもあります

このような背景から、より軽量で柔軟な仕組みとして「コンテナ技術」が登場しました。


コンテナ技術の仕組み

コンテナは、仮想化とは異なるアプローチで環境分離を実現します。OS上に「コンテナランタイム」をインストールし、そのランタイムが各コンテナを管理します。このコンテナランタイムはユーザーモードで動作する通常のアプリケーションです。

コンテナはOSの機能を利用してプロセス間を分離します。各コンテナは独立したプロセスとして動作しますが、OSカーネルは共有されています。つまり、仮想マシンのように完全に独立したOSを持つわけではなく、分離のレベルが「ユーザーモード」で行われるのが特徴です。

さらに、コンテナはレイヤー構造のイメージとして管理されます。複数のコンテナが共通のランタイムを共有できるため、効率的な運用が可能です。


コンテナのメリット

コンテナ技術の利点は以下の通りです。

  • ポータビリティが高い:対応OS上であれば同じように動作します
  • 展開が高速:OSの起動が不要で、即座に起動できます
  • コード管理が容易:スクリプトやコマンドで操作でき、自動化に最適です
  • リソースコントロールが柔軟:CPUやメモリの割り当てを簡単に設定できます
  • オーバーヘッドが小さい:OSを共有するため、仮想化より軽量に動作します

これらの特徴により、開発・テスト・本番環境の構築が高速かつ効率的に行えるようになります。


コンテナイメージと実行の仕組み

コンテナを動かすためには「コンテナイメージ」が必要です。イメージは「OS」「ランタイム」「アドオン」「アプリケーション」などの層で構成されます。

コンテナイメージとコンテナ本体は別物です。イメージをもとにコンテナが起動され、動作中の変更は別レイヤーに記録されます。これは仮想マシンの差分ディスク方式に似た考え方です。

イメージは「Dockerfile」というレシピを使って作成します。Dockerfileにはベースイメージや実行するコマンド、追加するファイルなどを記述し、docker build コマンドでビルドすると新しいイメージが生成されます。


実演:Webサーバーコンテナを作成してみる

ここでは、Windows環境にDocker Desktopを導入し、Apache HTTP Serverコンテナを作成する手順を紹介します。

1. イメージの取得

docker pull httpd

Apacheの公式イメージをダウンロードします。レイヤー単位で取得されることが確認できます。

2. イメージの確認

docker images

ダウンロード済みイメージの一覧を表示します。

3. コンテナの起動

docker run -it httpd bash

コンテナを起動し、内部の環境にアクセスします。独立したプロセス空間で動作していることが確認できます。

4. 停止・削除

コマンド操作で簡単に実行できます。イメージは残るため、再利用が可能です。

なお、VS CodeのDocker拡張機能を使用すれば、GUI上からも同様の操作が可能です。


カスタムイメージのビルド

次に、独自のWebサイトを持つApacheイメージを作成する手順を見ていきます。

  1. Dockerfileでベースイメージに httpd を指定します
  2. 既存のコンテンツを削除し、自分のWebサイトファイルをコピーします
  3. docker build でビルドして新しいイメージを生成します
docker build -t my-httpd .

生成したイメージを docker run で起動すると、即座にWebサーバーが立ち上がり、ブラウザからアクセスできます。仮想マシンで同じ構成を作るよりも圧倒的に短時間で完了します。

さらに、同じイメージから複数のコンテナを同時に起動することも可能です。たとえば、異なるポート(80、8080、8081など)で複数のWebサーバーを展開できます。この軽量性と柔軟性こそがコンテナの大きな魅力です。


補足:Windows上でのLinuxコンテナ実行

今回の実演ではWindows上でLinuxコンテナを動かしました。これはWSL2(Windows Subsystem for Linux 2)を利用して実現しています。Windows上で軽量なLinux仮想ホストを動かし、その上でコンテナを実行している構成です。仮想化技術とコンテナ技術が組み合わさって動作しています。


まとめ

今回はAZ-104試験対策の第6回として、コンテナ技術の基礎を解説しました。

  • 仮想マシン(VM) はハイパーバイザー上に独立したOSを持つ環境で、分離性は高いがオーバーヘッドも大きいという特徴があります
  • コンテナ はOSカーネルを共有しつつプロセスレベルで分離を行うため、軽量・高速・ポータブルな環境を実現します
  • コンテナイメージ はDockerfileを使ってレイヤー構造でビルドでき、再利用性が非常に高い点が特徴です
  • Docker Desktop を使えば、Windowsでも手軽にLinuxコンテナを扱うことができます
  • 同一イメージから複数コンテナを即座に展開できる柔軟性が、コンテナ技術の最大の強みです

次回以降はAzure Container InstancesやAKSといった、Azure上のコンテナサービスについて学んでいく予定です。引き続き一緒に学んでいきましょう。