コンテナ運用の基本——再起動・資源・掃除
コンテナを本番に近い形で動かし続けるには、落ちたときにどう復帰させるか、暴走したときにホストをどう守るか、そして不要になったものをどう掃除するかを知っておく必要があります。再起動ポリシー、CPUやメモリの資源制限、docker statsによる監視、docker system pruneでの掃除、healthcheckの考え方まで、運用の土台をひと通り学びます。
コンテナを起動できて、複数を組にして、名前で通信させて、レジストリで配布できるようになった。ここまで来ると、あとは「動かし続ける」段階に入る。
動かし続けるうえで避けて通れないのが、落ちたときの復帰、暴走したときの防御、そして溜まったゴミの掃除だ。この3つを押さえておくと、コンテナ運用の土台が固まる。
🔁 再起動ポリシー
コンテナの中のプロセスが何らかの理由で落ちたとき、コンテナも一緒に停止する。これを自動的に立て直すのが再起動ポリシーだ。docker run --restart オプションで指定する。
よく使われるのがunless-stoppedだ。これは「コンテナが異常終了したら自動で再起動するが、こちらが明示的にdocker stopで止めた場合は再起動しない」という挙動になる。似たものにalwaysもあるが、こちらはホスト再起動後も含めて常に起動しようとする点が異なる。
📏 資源制限——メモリとCPU
コンテナはホストとカーネルを共有しているため、何も制限しないと1つのコンテナがメモリやCPUを使い切り、ホスト全体や他のコンテナを巻き込んで不安定にすることがある。
これを防ぐのが--memoryと--cpusオプションだ。--memoryはそのコンテナが使えるメモリの上限を、--cpusは使えるCPUコア数の上限を指定する。上限を超えるとコンテナ側が制限され、ホストが道連れになるのを防ぐ。
📊 docker statsで監視する
資源制限を設定したら、実際にどれくらい使っているかを見たくなる。docker statsは、稼働中の全コンテナのCPU使用率・メモリ使用量・ネットワークの送受信量などをリアルタイムで表示するコマンドだ。
🧹 不要物の掃除——docker system prune
コンテナやイメージを作ったり消したりを繰り返していると、使われなくなったイメージ・停止したままのコンテナ・孤立したボリュームやネットワークがホストにどんどん溜まっていく。
docker system pruneは、これらの不要物をまとめて掃除するコマンドだ。停止中のコンテナ、どのコンテナからも使われていないネットワーク、タグの付いていないイメージなどが削除対象になる。
❤️ healthcheckという考え方
コンテナが「起動している」ことと、その中のアプリが「正常に動いている」ことは、実は同じではない。プロセスは生きていても、アプリ内部でデータベース接続が切れていて実質的に応答不能、という状態はありうる。
healthcheckは、コンテナの中で定期的にチェック用のコマンドを実行させ、その結果でコンテナの健康状態を判定する仕組みだ。Dockerfileの中でHEALTHCHECK命令として書くか、compose.yamlのhealthcheck項目で指定する。書き方は、実行するチェックコマンド・確認間隔(interval)・失敗と判定するまでの回数(retries)などをまとめて指定する形になる。
再起動・資源制限・監視・掃除・healthcheck、この5つが揃うと、コンテナは「作って動かす」段階から「任せて動かし続ける」段階に進む。ここまでの積み重ねが、実務でのコンテナ運用の土台になる。