🐧 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

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