aws

【A-26】Docker volume

Docker では、コンテナのデータを永続化するために ボリューム(Volume) を使用します。
コンテナを削除してもデータを保持でき、異なるコンテナ間でデータを共有することも可能 です。

[ 学習フェーズ ]

1. Docker ボリュームとは?

通常、Docker コンテナのデータは コンテナ内の一時的なストレージ に保存されるため、コンテナが削除されるとデータも消えてしまいます。
ボリュームを使用すると、コンテナを削除してもデータを保持でき、複数のコンテナで共有可能 になります。

ボリュームの特徴

  • 永続的なストレージ: コンテナのライフサイクルとは独立してデータを保持
  • 複数コンテナでのデータ共有: 異なるコンテナが同じデータを参照可能
  • ホスト OS に保存: Docker ボリュームはホストマシン上のディレクトリに格納される

ボリュームの保存場所

ホストマシンでは、通常以下のディレクトリに保存されます。

/var/lib/docker/volumes/my-volume/_data

この _data ディレクトリ内にコンテナで保存したファイルが格納されます。

2. AWS でのボリュームの対応サービス

AWS で Docker のボリュームを利用する場合、以下のサービスと関連付けることができます。

Docker ボリュームの用途AWS の対応サービス特徴
EC2 on ECSEBS(Elastic Block Store)EC2 にアタッチする永続ストレージ
複数の EC2 on ECSEFS(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」で可能です。