VOLUME

2017-06-05 7 views
0

として公開されていないドッカーコンテナパスにローカルディレクトリをマウントすることは何か違いがあります:VOLUME

コンテナー・パス(パスは、ボリュームとして公開されていない)、例えば宿主ディレクトリをマウント
  1. は: my_image

docker run -v /host/directory:/container/directory my_image command_to_run

DockerfileVOLUME ["/container/directory"]

が含まれていません。
  • ボリュームとして公開AA容器路にホストディレクトリをマウント:my_image
  • docker run -v /host/directory:/container/directory my_image command_to_run

    Dockerfileを私は知っているVOLUME ["/container/directory"]

    を含みますボリュームデータはコンテナのライフサイクルとは独立して保持されます。しかし、コンテナ内のローカルデータを処理したいので、コンテナ内のマウントポイントがボリュームであれば違いはありますか?

    答えて

    1

    ホストからコンテナにパスをマウントしても差はありません。ホストからのファイルシステムは、コンテナ内のそのディレクトリの上にマウントされます。

    ボリュームをリストし、イメージ内にリストしないことの違いは、ボリュームを指定せずにイメージを作成したときのドッカーの動作です。ボリュームがイメージ上で定義されると、dockerは "anonymous"ボリュームを作成します。このボリュームは、長いUUID文字列としてdocker volume lsで見ることができます。これらのボリュームはほとんど役に立ちませんので、イメージ内のボリュームを定義することをお勧めし、docker runコマンドまたはdocker-compose.yml定義でのみボリュームを定義することをお勧めします。画像内の容積を画定する

    欠点が挙げられる:Dockerfileまたは子孫Dockerfile年代の

    1. 後で線をこの位置で内容を変更することができないかもしれません。ドッカーのこの動作はシナリオとバージョンによって異なります。したがって、予測可能性のためにボリュームがイメージ内で定義されると、そのディレクトリは制限外とみなされます。

    2. 匿名ボリュームの作成は使いにくく、ファイルシステムを混乱させる可能性があります。

    詳細については、私がこの記事でblogを投稿しました。

    +0

    こんにちは、これは素晴らしい回答です。ありがとうございます。私が取り組んでいる1つのポイントがあります。イメージレベルでボリュームを定義するAfaikは、そのイメージによって生成されるデータの永続性にとって不可欠です。例えば。公式のMySQLイメージはデータを永続化するために 'VOLUME/var/lib/mysql'を指定します。このような場合、 'docker run'や' compose'でボリュームを定義することは実現できません。 – luqo33

    +0

    データコンテナが共通していた場合、ドッカーイメージの 'VOLUME'構文が使用されました。 'run'や' compose'でボリュームを定義するのをやめて、コンテナ名とボリューム名でデータコンテナを参照するのを省略しました。これはランタイムを作成する必要のある名前付きボリュームに置き換えられました。ビルド時にこれらを定義する必要はなく、実行時に任意のディレクトリをボリュームにすることができます。 – BMitch

    関連する問題