Red Hat Training

A Red Hat training course is available for RHEL 8

4.11. 2 つのコンテナー間でのファイルの共有

コンテナーが削除されても、ボリュームを使用してコンテナー内のデータを永続化できます。ボリュームは、複数のコンテナー間でのデータ共有に使用できます。ボリュームとは、ホストマシンに保存されているフォルダーです。ボリュームはコンテナーとホスト間で共有できます。

主な利点は以下のとおりです。

  • ボリュームはコンテナー間で共有できます。
  • ボリュームは、他と比べるとバックアップまたは移行が簡単です。
  • ボリュームを使用するとコンテナーのサイズが増えません。

前提条件

  • Podman ツールがインストールされている。

    #  yum module install -y container-tools

手順

  1. ボリュームを作成します。

    $ podman volume create hostvolume
  2. ボリュームに関する情報を表示します。

    $ 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 に変わります。

  3. パスを使用してディレクトリーにテキストファイルを作成し、mntPoint 変数に格納します。

    $ echo "Hello from host" >> $mntPoint/host.txt
  4. mntPoint 変数で定義されたディレクトリー内の全ファイルを一覧表示します。

    $ ls $mntPoint/
    host.txt
  5. myubi1 という名前のコンテナーを実行し、ホストのボリューム名 hostvolume で定義したディレクトリーを コンテナーの /containervolume1 ディレクトリーにマッピングします。

    $ podman run -it --name myubi1 -v hostvolume:/containervolume1 registry.access.redhat.com/ubi8/ubi /bin/bash

    mntPoint 変数 (-v $mntPoint:/containervolume1) で定義したボリュームパスを使用する場合には、podman volume prune コマンドを実行すると未使用のボリュームが削除され、データが失われる場合がある点に注意してください。常に -v hostvolume_name:/containervolume_name を使用します。

  6. コンテナー上にある共有ボリューム内のファイルを一覧表示します。

    # ls /containervolume1
    host.txt

    ホスト上で作成した host.txt ファイルが表示されます。

  7. /containervolume1 ディレクトリーにテキストファイルを作成します。

    # echo "Hello from container 1" >> /containervolume1/container1.txt
  8. CTRL+p および CTRL+q を使用してコンテナーからデタッチします。
  9. ホスト上にある共有ボリューム内のファイルを一覧表示します。以下の 2 つのファイルが表示されるはずです。

    $ ls $mntPoint
    container1.rxt  host.txt

    この時点で、コンテナーとホスト間でファイルを共有しています。2 つのコンテナー間でファイルを共有するには、myubi2 という名前の別のコンテナーを実行します。手順 10: 手順 135 から 8 の手順に類似しています。

  10. myubi2 という名前のコンテナーを実行し、ホストのボリューム名 hostvolume で定義したディレクトリーを コンテナーの /containervolume2 ディレクトリーにマッピングします。

    $ podman run -it --name myubi2 -v hostvolume:/containervolume2 registry.access.redhat.com/ubi8/ubi  /bin/bash
  11. コンテナー上にある共有ボリューム内のファイルを一覧表示します。

    # ls /containervolume2
    container1.txt host.txt

    ホストで作成した host.txt ファイルと、myubi1 コンテナー内に作成した container1.txt ファイルが表示されます。

  12. /containervolume2 ディレクトリーにテキストファイルを作成します。

    # echo "Hello from container 2" >> /containervolume2/container2.txt
  13. CTRL+p および CTRL+q を使用してコンテナーからデタッチします。
  14. ホスト上にある共有ボリューム内のファイルを一覧表示します。以下の 3 つのファイルが表示されるはずです。

    $ ls $mntPoint
    container1.rxt  container2.txt host.txt

関連情報

  • man podman-volume