LinuxユーザーのためのDocker入門概論 - コマンド知識を活かして学ぶ

LinuxユーザーのためのDocker入門概論 - コマンド知識を活かして学ぶ

この記事で解決できること

  • Docker が Linux の何を使って動いているのか を、プロセス・namespace・cgroups の知識から理解できる
  • イメージ・コンテナ・Dockerfile という基本用語を、丸暗記ではなく仕組みで 捉えられる
  • 手元の Linux コマンド知識が Docker 学習でどう活きるか の見取り図が持てる

結論(先に要点)

  • Docker は新しい魔法ではなく、Linux カーネルの機能(namespace / cgroups)を扱いやすく包んだ道具
  • コンテナの正体は「隔離された 1 つの Linux プロセス」。VM のような別 OS ではない
  • ファイルシステム・ネットワーク・プロセス管理の知識が そのまま Docker 理解の土台になる

この記事の位置づけ

  • 本サイトは Linux 学習サイト。Docker の操作手順(docker run の全オプション等)は扱わない
  • 目的は「Linux の知識から Docker へ橋を架ける」こと。概念を掴んだら実践は専用教材で深めるのが最短

Docker とは何か

結論: Docker は、アプリを「動く環境ごと」パッケージして持ち運べるようにするツール。その中身は Linux カーネルの隔離機能。

Docker を一言でいえば「アプリケーションを、依存関係を含めた 1 つのまとまりとして梱包し、どこでも同じように動かす」ための道具だ。「自分の環境では動くのに本番では動かない」という食い違いを、環境ごと配ることで解消する。

ここで多くの初学者が「コンテナ = 軽い仮想マシン」と誤解する。だが仕組みは根本的に違う。VM がハードウェアごと仮想化して別の OS を起動するのに対し、コンテナはホストの Linux カーネルをそのまま共有し、プロセスを隔離しているだけだ。この違いは コンテナと仮想マシンの違い で仕組みから解説している。

コンテナを支える Linux カーネルの機能は、大きく 2 つ。

  • namespace: プロセスから見える OS リソース(プロセス ID・ネットワーク・マウント等)を 区切る
  • cgroups: プロセスが使える CPU・メモリ・I/O の 量を制限する

現在のホストで動いている namespace は lsns で確認できる。

$ lsns
        NS TYPE   NPROCS   PID USER   COMMAND
4026531834 time      120     1 root   /sbin/init
4026531835 cgroup    120     1 root   /sbin/init
4026531836 pid       118     1 root   /sbin/init

つまり Docker は、この namespacecgroups を人間が扱いやすいコマンド体系(docker run など)に包んだラッパーだと捉えると腑に落ちる。

Docker の基本概念

結論: 覚えるべき用語は 3 つ。イメージ(設計図)・コンテナ(実行中プロセス)・Dockerfile(設計図の作り方)。

操作を覚える前に、まず 3 つの言葉の関係を掴む。

用語 正体 Linux に例えると
イメージ アプリと依存をまとめた読み取り専用の雛形 実行ファイル + 必要な一式
コンテナ イメージから起動した実行中のプロセス namespace で隔離したプロセス
Dockerfile イメージの作り方を記述したテキストの手順書 セットアップ用シェルスクリプト

流れはシンプルだ。Dockerfile からイメージをビルドし、イメージからコンテナを起動する。イメージは「クラス」、コンテナは「そのインスタンス」と捉えると、複数のコンテナが同じイメージから生まれる関係が理解しやすい。

$ docker images
REPOSITORY   TAG       IMAGE ID       SIZE
nginx        latest    a1b2c3d4e5f6   187MB

$ docker ps
CONTAINER ID   IMAGE     STATUS         NAMES
9f8e7d6c5b4a   nginx     Up 3 seconds   web

イメージは不変、コンテナは使い捨て イメージは読み取り専用で変わらない。コンテナはそこに書き込み可能な層を重ねた実行体で、壊れたら捨てて作り直せる。この「使い捨て前提」の発想が、Docker 運用の勘所になる。

なぜ Linux ユーザーが Docker を学ぶのか

結論: Docker は現代のインフラ・開発現場の共通語。Linux の素養がある人ほど、学習コストが低く優位に立てる。

Docker はいまや Web アプリのデプロイ、CI/CD、マイクロサービス、クラウド基盤まで、実務のあらゆる場面で使われている。求人票で「Docker 経験」を目にする機会も多い。

そして重要なのは、Linux の基礎ができている人にとって Docker の学習コストは低いという点だ。コンテナの正体が Linux プロセスである以上、プロセス管理・ファイルシステム・ネットワークの知識はそのまま応用が効く。ゼロから学ぶ人が「namespace とは」「cgroups とは」でつまずくところを、素通りできる。

Linux 学習の次の一歩として Docker が有力なのは、新しい世界に移るのではなく、いまの知識を一段拡張するからだ。

Linux コマンド知識がどう活きるか

結論: ファイルシステム・ネットワーク・プロセス管理の 3 領域が、Docker のトラブルシュートでそのまま武器になる。

具体的に、既存の Linux 知識が Docker のどこで活きるかを見る。

ファイルシステム

コンテナ内は独立したファイルシステムに見えるが、その実体はホスト上のディレクトリ(レイヤー)だ。df / du でディスクを追う感覚は、コンテナのディスク肥大化調査にそのまま使える。イメージ・コンテナ・ボリュームがどれだけ容量を食っているかの切り分けは Dockerディスク使用量の特定 で扱っている。

ネットワーク

コンテナは network namespace で独自の IP・インターフェースを持つ。ip addr / ss / ping でネットワークを診断する知識は、コンテナ間通信やポート公開(ポートフォワーディング)の理解に直結する。「なぜコンテナ内から外部に繋がらないのか」を切り分ける力は、通常の Linux ネットワーク診断の延長線上にある。

プロセス管理

コンテナ内では起動したアプリが PID 1 として振る舞う。ps / top でプロセスを見る、kill でシグナルを送る——この操作感は Docker でも変わらない。コンテナが終了する挙動は、signal(シグナル)とは で説明した SIGTERM / SIGKILL の理解がそのまま効く。

Docker 特有の知識は「薄い上澄み」 土台の 8 割は Linux の一般知識で、Docker 固有の知識はその上に乗る薄い層にすぎない。だからこそ Linux をやってきた人の伸びが速い。

学習の次のステップ

結論: 概念を掴んだら、手を動かす実践に進む。体系立った動画教材が最短ルート。

ここまでで「Docker が Linux の何を使っているか」「イメージ・コンテナ・Dockerfile の関係」「既存知識がどう活きるか」の見取り図が得られたはずだ。次は実際に docker run でコンテナを起動し、Dockerfile を書いてイメージをビルドする手を動かす段階になる。

操作手順は本サイトの範囲を超えるため、体系立った教材で学ぶのが効率的だ。概念を理解した状態から入れば、コマンドの一つ一つが「なぜそうなるか」とともに頭に入る。

学ぶ順番の目安は次のとおり。

  1. docker run でイメージからコンテナを起動する基本
  2. Dockerfile を書いて自分のイメージをビルドする
  3. docker compose で複数コンテナをまとめて扱う
  4. ボリューム・ネットワークで永続化と通信を設計する

次に読む