Dockerをなんとなく使えているのですがあまりちゃんと理解できていない。
そんな思いからこの記事を書きました。
この手の「Dockerでイメージからコンテナを作成してちょっとした開発はできる。」という人によく起こるのがコンテナやイメージを削除した時にゴミが残ってしまう問題です。
今回の問題に関連して扱う公式リファレンスは以下です。
- コンテナでデータを管理 — Docker-docs-ja 17.06 ドキュメント
- rm — Docker-docs-ja 17.06 ドキュメント
- down — Docker-docs-ja 17.06 ドキュメント
どうしてゴミが残るのか
多くの人がぶつかる「コンテナとイメージを消したはずなのにディスクが膨らんでいく。」
この原因は外出ししたデータを削除していないことが原因です。
この問題にぶつかる人の多くが以下のようにコンテナを削除しています。
# docker rm <コンテナ名>
dockerではコンテナを入れ替えてもデータが消えないようにデータボリューム、またはデータボリューム・コンテナをマウントしデータを外だししていることが多いです。
外出しされたデータはコンテナのライフサイクルから切り離されるので、単純にコンテナを削除しただけでは消えてくれません。
詳しくは公式リファレンスをみてみましょう。
コンテナでデータを管理 — Docker-docs-ja 17.06 ドキュメント
ではどうすれば良いのか?
dockerではコンテナを削除する際、コマンドオプションでマウントしたボリュームも消すことが可能です。
- dockerの場合
コンテナ削除コマンドの実行時にv オプションを使用します。
docker rm -v <コンテナ名>
- docker-composeの場合
docker-compose down
を実行するときに --volumesオプションを追加します。
docker-compose down --volumes