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.txt
mntPoint
変数で定義されたディレクトリー内の全ファイルをリスト表示します。$ ls $mntPoint/ host.txt
myubi1
という名前のコンテナーを実行し、ホストのボリューム名hostvolume
で定義したディレクトリーをコンテナーの/containervolume1
ディレクトリーにマッピングします。$ podman run -it --name myubi1 -v hostvolume:/containervolume1 registry.access.redhat.com/ubi9/ubi /bin/bash
mntPoint
変数 (-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/ubi9/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
関連情報
-
システム上の
podman-volume
man ページ