同じことを行うのに 2 つの異なるオプションがあるのはなぜか知りたいです。 2 つの違いは何ですか?
ベストアンサー1
基本的に、永続データ用のボリュームまたはマウントには 3 つの種類があります。
バインドマウント
名前付きボリューム
Dockerfiles 内のボリューム
バインドマウントは基本的に、ホストから特定のディレクトリまたはファイルをコンテナ内にバインドするだけです(docker run -v /hostdir:/containerdir IMAGE_NAME
)
名前付きボリュームは、 を使用して手動で作成するボリュームですdocker volume create VOLUME_NAME
。これらは で作成され/var/lib/docker/volumes
、名前だけで参照できます。たとえば、「mysql_data」というボリュームを作成すると、次のように参照できますdocker run -v mysql_data:/containerdir IMAGE_NAME
。
また、dockerfiles には、命令によって作成されるボリュームがありますVOLUME
。これらのボリュームも作成されます/var/lib/docker/volumes
が、特定の名前はありません。その「名前」は、単なるハッシュの一種です。ボリュームは、コンテナーの実行時に作成され、コンテナーを起動するかどうかに関係なく、永続的なデータを保存するのに便利です-v
。開発者は、重要なデータがどこにあり、何を永続化する必要があるかを指定できます。
何を使えばいいですか?
何を使用するかは、主に好みまたは管理次第です。すべてを「docker 領域」( /var/lib/docker
) 内に保持したい場合は、ボリュームを使用できます。独自のディレクトリ構造を保持したい場合は、バインドを使用できます。
Dockerはバインドよりもボリュームの使用を推奨していますボリュームは docker によって作成および管理され、バインドが失敗する可能性が高くなります (レイヤー 8 の問題も原因です)。
バインドを使用して、コンテナー/アプリケーションを別のホストに転送する場合は、ディレクトリ構造を再構築する必要がありますが、ボリュームはすべてのホストでより均一になります。