🐧 Linux 総合学習プラットフォーム
コンテナ Docker/Podman ・ 中級

コンテナの起動と管理

コンテナの基本操作は、起動する・一覧する・止める、の3つです。docker run でイメージからコンテナを起動し、-d を付ければバックグラウンドで動かせます。docker ps で稼働中のコンテナを確認でき、-a を付けると停止済みも含めて表示します。不要になったら docker stop で止め、docker rm で削除します。各コンテナにはコンテナIDと名前が付き、操作の際の宛先になります。

イメージとコンテナの違いがつかめたら、次は頭の理解を指先に落とす番だ。

日々の操作は、煎じ詰めると「起動する・一覧する・止める・消す」の4つに集約される。それぞれに対応するコマンドが用意されている。この4つの往復が、コンテナ運用のいちばん土台になるリズムだ。

💡
ポイント日々の操作は「起動(run)・一覧(ps)・止める(stop)・消す(rm)」の4つ。この往復がコンテナ運用の土台だ。
起動するdocker run一覧するdocker ps止めるdocker stop消すdocker rm各操作のあと docker ps で状態を確かめるとリズムがつかめる

どの操作も、実行のたびに docker ps で状態を確かめることをセットにするとよい。何が起きたのかが目で追えて、理解が早くなる。ここではまず素の docker(または互換の podman)コマンドで、コンテナのライフサイクルを一通りたどってみる。

▶ 起動する――docker run

コンテナを起動する基本コマンドが docker run だ。書式は docker run イメージ名 で、たとえば docker run hello-world と打つと、動作確認用の小さなイメージからコンテナが起動する。

このとき、もし指定したイメージがローカルに無ければ、docker は自動でレジストリから取得(pull)してから起動する。だから初回だけ少し時間がかかり、2回目以降は一瞬で立ち上がる。

Webサーバのように起動しっぱなしにしたいコンテナには、-d オプション(detach、バックグラウンド実行)を付ける。docker run -d nginx のように起動する。-d を付けると画面が占有されず、プロンプトがすぐ戻ってくる。

▶
例docker run -d nginx ……-d でバックグラウンド起動。プロンプトがすぐ戻り、画面を占有しない。

起動時によく使うオプションを覚えておくと、後の操作がぐっと楽になる。--name web のように名前を付けておくと、後の操作でこの分かりやすい名前を宛先に使える(付けないと eager_morse のようなランダムな名前が自動で割り振られる)。

コンテナの中に入って対話的に操作したいときは -it を付ける。docker run -it ubuntu bash のようにシェルを指定すると、そのコンテナの中の bash にそのまま入れる。-i は入力を受け付ける(interactive)、-t は端末をつなぐ(tty)の意味で、2つセットで -it と覚えてかまわない。

✓
コツ-i(interactive)と -t(tty)はセットで -it。中に入って対話操作したいときの定番だ。

このときプロンプトが root@(コンテナID) に変わり、exit で抜けるとそのコンテナは停止する。この「抜けたら止まる」が、次の一覧で意外な顔を出す。

📋 一覧する――docker ps

いま動いているコンテナを確認するのが docker ps だ。引数なしの docker ps は稼働中のコンテナだけを表示し、CONTAINER ID・IMAGE・COMMAND・STATUS・NAMES といった列が並ぶ。

ここで初学者が必ず一度はまる落とし穴がある。「起動したはずのコンテナが docker ps に出てこない」というケースだ。

種を明かせば、これはたいてい、そのコンテナが既に停止しているためだ。稼働中だけを映す docker ps の一覧から外れているだけである。

⚠
つまずき「起動したのに docker ps に出ない」の多くは、もう停止しているため。-a を付けると停止済みも見える。

停止済みのものまで含めて全部見たいときは -a(all)を付けて docker ps -a とする。さきほど exit した ubuntu のコンテナが Exited (0) という STATUS で残っているのが、この一覧で確認できる。STATUS 列が Up なら稼働中、Exited なら停止済み、と読み分けよう。

🛑 止める・消す――docker stop と docker rm

コンテナはコンテナID(の先頭数文字)か、付けた名前のどちらでも指定して操作できる。稼働中のコンテナを止めるには docker stop web のように docker stop を使い、止めたコンテナ(箱)を削除するには docker rm web のように docker rm を使う。

ここに大事な順序がある。稼働中のコンテナはそのままでは docker rm できない。まず docker stop で止めてから docker rm で消す、という2段階が基本になる。

⚠
つまずき「止める前に消そうとしてエラー」はよくある失敗。stop してから rm、と手順で覚える。

「止める前に消そうとしてエラーになる」のはよくある失敗だ。stop してから rm、と手順で覚えておこう。急いでいて一度に済ませたいときは docker rm -f web のように -f(force)を付けると、動いていても強制的に止めて削除できる。

なお、ここで消えるのはコンテナ(実体)であって、もとのイメージ(雛形)ではない。イメージのほうを削除したいときは別コマンドの docker rmi イメージ名 を使う。

docker rm(コンテナを消す)と docker rmi(イメージを消す)は名前が似ていて混同しやすいので、対象が違うことをはっきり意識してほしい。なお、そのイメージを使っているコンテナが残っていると docker rmi は「使用中で消せない」と断られるので、先にコンテナ側を片付ける。前のトピックで見た「実体を片付けてから雛形」の順序が、ここでも顔を出す。

🔗 バラバラの操作を、一本につなぐ

ここまでを1本の流れにすると、コンテナのライフサイクルが頭ではなく体で分かる。

たとえば docker run -d --name web nginx で nginx を名前付き・バックグラウンドで起動する。docker ps で Up になっていることを確認する。用が済んだら docker stop web で止める。docker ps -a で Exited に変わったのを見る。最後に docker rm web で削除する、という一連だ。

▶
例docker run -d --name web nginx → docker ps → docker stop web → docker ps -a → docker rm web の一連を通して回す。

起動した実体は使い終わったら止めて消す、必要ならまた同じイメージから起動し直す。この発想が身につくと、コンテナを「使い捨ての実行環境」として気軽に扱えるようになる。

🏭 この回し方は、現場でどう生きるか

実務では、コンテナを長く生かし続けるよりも、作っては消し、また作る、という回し方をすることが多い。設定を変えたいときは、動いているコンテナを直接いじるのではなく、一度消してオプションを変えて起動し直すほうがよい。状態が予測しやすく、事故が減る。

動作確認のために ubuntu や alpine のような軽いイメージを -it で起動し、中を調べて exit、確認が済んだら docker rm で片付ける、といった使い方は日常的だ。

停止済みのコンテナは消さない限りディスクに残り続ける。だから docker ps -a で定期的に棚卸しして、不要なものを docker rm で掃除する習慣をつけておくと、環境を清潔に保てる。これらのコマンドはそのまま podman に読み替えても同じように動くので、ここで覚えた操作はそのまま応用が利く。

この項目に出てくる用語

コンテナこんてな
イメージから起動した、実行中のアプリの実体。
イメージいめーじ
アプリと実行環境を固めた読み取り専用の雛形。

関連コマンド

docker rundocker psdocker stopdocker rm

▶ 学習アプリでこの続きを学ぶ・演習する