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 は、この namespace と cgroups を人間が扱いやすいコマンド体系(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 を書いてイメージをビルドする手を動かす段階になる。
操作手順は本サイトの範囲を超えるため、体系立った教材で学ぶのが効率的だ。概念を理解した状態から入れば、コマンドの一つ一つが「なぜそうなるか」とともに頭に入る。
学ぶ順番の目安は次のとおり。
docker runでイメージからコンテナを起動する基本- Dockerfile を書いて自分のイメージをビルドする
docker composeで複数コンテナをまとめて扱う- ボリューム・ネットワークで永続化と通信を設計する