›
第1章
›
第2章
›
第3章 …
この章では 「Dockerって何?どう動くの?」 という疑問を解消します。
⏱ 読了目安:約10分 / 各セクションに詳細記事へのリンクあり
Dockerを学ぶうえで最初にぶつかる疑問が「仮想マシン(VM)と何が違うのか」です。どちらも「1台のサーバーで複数のアプリを独立して動かす」技術ですが、その仕組みはまったく異なります。
VMはアプリごとにゲストOS(カーネルを含む)を丸ごと持ちます。そのため分離性は高い反面、起動に数分かかり、イメージサイズもGB単位になります。一方DockerのコンテナはゲストOSを持たず、ホストOSのカーネルを共有します。コンテナが持つのはアプリの実行に必要なライブラリだけなので、起動は数秒、サイズはMB単位に収まります。
Dockerが普及した最大の理由は「動く環境ごとパッケージできる」点にあります。開発者のMacで作ったコンテナをそのまま本番のLinuxサーバーで動かせるため、「自分の環境では動くのに本番で動かない」という問題が根本から解決します。
同じLinuxカーネルを複数のコンテナで共有しながら、なぜコンテナAの中からコンテナBのプロセスが見えないのでしょうか。その答えはLinuxカーネルにもともと備わっている2つの機能にあります。
NamespaceとcgroupsはDockerが発明したものではなく、Linuxカーネルにもともと組み込まれている機能です。Dockerはこれらをうまくラップし、イメージ管理・CLI・レジストリなどの使いやすい仕組みを加えることで、誰でも手軽にコンテナを扱えるようにしたツールです。初心者の段階では「Dockerはこの2つの仕組みを使って隔離を実現している」と理解しておけば十分です。
docker run と入力したとき、実際には何が起きているのでしょうか。Dockerは「コマンドを受け付ける部分(CLI)」と「コンテナを実際に動かす部分(Daemon)」が分離した設計になっています。
docker run などコマンドを受け付ける窓口CLIとDaemonが分離しているのには理由があります。DockerのCLIはリモートのDaemonにも接続できるため、手元のPCから別のサーバー上のDockerを操作することが可能です。また、Docker HubにはNginx・Ubuntu・MySQLなど公式イメージが無料で公開されており、docker pull の一言でローカルに取得できます。自分で一からOSをセットアップする必要がなく、すぐに使い始められるのがDockerの大きな利点です。
DockerはLinuxのカーネル機能(NamespaceとcgroupsなどをベースにしているためWindowsやmacOSではそのままでは動きません。各OSごとに専用の仕組みが用意されています。
Windows
Windowsでは Docker Desktop をインストールしますが、その前に WSL2(Windows Subsystem for Linux 2)の有効化が必要です。WSL2はWindows上でLinuxカーネルを動かす仕組みで、これがDockerのコンテナ実行基盤になります。WSL2なしの状態ではボリュームマウント(-v オプション)など一部の機能が正しく動かないケースがあります。
Mac
Docker Desktop をインストールするだけでOK。内部でLinux VMが自動的に起動し、コンテナの実行基盤になります。
Linux
WSL2不要でDocker Engineを直接インストールできます。LinuxはDockerのネイティブ環境なので最もシンプルなセットアップです。
セットアップが完了したら、まず hello-world というイメージを使ってコンテナを起動してみましょう。hello-world はDockerが公式に用意したテスト用イメージで、起動すると「Hello from Docker!」というメッセージを表示するだけのシンプルなものです。機能はそれだけですが、Dockerが正しく動いているかを確認する最初の一歩として使われます。
Docker Desktop を起動してから、ターミナル(Windowsはコマンドプロンプト、MacはTerminal)で次のコマンドを実行してください。

docker run hello-world コマンドを受け取るhello-world:latest をローカルに保存(2回目以降はスキップ)Dockerのコンテナは 「中で動いているメインプロセスが生きている間だけ存在する」 という仕組みになっています。hello-world のメインプロセスは「メッセージを1回表示して終了」する設計なので、コンテナも即座に停止します。
たとえば nginx(Webサーバー)のコンテナは、メインプロセスが「リクエストを待ち続ける」設計なので、docker stop で明示的に止めない限り動き続けます。コンテナの寿命 = メインプロセスの寿命、これが基本ルールです。詳しいライフサイクルの管理方法は第2章で解説します。
📖 1-4. 動作確認:hello-world を動かす(詳細記事)→
インストール前でもOK。下のシミュレータで docker run hello-world から始まる一連の流れを実際に体験できます。「Hello from Docker!」という実行結果がコマンド実行直後に出力されているのがわかると思います!
docker run hello-world で基本サイクルをまるごと体験できる


コメント