148

を使用して、docker コンテナーとボリュームの間でフォルダーを共有することに成功しました。

docker run -v /host/path:/container/path ...

VOLUMEしかし、私の質問は、これとDockerfile でコマンドを使用することの違いは何ですか

VOLUME /path

コマンドを含むイメージを使用していますが、VOLUMEそれをホストと共有する方法を知りたいです。上記のコマンドを使用して実行しましたが、と-vの両方が必要かどうかわかりませんでした。-vVOLUME

4

6 に答える 6

164

このVOLUMEコマンドは、コンテナ内にディレクトリをマウントし、そのディレクトリ内で作成または編集されたファイルをコンテナ ファイル構造の外のホスト ディスクに保存し、ユニオン ファイル システムをバイパスします。

アイデアは、Docker コンテナー間でボリュームを共有でき、それらを参照するコンテナー (実行中または停止中) がある限り存在し続けるというものです。

--volumes-fromコンテナーの実行時にコマンドを使用して、他のコンテナーに既存のボリュームをマウントさせる (コンテナー間でそれらを効果的に共有する) ことができます。

VOLUMEとの基本的な違い-vは次のとおりです。-vはオペレーティング システムから既存のファイルを Docker コンテナ内にマウントし、ホストに新しい空のボリュームVOLUMEを作成してコンテナ内にマウントします。

例:

  1. を定義する Dockerfile がありますVOLUME /var/lib/mysql
  2. Docker イメージをビルドしてタグを付けるsome-volume
  3. コンテナを実行します

その後、

  1. このボリュームを使用したい別の docker イメージがある
  2. 次のコマンドを使用して docker コンテナーを実行します。 docker run --volumes-from some-volume docker-image-name:tag
  3. some-volumeこれで、ボリュームがマウントされた docker コンテナーが実行されました。/var/lib/mysql

注: を使用--volumes-fromすると、ボリュームの場所に存在するものすべてにボリュームがマウントされます。つまり/var/lib/mysql、 にコンテンツがあった場合、ボリュームのコンテンツに置き換えられます。

于 2014-08-14T16:10:33.203 に答える
13

VOLUME はDockerfile、他のコンテナーが使用するボリュームを公開するために使用されます。例、次のように作成Dockerfileします。

Ubuntuから:14.04

RUN mkdir /myvol  
RUN echo "hello world" > /myvol/greeting  
VOLUME /myvol

イメージをビルドします。

$ docker build -t testing_volume .

コンテナーを実行します。たとえば、container1 を実行します。

$ docker run -it <image-id of above image> bash

次に、volumes-from オプションを (say-container2) として別のコンテナーを実行します。

$ docker run -it --volumes-from <id-of-above-container> ubuntu:14.04 bash

/myvolcontainer1ディレクトリからすべてのデータを同じ場所の container2 に取得します。

-vオプションは、コンテナーのディレクトリをホストにマウントするために使用されるコンテナーの実行時に指定されます。使い方は簡単で、-vオプションに引数を として指定するだけ<host-path>:<container-path>です。コマンド全体は次のようになります$ docker run -v <host-path>:<container-path> <image-id>

于 2016-09-26T07:36:18.807 に答える
9

基本的VOLUME-vオプションとほぼ同等です。これらは、「コンテナに特定のディレクトリをマウントする」ことを意味します。例えばVOLUME /dataand-v /dataは全く同じ意味です。VOLUME /dataまたは-v /dataオプションを指定してイメージを実行すると、/dataディレクトリがコンテナにマウントされます。このディレクトリはコンテナに属していません。

コンテナにいくつかのファイルを追加/dataし、コンテナを新しいイメージにコミットするとします。/dataマウントされたディレクトリは元のコンテナーに属しているため、データ ディレクトリにファイルはありません。

$ docker run -it -v /data --name volume ubuntu:14.04 bash
root@2b5e0f2d37cd:/# cd /data
root@2b5e0f2d37cd:/data# touch 1 2 3 4 5 6 7 8 9
root@2b5e0f2d37cd:/data# cd /tmp
root@2b5e0f2d37cd:/tmp# touch 1 2 3 4 5 6 7 8 9
root@2b5e0f2d37cd:/tmp# exit
exit

$ docker commit volume nacyot/volume  
835cfe3d8d159622507ba3256bb1c0b0d6e7c1419ae32751ad0f925c40378945
nacyot $ docker run -it nacyot/volume
root@dbe335c7e64d:/# cd /data
root@dbe335c7e64d:/data# ls
root@dbe335c7e64d:/data# cd /tmp
root@dbe335c7e64d:/tmp# ls
1  2  3  4  5  6  7  8  9
root@dbe335c7e64d:/tmp# 
root@dbe335c7e64d:/tmp# 

このマウントされたディレクトリ/dataは、アプリケーションに属さないデータを格納するために使用されます。また、 を使用して、コンテナーに属さないデータ ディレクトリを事前に定義することができますVOLUME

Volumeとオプションの違いは、コンテナの起動時にオプションを動的に-v使用できることです。-vこれは、ディレクトリを動的にマウントできることを意味します。もう 1 つの違いは、ホスト ディレクトリをコンテナーにマウントできることです。-v

于 2014-08-14T16:16:46.450 に答える