導入
コンテナの中に書き込んだファイル(データベースの中身、アップロードされた画像、ログなど)は、そのコンテナと運命を共にします。コンテナを docker rm で消すと、中のデータもまるごと消えます。まずはこの「使い捨て」の性質を、しっかり頭に入れましょう。
説明
イメージは「読み取り専用の設計図」でした(第1章)。コンテナを起動すると、その上に 書き込み用の薄い層(コンテナ層) が1枚かぶさり、実行中の変更はすべてこの層に書かれます。
flowchart TD
subgraph C["コンテナ db"]
W["書き込み層(コンテナ層)<br/>★ここに書いたデータは<br/>コンテナと一緒に消える"]
I["イメージ層(読み取り専用)<br/>postgres:16"]
W --- I
end
ポイントは、この書き込み層が コンテナ専用で、コンテナを消すと一緒に捨てられる こと。つまり——
flowchart LR
A["docker run<br/>DBにデータを保存"] --> B["docker rm<br/>コンテナを削除"]
B --> C["💥 データも消滅<br/>取り戻せない"]
たとえば PostgreSQL のコンテナを起動して、顧客データを 1万件登録したとします。その後うっかり docker rm -f db すると——1万件は跡形もなく消えます。「コンテナは気軽に作り直すもの」という Docker の思想と、「データは絶対に消したくない」という現実は、このままでは矛盾します。
この矛盾を解くのが、次のレッスンからの ボリューム。データをコンテナの外に置いて、コンテナが消えても生き残らせる仕組みです。
やってみよう
- 下の端末で
docker run -d --name db postgres:16を実行し、docker psでdbが動いていることを確認しましょう。 docker inspect dbを実行し、"Mounts": [ ](マウントが空=データは全部コンテナ層の中)になっていることを見てください。この状態でdocker rm -f dbすると、中のデータは失われます。