1. ホーム
  2. docker

[解決済み] ドッカーデータボリュームとマウントされたホストディレクトリの比較

2023-02-03 16:26:32

質問

dockerでデータボリュームを持つことができます。

$ docker run -v /path/to/data/in/container --name test_container debian
$ docker inspect test_container
...
Mounts": [
    {
        "Name": "fac362...80535",
        "Source": "/var/lib/docker/volumes/fac362...80535/_data",
        "Destination": "/path/to/data/in/container",
        "Driver": "local",
        "Mode": "",
        "RW": true
    }
]
...

しかし、もしデータボリュームが /var/lib/docker/volumes/fac362...80535/_data を使用してマウントされたフォルダーにデータがあるのと同じことでしょうか? -v /path/to/data/in/container:/home/user/a_good_place_to_have_data ?

どのように解決するのですか?

<ブロッククオート

というのは、-v /path/to/data/in/container:/home/user/a_good_place_to_have_data でマウントしたフォルダにデータがあるのと同じことでしょうか?

それは、"で述べたとおりです。 ホスト ディレクトリをデータ ボリュームとしてマウントする " です。

ホストディレクトリは、その性質上、ホストに依存するものです。このため、ビルドイメージは移植可能であるべきなので、Dockerfileからホストディレクトリをマウントすることはできません。ホストディレクトリは、すべての潜在的なホストで利用できるわけではありません。

コンテナ間で共有したい、または非永続的なコンテナから使用したい永続的なデータがある場合、データボリュームコンテナという名前を付けて作成し、そこからデータをマウントするのが最善です。

両方のアプローチを組み合わせることができます。

 docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata

ここでは、新しいコンテナを起動し、ボリュームをマウントするために dbdata コンテナーからボリュームをマウントしています。

次に、ローカルホストのディレクトリを /backup .

最後に、コマンドを渡すと、そのコマンドが tar の内容をバックアップするために dbdata ボリュームに backup.tar ファイルの中に /backup ディレクトリの中にある ファイルを削除します。コマンドが完了し、コンテナが停止すると、バックアップとして dbdata ボリュームのバックアップが残ります。