OSと仮想化の基礎知識
1. Debian vs Alpine Linux
本プロジェクトでは、DockerイメージのベースOSとして Debian (または Alpine) の使用が強く推奨(または指定)されています。それぞれの特徴と違いを理解することは重要です。
比較表
| 特徴 | Debian (buster/bullseye) | Alpine Linux |
|---|---|---|
| ライブラリ | glibc (GNU C Library) | musl libc |
| パッケージ管理 | apt (Advanced Package Tool) | apk (Alpine Package Keeper) |
| サイズ | 比較的小さい (約100MB〜) | 極小 (約5MB〜) |
| 互換性 | 高い (標準的なLinux環境) | 一部低い (glibc依存アプリが動かない) |
| 用途 | 汎用サーバー、開発環境 | コンテナ最適化、組み込み |
なぜ Docker Infrastructure では Debian が選ばれるのか?
- 安定性と互換性: Debianは「安定版 (Stable)」の信頼性が非常に高く、多くのソフトウェアが公式にサポートしています。
- トラブルシュートのしやすさ: ユーザー数が多く情報が豊富なため、ハマった時の解決策が見つかりやすいです。
- glibc: 多くのアプリケーションは
glibcを前提に作られているため、Alpine (musl) だと動かない・ビルドできない・遅いという問題が起きることがあります(特にPythonのネイティブ拡張や一部のJavaなど)。
参考ソース:
2. なぜ仮想マシン (VM) が必要なのか?
docs/requirements/inception-subject.md には「仮想マシン上で実行すること」という要件があります。Dockerはローカル(Mac/Windows)でも動くのに、なぜわざわざVMを使うのでしょうか?
理由1: カーネルの完全な制御と隔離
- Dockerの仕組み: コンテナはホストOSのカーネルを共有して動きます。
- 問題点: ホストが macOS や Windows の場合、Linuxカーネルはエミュレーション(Docker Desktopの裏で動く隠れたLinux VM)上にあるため、ネットワークやボリュームの挙動が純粋なLinuxと異なる場合があります(例: ボリュームのマウント速度、PID 1の扱い、ネットワークモードの制限)。
- 解決策: 自分で構築した Debian VM 上で Docker を動かせば、そこは 「正真正銘の Linux 環境」 です。カーネルの挙動も予測可能で、学習目的として最適です。
理由2: 環境の再現性 (Infrastructure as Code)
- 校舎のPCは「再起動するとリセットされる」環境であったり、root権限がなかったりします。
- VM(VirtualBox等のイメージ)を使えば、OSの設定・パーティション・ネットワーク構成を含めて「どこでも同じ環境」を持ち運べます。
理由3: システム管理の学習
- Docker Infrastructureは単なるコンテナ起動だけでなく、「システム管理者としての振る舞い」も評価対象です(PID 1, パーティション, UFW, SSH設定など)。
- これらはコンテナの外側(ホストOS側)で行う設定であり、借り物のPC(ホストOS)ではなく「自分の管理下にあるOS (VM)」でないと設定・検証できません。
3. 校舎環境(ホストOS)との関係
「校舎のPCもLinux (Ubuntu) で Docker が入っているなら、そこで直接やればいいのでは?」という疑問への回答です。
- 管理者権限 (sudo) の欠如
- 校舎PCのホストOSでは、学生に
root権限が与えられていません。 - そのため、必須課題である
UFW(ファイアウォール) の設定や、/etc/hostsの書き換え、ディレクトリ作成 (/home/login/data) すら自由にできない場合があります。 - 具体例:
/etc/hostsが編集できないと、WordPressが生成する内部リンク(local.dev/...)をホストOSが解決できず、トップページは表示できても**「記事をクリックするとリンク切れになる」** という致命的な問題が発生します。 - これを解決するには、VM内で名前解決を完結させ、ホストからはSOCKSプロキシ等で「名前解決ごとVMに委譲する」構成(またはVM利用)が必須となります。
- 校舎PCのホストOSでは、学生に
- 環境リセット
- 校舎PCは再起動すると初期化される設定の場合が多いです。苦労して作ったデータや設定が消えてしまいます。
- VMを使えば、VMごとのバックアップや移行(VirtualBoxイメージのコピー)が可能になります。
- 隔離性 (Isolation)
- 自分のミスでOSを壊しても、VMなら再インストールすれば済みますが、ホストOSを壊すと他の学生や運営に迷惑がかかります。
参考ソース: