Docker4 択難易度 標準

状況

本番の compose で動くアプリの調子が悪い。作業者が「きれいに作り直します」と次のコマンドを打とうとしている。compose.yaml には db サービスと名前付きボリューム db-data がある。

実行前に止めるべき理由は?

$ docker compose down -v$ docker compose up -d

正答

  1. -v は詳細表示なので、ログが大量に出て端末が固まる
  2. down の後に up -d すると、イメージが latest に自動で更新される
  3. -v で名前付きボリューム db-data が消え、DB のデータが失われる
  4. down はコンテナを止めるだけなので、作り直しにならない

解説

docker compose down はコンテナとネットワークを削除するが、名前付きボリュームは残す。-v(--volumes)を付けると、compose.yaml の volumes に書いた名前付きボリュームと、コンテナに付いた匿名ボリュームも削除する。db-data に入っている DB のデータが丸ごと消え、up -d で起動しても空の DB になる。多くのコマンドで -v は詳細表示を意味するので取り違えやすい。作り直すだけなら -v なしの down で足りる。up -d は手元にあるイメージを使い、無いときだけ pull する。down は停止だけでなくコンテナの削除まで行う。

参考: docs.docker.com

composedownvolumedata-loss

この問題を含む Docker のテストを制限時間つきで解く

Dockerクイズへ