type
status
date
slug
summary
tags
category
icon
password
Dockerの永続ストレージの利用
学習目標
このセクションを完了することで、学生は以下のことができるようになります:
- コンテナの再起動を経てもアプリケーションデータを保持するための永続ストレージの利用方法。
- ホストディレクトリをコンテナのボリュームとして使用するための設定。
- コンテナ内でボリュームをマウントする方法。
永続的なストレージの準備
Dockerコンテナのストレージは「エフェメラル(揮発性)」と呼ばれ、コンテナが削除されるとその内容は保持されません。コンテナ化されたアプリケーションは、常に空のストレージから始まることを前提に設計されており、そのためコンテナの作成や削除は比較的軽量な操作とされています。
ただし、データベースなど、再起動後もデータを保持する必要があるアプリケーションには、エフェメラルストレージは不十分です。これらのアプリケーションをサポートするためには、コンテナに永続ストレージを提供する必要があります。
コンテナストレージの構造
コンテナイメージは「不変(immutable)」でレイヤー構造を持ち、変更されることはありませんが、上位のレイヤーが下位のレイヤーを上書きする形で構成されています。
- 実行中のコンテナは、ベースとなるコンテナイメージに新しいレイヤーを加え、このレイヤーがコンテナのストレージとなります。
- 初めてこのレイヤーはコンテナ内で唯一の読み書き可能なストレージとなり、作業用ファイル、一時ファイル、ログファイルなどがここに格納されます。これらは「揮発的」と見なされ、失われてもアプリケーションは問題なく動作します。
- コンテナストレージレイヤーは実行中のコンテナ専用であるため、別のコンテナを同じベースイメージから作成すると、新たな読み書き可能なレイヤーが作成されます。
このように、コンテナがデータを永続化するためには、永続ストレージを提供する別の手段(ボリュームやバインドマウントなど)を使う必要があります。

1. コンテナのストレージは一時的
コンテナは、短期間の作業や実行を目的としたものです。そのため、コンテナ内のデータは永続的に保存されるわけではありません。コンテナが停止したり再作成されると、そのデータは失われる可能性があります。
2. 永続的なデータ保存が必要な場合
コンテナ内にデータを保存する場合、特にデータベースやアプリケーションデータなどの永続的な保存が必要な場合は、コンテナのストレージを直接使うのは不適切です。代わりに、ホストマシンのディレクトリをコンテナにマウントして、データを保存することをお勧めします。
3. ストレージの回収
Dockerは、停止したコンテナのデータをしばらく保持しますが、新しいコンテナを作成するためにそのストレージを回収することがあります。もし、古いコンテナを早めに削除したい場合は、以下のコマンドで削除できます:
docker ps -a
(停止したコンテナを一覧表示)
docker rm <コンテナID>
(コンテナとそのストレージを削除)
4. ホストディレクトリを使ってデータを永続化
ホストマシンのディレクトリをコンテナに「バインドマウント」して、データを永続化できます。これにより、コンテナが再起動したり停止しても、データはホストマシンに保存され、他のコンテナでも利用できるようになります。
例:MySQLコンテナでデータを永続化する手順
- ホストディレクトリを作成:
- 適切な権限を設定(コンテナのユーザーが書き込みできるように):
- SELinuxの設定(Red Hat系のOSで必要な設定):
- コンテナにホストディレクトリをマウント:
これにより、ホストマシンの
/var/dbfiles
ディレクトリがコンテナ内の/var/lib/mysql
にマウントされ、データベースのデータが永続的に保存されます。
まとめ
- コンテナのストレージは一時的であり、データが失われることがあります。
- ホストディレクトリを使ってデータを保存することで、コンテナ停止後もデータを保管できます。
- これを実現するためには、ホストディレクトリの権限や設定を適切に行うことが重要です。
- 作者:みなみ
- 链接:https://tangly1024.com/資格勉強/142d7ae8-88e2-80df-a402-e12e12f2cb47
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章