Dockerコンテナの運用において、データの永続化や複数コンテナ間でのデータ共有が必要となる場面があります。これを実現するための主な手法として「データボリューム」と「データボリュームコンテナ」の2つのアプローチがあります。
●データボリュームの基本概念
データボリュームはコンテナが利用できる特別なディレクトリで、ホストOSのディレクトリをコンテナ内に直接マッピングする仕組みです。以下のような利点があります:
・複数のコンテナでデータボリュームを共有・再利用可能 ・コンテナ内外からのデータ変更が即座に反映される ・データの更新がイメージに影響を与えない(アプリとデータの分離) ・使用中のコンテナが存在する限り永続的に保持される
- ホストディレクトリのマウント方法
まず、/home/user/shared/dataディレクトリにsample.txtとapp.logという2つのファイルを作成します。
docker run -d -it --name=app-container -v /home/user/shared/data:/app/data nginx:latest /bin/bash
コンテナにアクセスして/app/dataディレクトリを確認すると、上記の2つのファイルが表示されます。
docker exec -it a8b3c2d1e4f5 /bin/bash
sample.txtに内容を追加すると、ホスト側でも同じ変更が確認できます。
- コンテナ内でのデータボリューム作成
以下のコマンドでvolume-demoというコンテナを作成し、/storageというデータボリュームをコンテナ内に生成します。
docker run -d -it --name=volume-demo -v /storage centos:8 /bin/bash
●データボリュームコンテナの活用
先ほど作成したapp-containerを基準として、新しいコンテナを2つ作成し、app-containerのボリュームを継承します。
docker run -it --volumes-from app-container --name worker1 alpine:latest /bin/sh
docker run -it --volumes-from app-container --name worker2 alpine:latest /bin/sh
worker1コンテナ内でsample.txtに「updated by worker1」という文字列を追加します。その後、worker2コンテナで同じファイルを確認すると、変更内容が反映されていることがわかります。
さらに、worker1コンテナに再度アクセスしてファイルの内容を確認すると、worker2コンテナでの変更も同期されていることが確認できます。