メインコンテンツまでスキップ

第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が裏で何をしたか」を順番に説明してくれてます。だいたい👇の流れです:

  1. クライアントがデーモンに依頼
  2. デーモンが hello-world を取得(pull)
  3. そのイメージから新しいコンテナを作成
  4. 出力をターミナルに流す (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分で終わるやつ)

  1. hello-world普通に run ✅
  2. hello-world--rm付きで run ✅
  3. alpineecho を実行 ✅
  4. alpine-it で入って、cat /etc/os-release を見る ✅

全部できたら「起動の基礎体力」はもう付いてる!💪🎉


次章の予告👀🧹

次は「増えたコンテナを止めて、消して、整理する」回! run で増殖しがちな箱を、スッキリ片付けられるようになるよ〜😆🧼