第03章:runで“とにかく動かす”体験(Helloコンテナ)🎉
この章は「まず1回、確実に動かして勝つ🥳」がテーマ!
docker run を触れるようになると、Dockerの世界が一気に現実味を帯びます✨
この章でつかむコツ💡
docker run は 「(必要なら)イメージを取ってきて → コンテナを作って → 起動する」 を一気にやるコマンドです。(Docker Documentation)
つまり、最初はこう覚えるのが最強👇
docker run= “作って動かす” 🏗️▶️- 2回目以降は
docker startで “同じ箱をもう一度起動” もできる(後で効いてくる)(Docker Documentation)
コマンドの形はこれ👇(超大事!)
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
ここでポイントは2つ😆
IMAGEは 設計図(例:hello-world/alpine)COMMANDは 箱の中で実行したい命令(例:echo hello/sh)
ハンズオン①:Helloコンテナで“起動の儀式”🎉🐳
まずは成功体験を作ろう!一発でOK✅
docker run hello-world
うまくいくと、ターミナルに「Hello from Docker!」みたいな出力が出ます🎊 この出力の中身は、「Dockerが裏で何をしたか」を順番に説明してくれてます。だいたい👇の流れです:
- クライアントがデーモンに依頼
- デーモンが
hello-worldを取得(pull) - そのイメージから新しいコンテナを作成
- 出力をターミナルに流す (Docker Hub)
hello-worldは「文字を出すだけの最小イメージ」なので、失敗しづらいのがいいところ👍 しかも中身は “静的バイナリ1個” みたいな超ミニ構成です。(Docker Hub)
ハンズオン②:動いた“証拠”を確認しよう🔍📋
Helloは一瞬で終わる(=コンテナがすぐ停止する)ので、docker ps だけだと見えないことがあります😵
停止したコンテナも含めて見るには -a!
docker ps -a
「Exited (0)」みたいに出てたら勝ち🏆✨
(0 は “正常終了” のことが多いよ〜)
ハンズオン③:“1回だけ実行して消える”を体験(--rm)🧼✨
Helloコンテナは停止すると一覧に残ります。 でも実務だと「1回だけ使って消えてほしい」ことが多いんだよね🙂
そこで --rm!
docker run --rm hello-world
終わったらコンテナが自動で片付くので、作業が散らからない🧹 (片付けの本格トレーニングは次章でやるよ!)
ハンズオン④:箱の中でコマンドを実行してみる(COMMANDの感覚)🎮
COMMAND を付けると「箱の中でこれやって!」ができます。
docker run --rm alpine echo "Hello from container!!"
ここで起きてるのは👇
alpineという軽量Linuxイメージからコンテナを作る🐣- その中で
echo ...を実行する🗣️ - 終わったら
--rmで消える🧼
ちなみに alpine は「小さいのにパッケージが揃ってる」系の定番です。(Docker Hub)
ハンズオン⑤:箱の中に“入る”体験(-it)🕹️🐚
「中を覗く」のは次章以降で本格的にやるけど、ここで “入口だけ” 触ると理解が爆速になります💨
docker run --rm -it alpine sh
入れたら、試しにこれ👇
cat /etc/os-release
ls
echo "inside!"
exit
-iは入力を受け取る(stdinを開く)-tは対話しやすい表示にする(擬似TTY) このへんの説明も公式に載ってるよ🧠(Docker Documentation)
ボーナス:Nodeを“インストール無し”で1行実行😎🟩
TypeScript/Node民の特権〜!🎁
公式の node イメージを使うと、ローカルに何も入れずに node が叩けます。
docker run --rm node:lts-alpine node -e "console.log('Node in container!')"
node:lts-alpine みたいなタグは実在してて、Docker Hub側で更新もされてます。(Docker Hub)
(この「イメージを“道具箱”として使う」感覚、あとで開発効率に直結する!⚡)
“よく付ける run オプション”最小セット🧩✨
最初はこの6つだけでOK!👏
--rm:終わったら自動削除🧼--name xxx:コンテナに名前を付ける🏷️-it:対話モード(中でコマンド叩く系)🎮-d:裏で動かす(デタッチ)🫥-e KEY=VALUE:環境変数を渡す🎚️(後半で超使う)(Docker Documentation)--pull=always|missing|never:イメージ取得の方針を決める📥(Docker Documentation)
特に --pull は地味に効く!
公式では missing がデフォルトで、always にすると 毎回pullして最新化、never にすると ローカルに無いとエラー、という整理です。(Docker Documentation)
つまずき救急箱🧯😵💫(よくあるやつだけ)
1) 「docker daemonに接続できない」系🚑
だいたい Docker Desktopが起動してない or エンジン切替がおかしい。 まずはDocker Desktopを起動してから再実行🔁
2) WSL連携が怪しい気配🐧🪟
WSL2を使う構成だと、公式に「WSLを新しめにしよう」って書いてあります(最低でも一定バージョン以上推奨)。(Docker Documentation) WSLの状態確認はこれ👇
wsl.exe -l -v
(このへんは第2章の復習にもなるよ🙂)
AI活用コーナー🤖✨(そのままコピペでOK)
✅ 1) docker run を“日本語で一撃理解”したい
- 「
docker runが内部でやってる手順を、箇条書き5つで、比喩も入れて説明して」
✅ 2) 自分用の “runオプション早見表” を作る
- 「初心者がよく使う
docker runオプションを、用途→例コマンド→注意点 の3列で表にして」
✅ 3) 失敗ログを貼って“次の一手”だけ教えてほしい
- 「このエラーの原因候補トップ3と、確認コマンドを順番に出して(最短で直したい)」
(GitHub Copilot でも OpenAI 系でも同じノリでOK👌)
ミニ課題🎯(10分で終わるやつ)
hello-worldを 普通に run ✅hello-worldを --rm付きで run ✅alpineでechoを実行 ✅alpineに-itで入って、cat /etc/os-releaseを見る ✅
全部できたら「起動の基礎体力」はもう付いてる!💪🎉
次章の予告👀🧹
次は「増えたコンテナを止めて、消して、整理する」回!
run で増殖しがちな箱を、スッキリ片付けられるようになるよ〜😆🧼