Docker では、コンテナのデータを永続化するために ボリューム(Volume) を使用します。
コンテナを削除してもデータを保持でき、異なるコンテナ間でデータを共有することも可能 です。
[ 学習フェーズ ]
1. Docker ボリュームとは?
通常、Docker コンテナのデータは コンテナ内の一時的なストレージ に保存されるため、コンテナが削除されるとデータも消えてしまいます。
ボリュームを使用すると、コンテナを削除してもデータを保持でき、複数のコンテナで共有可能 になります。
ボリュームの特徴
- 永続的なストレージ: コンテナのライフサイクルとは独立してデータを保持
- 複数コンテナでのデータ共有: 異なるコンテナが同じデータを参照可能
- ホスト OS に保存: Docker ボリュームはホストマシン上のディレクトリに格納される
ボリュームの保存場所
ホストマシンでは、通常以下のディレクトリに保存されます。
/var/lib/docker/volumes/my-volume/_data
この _data
ディレクトリ内にコンテナで保存したファイルが格納されます。
2. AWS でのボリュームの対応サービス
AWS で Docker のボリュームを利用する場合、以下のサービスと関連付けることができます。
Docker ボリュームの用途 | AWS の対応サービス | 特徴 |
---|---|---|
EC2 on ECS | EBS(Elastic Block Store) | EC2 にアタッチする永続ストレージ |
複数の EC2 on ECS | EFS(Elastic File System) | 複数のインスタンス間で共有可能な NFS ストレージ |
Fargate でデータ永続化 | EFS(Elastic File System) | Fargate のコンテナ間でデータを共有 |
例:
- EBS: 単一の EC2 インスタンス上のコンテナでボリュームを使用する場合
- EFS: ECS や Fargate で複数コンテナ間でデータを共有する場合
[ 実践フェーズ ]
ハンズオン: 2つのコンテナ間でボリュームを共有
2つのubuntuコンテナ(ubuntu1,ubuntu2)を作成し、ubuntu1側でテキストファイルをvolumeに設置。
ubuntu1 で作成したファイルが ubuntu2 でも参照できることを確認しましょう。
1. Docker ボリュームを作成
docker volume create my-volume
ボリュームが作成されたことを確認:
docker volume ls
2. ubuntu1
でファイルを作成
ボリュームをマウントした ubuntu1
コンテナを起動:
docker run -it --name ubuntu1 -v my-volume:/my-volume ubuntu bash
コンテナ内でファイルを作成:
echo 'hello docker volume' > /my-volume/hello.txt
exit
3. ubuntu2
でボリュームが共有されているか確認
ubuntu2
を起動し、同じ my-volume
をマウント:
docker run -it --name ubuntu2 -v my-volume:/my-volume ubuntu bash
コンテナ内でファイルの内容を確認:
cat /my-volume/hello.txt
出力:
hello docker volume
このように、異なるコンテナ間でボリュームを共有できることを確認
4. 片付け(コンテナとボリュームの削除)
docker stop ubuntu1 ubuntu2
docker rm ubuntu1 ubuntu2
docker volume rm my-volume
+α データベースストレージの永続化
MySQLサーバーのデータが消えないようにvolumeを作成してみましょう。
初回のコンテナでinsert文を用いてuserテーブルを追加しコンテナを削除、2つ目のコンテナにて永続化ができているか確認します。
ボリューム名(任意):db-volume
デフォルトのデータ保存先:var/lib/mysql
※保存先の確認は、「docker container run --rm mysql:8.2.0 vat /etc/my.conf」で可能です。