第1章 Dockerとは何か|これだけはおさえる基本知識

【第1章】Dockerとは何か

Dockerカリキュラム

第1章

第2章

第3章 …

この章では 「Dockerって何?どう動くの?」 という疑問を解消します。

⏱ 読了目安:約10分 / 各セクションに詳細記事へのリンクあり

1

VMとDockerコンテナは何が違うの?

Dockerを学ぶうえで最初にぶつかる疑問が「仮想マシン(VM)と何が違うのか」です。どちらも「1台のサーバーで複数のアプリを独立して動かす」技術ですが、その仕組みはまったく異なります。

仮想マシン(VM)
アプリ A
ゲストOS
アプリ B
ゲストOS
ハイパーバイザー
物理サーバー
コンテナ(Docker)
アプリ A
ライブラリ
アプリ B
ライブラリ
Docker Engine
ホストOS(カーネル共有)
物理サーバー

VMはアプリごとにゲストOS(カーネルを含む)を丸ごと持ちます。そのため分離性は高い反面、起動に数分かかり、イメージサイズもGB単位になります。一方DockerのコンテナはゲストOSを持たず、ホストOSのカーネルを共有します。コンテナが持つのはアプリの実行に必要なライブラリだけなので、起動は数秒、サイズはMB単位に収まります。

🔵 VM:アプリごとにOSを丸ごと持つ → 起動数分・サイズGB単位・完全分離
🟢 コンテナ:OSのカーネルを共有する → 起動数秒・サイズMB単位・軽量

Dockerが普及した最大の理由は「動く環境ごとパッケージできる」点にあります。開発者のMacで作ったコンテナをそのまま本番のLinuxサーバーで動かせるため、「自分の環境では動くのに本番で動かない」という問題が根本から解決します。


📖 1-1. 従来のVM との違い(詳細記事)→

2

コンテナはどうやって「分離」を実現しているの?

同じLinuxカーネルを複数のコンテナで共有しながら、なぜコンテナAの中からコンテナBのプロセスが見えないのでしょうか。その答えはLinuxカーネルにもともと備わっている2つの機能にあります。

名前空間(Namespace)
プロセス・ネットワーク・ファイルシステムなどを見えない壁で区切る仕組み。コンテナAからコンテナBのプロセスは見えません。
cgroups(コントロールグループ)
各コンテナが使えるCPU・メモリを制限する仕組み。1つのコンテナがリソースを使い尽くしてもホストが落ちません。

NamespaceとcgroupsはDockerが発明したものではなく、Linuxカーネルにもともと組み込まれている機能です。Dockerはこれらをうまくラップし、イメージ管理・CLI・レジストリなどの使いやすい仕組みを加えることで、誰でも手軽にコンテナを扱えるようにしたツールです。初心者の段階では「Dockerはこの2つの仕組みを使って隔離を実現している」と理解しておけば十分です。


📖 1-2. コンテナ技術の仕組み(詳細記事)→

3

Dockerは何で構成されているの?

docker run と入力したとき、実際には何が起きているのでしょうか。Dockerは「コマンドを受け付ける部分(CLI)」と「コンテナを実際に動かす部分(Daemon)」が分離した設計になっています。

あなた
docker CLI
クライアント
REST API
Docker
Daemon
サーバー側
保管場所
Docker Hub
レジストリ

🔵 CLI(クライアント)docker run などコマンドを受け付ける窓口
🟢 Docker Daemon:コンテナの起動・停止を実際に行うバックグラウンドプロセス
🟡 Docker Hub:nginxやubuntuなどのイメージを無料で公開・取得できる場所

CLIとDaemonが分離しているのには理由があります。DockerのCLIはリモートのDaemonにも接続できるため、手元のPCから別のサーバー上のDockerを操作することが可能です。また、Docker HubにはNginx・Ubuntu・MySQLなど公式イメージが無料で公開されており、docker pull の一言でローカルに取得できます。自分で一からOSをセットアップする必要がなく、すぐに使い始められるのがDockerの大きな利点です。


📖 1-2. Dockerのアーキテクチャ概観(詳細記事)→

4

インストールはどうするの?

DockerはLinuxのカーネル機能(NamespaceとcgroupsなどをベースにしているためWindowsやmacOSではそのままでは動きません。各OSごとに専用の仕組みが用意されています。

🪟
Windows

Windowsでは Docker Desktop をインストールしますが、その前に WSL2(Windows Subsystem for Linux 2)の有効化が必要です。WSL2はWindows上でLinuxカーネルを動かす仕組みで、これがDockerのコンテナ実行基盤になります。WSL2なしの状態ではボリュームマウント(-v オプション)など一部の機能が正しく動かないケースがあります。

① PowerShell を管理者で開いて実行
wsl –install
② PC を再起動後、Docker Desktop をインストール
docker.com からインストーラーをダウンロード → ウィザードに従うだけ
⚠️ WSL2なしだとボリュームマウント(-v)などが正しく動かないケースがあります

🍎
Mac

Docker Desktop をインストールするだけでOK。内部でLinux VMが自動的に起動し、コンテナの実行基盤になります。

🐧
Linux

WSL2不要でDocker Engineを直接インストールできます。LinuxはDockerのネイティブ環境なので最もシンプルなセットアップです。


📖 1-4. Dockerのインストールと初期設定(詳細記事)→

5

まず動かしてみよう:hello-world

セットアップが完了したら、まず hello-world というイメージを使ってコンテナを起動してみましょう。hello-world はDockerが公式に用意したテスト用イメージで、起動すると「Hello from Docker!」というメッセージを表示するだけのシンプルなものです。機能はそれだけですが、Dockerが正しく動いているかを確認する最初の一歩として使われます。

Docker Desktop を起動してから、ターミナル(Windowsはコマンドプロンプト、MacはTerminal)で次のコマンドを実行してください。

$ docker run hello-world

▶ このコマンドで何が起きているの?

1
あなた → Docker Engine
docker run hello-world コマンドを受け取る

2
ローカルにイメージがあるか確認
初回は見つからないので Docker Hub へ取得しに行く

3
Docker Hub からイメージをダウンロード ☁️ → 💾
hello-world:latest をローカルに保存(2回目以降はスキップ)

4
イメージからコンテナを新規作成・起動
イメージをもとに独立した実行環境(コンテナ)が作られる

5
「Hello from Docker!」を表示 → コンテナ終了
メインプロセスが終了したのでコンテナも自動的に停止する

❓ なぜコンテナが即時終了するの?

Dockerのコンテナは 「中で動いているメインプロセスが生きている間だけ存在する」 という仕組みになっています。hello-world のメインプロセスは「メッセージを1回表示して終了」する設計なので、コンテナも即座に停止します。

たとえば nginx(Webサーバー)のコンテナは、メインプロセスが「リクエストを待ち続ける」設計なので、docker stop で明示的に止めない限り動き続けます。コンテナの寿命 = メインプロセスの寿命、これが基本ルールです。詳しいライフサイクルの管理方法は第2章で解説します。

📖 1-4. 動作確認:hello-world を動かす(詳細記事)→

🖥️ シミュレータで試してみよう

インストール前でもOK。下のシミュレータで docker run hello-world から始まる一連の流れを実際に体験できます。「Hello from Docker!」という実行結果がコマンド実行直後に出力されているのがわかると思います!

✅ 第1章のまとめ
① VMはOSごと・コンテナはライブラリだけ持つ → 軽くて速い
② コンテナの分離は Namespace と cgroups で実現(Linuxカーネルの機能)
③ Docker は CLI → Daemon → レジストリ(Hub)の3層構造
④ Windowsは WSL2 を先に有効化してから Docker Desktop を入れる
docker run hello-world で基本サイクルをまるごと体験できる

Dockerの基礎を動画で体系的に学びませんか?

実務で使う基礎だけを3時間に凝縮。環境構築から丁寧に解説しています。

Udemy Docker入門講座 クーポン割引で講座を見る →

コメント

タイトルとURLをコピーしました