📘
DockerとOSの関係をちゃんと理解する
Dockerを勉強していたら、Dockerfileの1行目に出てきたこれ:
FROM ubuntu:22.04
でも、ふと疑問に思いませんか?
🤔 DockerってホストPCのカーネルを使い回すから軽いんじゃなかったっけ?
それなのに Ubuntu を指定するってどういうこと?Ubuntuも起動してるの?
この記事ではこの疑問に答えながら、Dockerの「OSイメージ」の正体をわかりやすく解説していきます!
✅ 結論:カーネルじゃなくて“ユーザー空間”がほしいだけ!
Dockerが軽量なのは「ホストPCのカーネル(OSの中枢)を使い回す」からです。
ですが、実行環境としての“ユーザー空間”は必要です。
項目 | 説明 |
---|---|
カーネル | OSの心臓部。プロセス管理・メモリ管理などを担う。Dockerはホストのカーネルを使う |
ユーザー空間 | bash, apt, ls, /etc など、OSの上にあるコマンドや構成ファイル群 |
つまり FROM ubuntu:22.04
は:
Ubuntuのカーネルを使う のではなく、
Ubuntuのユーザー空間(便利なコマンドや構成)を使いたい
という意味なんです。
🏗️ じゃあ、何が入ってるの?
UbuntuのDockerイメージには、次のようなものが含まれます:
-
/bin/bash
(シェル) -
/etc/apt/
(aptの設定) -
apt
(パッケージ管理ツール) - 基本的なLinuxコマンド(ls, cat, cp, mkdirなど)
つまり、「Ubuntuのような環境」でアプリを動かせるようになるわけです。
🔧 ただし、起動しているOSそのものではない
💡 なぜUbuntuベースが使われやすいの?
LaravelのようなPHPアプリケーションを動かすとき:
- PHPをインストールしたい
- でも、
curl https://php.net/...
とか面倒 -
apt install php
で一発で入れたい
⬇️
✅ それなら apt が使える Ubuntu がベースだと楽! というわけです。
Ubuntu以外にも:
-
alpine
:超軽量・セキュア(小さいが学習コスト高め) -
debian
:安定性・互換性が高い
などがあります。
⚙️ Dockerはどうやって動いてるの?(簡単に)
Dockerの仕組みをざっくり振り返ると:
- Dockerコンテナは、ホストPCのカーネルを使って動いている
- その上に、ユーザー空間(bash, apt, phpなど)をイメージで準備する
- イメージの内容は OSまるごとではなく「OSっぽいファイル群」だけ
🧠 カーネルは共有!ユーザー空間は専用!
📝 まとめ
疑問 | 答え |
---|---|
Dockerって軽いのにOSを指定するの? | 実際は“ユーザー空間”を整えるため |
FROM ubuntu:22.04 の意味は? | Ubuntuっぽい環境を準備するだけ(カーネルは使わない) |
なぜUbuntu? | aptが使えて、Laravelの開発に便利だから |
🔚 おわりに
Dockerを使うとき、FROM ubuntu
と書いてあると「Ubuntuを立ち上げてる」と思いがちですが、実は「Ubuntuの中身(だけ)を使ってる」と考えるとスッキリします。
カーネルはホストのもの。コンテナの中はただの“それっぽい環境”です。
これでまた少しだけ、Dockerに対する理解が深まりました!
Discussion