コンテナの状態遷移(create → start → running → stop → remove)をステップで可視化します。
Docker コンテナは、アプリケーションとその依存関係をパッケージ化した軽量な実行環境です。 ホストOSのカーネルを共有しながら、プロセス・ネットワーク・ファイルシステムを隔離することで、どの環境でも同じように動くことを保証します。
たとえるなら、引っ越しの段ボール箱のようなものです。 中身(アプリ)と必要なもの(ライブラリ・設定ファイル)をまとめて箱に入れれば、どこに持っていっても同じように開けて使えます。 VM(仮想マシン)が「家ごと移動する」のに対し、コンテナは「箱だけ移動する」ので圧倒的に軽量です。
Docker Engine、containerd、Kubernetes など、コンテナ技術は現代のインフラの基盤になっています。 起動は数秒で完了し、イメージサイズは数十MB〜数百MB程度です。
docker create で箱を準備 → docker start で起動 → docker stop で停止 → docker rm で削除docker build で作成されます。 レイヤーの積み重ねで構成されており、一度作ったら変更されません。-p 80:80 は「ホストの80番ポートに来た通信をコンテナの80番ポートに転送する」という意味です。 コンテナはデフォルトでは外部からアクセスできないため、ポートマッピングで「窓口」を開けます。docker create はコンテナを作るだけ(created 状態)。 docker run は create + start を一発で実行します(running 状態)。 実務ではほとんど docker run を使います。docker create(または docker run の前半部分)を実行すると、カーネルがコンテナの実行環境を準備します。この段階ではプロセスはまだ動いていません。bridge ネットワークに接続されます。veth ペア(仮想ネットワークインタフェース)が作成され、片方がコンテナに、もう片方が docker0 ブリッジに接続されます。-p 80:80 を指定していれば、iptables の NAT ルールでポート転送が設定されます。config.v2.json)の作成、ホスト名・DNS・環境変数の設定などが行われます。ボリュームマウントの準備もこの段階です。docker start(または docker run の後半部分)を実行すると、Linux Namespace で隔離された空間の中でメインプロセス(PID 1)が起動します。PID NSNET NSMNT NSUTS NSdocker run --memory=512m --cpus=1.5 のように指定すると、メモリ 512MB・CPU 1.5 コアに制限されます。 制限を超えると OOM Killer がプロセスを強制終了します。--init フラグで tini を PID 1 にする回避策もあります)。docker pause は cgroup の freezer を使ってプロセスを凍結します。 カーネルのスケジューラが対象プロセスへの CPU 時間の割り当てを停止するため、プロセスから見ると「次の実行順番が永遠に来ない」だけであり、凍結されていること自体に気づきません。SIGSTOP はシグナルなので、親プロセスが waitpid() で検知でき、/proc/PID/status にも T (stopped) と表示されます。 一方 freezer はスケジューラレベルの操作なので、シグナルは一切送られず、プロセスの状態表示も変わりません。完全に透過的な停止です。docker unpause するとスケジューラが再び CPU を割り当て、凍結直前の命令の「次」から実行再開します。プロセスから見ると「少し処理が遅延しただけ」に見えます。docker stop はプロセスにシグナルを送ってグレースフルシャットダウンを試み、応答がなければ強制終了します。docker stop -t 30 でグレースピリオドを変更できます。docker start で再起動できます。ただしメモリ上のデータ(変数の値、TCP コネクションなど)はすべて失われるため、プロセスは最初から起動し直しになります。これが pause との根本的な違いです。docker stop は SIGTERM → 待機 → SIGKILL の「礼儀正しい」停止です。 docker kill は即座に SIGKILL を送る「強制」停止です。 通常は docker stop を使い、応答がないときだけ docker kill を使います。docker rm でコンテナのすべての痕跡を削除します。ただしイメージと Volume は残ります。rm して新しいコンテナを run するのが正しい運用方法です。 データの永続化が必要な場合は、必ず Volume を使います。
マルチコンテナ構成の起動・通信・停止の仕組みを可視化

Dockerfileの各命令でレイヤーキャッシュがヒット/ミスする仕組みを可視化。命令の順番がビルド速度に与える影響を理解できます

イメージのpush/pullとレイヤー単位の転送の仕組みを可視化

複数ステージで最終イメージを劇的に軽量化する仕組みを可視化

Volume・Bind Mount・tmpfsの3方式の仕組みとコンテナ削除時のデータの行方を可視化

ホスト↔コンテナのポート転送とNATの仕組みを可視化