5.11. 2 つのコンテナー間でのファイルの共有
コンテナーが削除されても、ボリュームを使用してコンテナー内のデータを永続化できます。ボリュームは、複数のコンテナー間でのデータ共有に使用できます。ボリュームとは、ホストマシンに保存されているフォルダーです。ボリュームはコンテナーとホスト間で共有できます。
主な利点は以下のとおりです。
- ボリュームはコンテナー間で共有できます。
- ボリュームは、他と比べるとバックアップまたは移行が簡単です。
- ボリュームを使用するとコンテナーのサイズが増えません。
前提条件
-
container-toolsモジュールがインストールされている。
手順
ボリュームを作成します。
$ podman volume create hostvolumeボリュームに関する情報を表示します。
$ podman volume inspect hostvolume [ { "name": "hostvolume", "labels": {}, "mountpoint": "/home/username/.local/share/containers/storage/volumes/hostvolume/_data", "driver": "local", "options": {}, "scope": "local" } ]volumes ディレクトリーにボリュームが作成されることに注意してください。
$ mntPoint=$(podman volume inspect hostvolume --format {{.Mountpoint}})で、変数へのマウントポイントパスを保存して操作を簡素化できます。sudo podman volume create hostvolumeを実行すると、マウントポイントが/var/lib/containers/storage/volumes/hostvolume/_dataに変わります。mntPoint変数に保管されたパスを使用して、ディレクトリー内にテキストファイルを作成します。$ echo "Hello from host" >> $mntPoint/host.txtmntPoint変数で定義されたディレクトリー内の全ファイルをリスト表示します。$ ls $mntPoint/ host.txtmyubi1という名前のコンテナーを実行し、ホストのボリューム名hostvolumeで定義したディレクトリーをコンテナーの/containervolume1ディレクトリーにマッピングします。$ podman run -it --name myubi1 -v hostvolume:/containervolume1 registry.access.redhat.com/ubi8/ubi /bin/bashmntPoint変数 (-v $mntPoint:/containervolume1) で定義したボリュームパスを使用する場合には、podman volume pruneコマンドを実行すると未使用のボリュームが削除され、データが失われる場合がある点に注意してください。常に-v hostvolume_name:/containervolume_nameを使用します。コンテナー上にある共有ボリューム内のファイルをリスト表示します。
# ls /containervolume1 host.txtホスト上で作成した
host.txtファイルが表示されます。/containervolume1ディレクトリーにテキストファイルを作成します。# echo "Hello from container 1" >> /containervolume1/container1.txt-
CTRL+pおよびCTRL+qを使用してコンテナーからデタッチします。 ホスト上にある共有ボリューム内のファイルをリスト表示します。以下の 2 つのファイルが表示されるはずです。
$ ls $mntPoint container1.rxt host.txtこの時点で、コンテナーとホスト間でファイルを共有しています。2 つのコンテナー間でファイルを共有するには、
myubi2という名前の別のコンテナーを実行します。myubi2という名前のコンテナーを実行し、ホストのボリューム名hostvolumeで定義したディレクトリーをコンテナーの/containervolume2ディレクトリーにマッピングします。$ podman run -it --name myubi2 -v hostvolume:/containervolume2 registry.access.redhat.com/ubi8/ubi /bin/bashコンテナー上にある共有ボリューム内のファイルをリスト表示します。
# ls /containervolume2 container1.txt host.txtホストで作成した
host.txtファイルと、myubi1コンテナー内に作成したcontainer1.txtファイルが表示されます。/containervolume2ディレクトリーにテキストファイルを作成します。# echo "Hello from container 2" >> /containervolume2/container2.txt-
CTRL+pおよびCTRL+qを使用してコンテナーからデタッチします。 ホスト上にある共有ボリューム内のファイルをリスト表示します。以下の 3 つのファイルが表示されるはずです。
$ ls $mntPoint container1.rxt container2.txt host.txt