次のようなdocker-compose.yml
ファイルでDockerボリューム定義を見てきました。
-v /path/on/Host/modules:/var/www/html/modules
Drupalの公式イメージ 、彼らのdocker-compose.yml
ファイルが 匿名ボリューム を使用していることに気づきました。
コメントに注意してください:
volumes:
- /var/www/html/modules
- /var/www/html/profiles
- /var/www/html/themes
# this takes advantage of the feature in Docker that a new anonymous
# volume (which is what we're creating here) will be initialized with the
# existing content of the image at the same location
- /var/www/html/sites
コンテナの実行後に匿名ボリュームをホストマシン上のパスに関連付ける方法はありますか?そうでない場合、匿名ボリュームを持つことのポイントは何ですか?
完全なdocker-compose.ymlの例:
version: '3.1'
services:
drupal:
image: drupal:8.2-Apache
ports:
- 8080:80
volumes:
- /var/www/html/modules
- /var/www/html/profiles
- /var/www/html/themes
# this takes advantage of the feature in Docker that a new anonymous
# volume (which is what we're creating here) will be initialized with the
# existing content of the image at the same location
- /var/www/html/sites
restart: always
postgres:
image: postgres:9.6
environment:
POSTGRES_PASSWORD: example
restart: always
匿名ボリュームがどのように柔軟性を追加するかを尋ねる@JeffRSonからのフォローアップの質問/コメントに応えて、もう少し情報を追加し、OPからこの質問に答えます。
コンテナの実行後に匿名ボリュームをホストマシン上のパスに関連付ける方法はありますか?そうでない場合、匿名ボリュームを持つことのポイントは何ですか?
TL; DR:「データコンテナ」を介して特定の匿名ボリュームを実行中のコンテナに関連付けることができますが、名前付きボリュームを使用することでより適切に対応できるようになったユースケースを柔軟にカバーできます。 。
Docker 1.9にボリューム管理を追加する前は、匿名ボリュームが役に立ちました。それ以前は、ボリュームに名前を付けるオプションはありませんでした。 1.9リリースでは、ボリュームは独自のライフサイクルを持つ個別の管理可能なオブジェクトになりました。
1.9より前は、ボリュームに名前を付ける機能がなかったため、最初にデータコンテナを作成してボリュームを参照する必要がありました。
docker create -v /data --name datacontainer mysql
次に、データコンテナの匿名ボリュームを、ボリュームへのアクセスが必要なコンテナにマウントします。
docker run -d --volumes-from datacontainer --name dbinstance mysql
最近では、名前付きボリュームを使用する方が、管理がはるかに簡単で、より明示的であるため、より適切になっています。
匿名ボリュームは同等これらのディレクトリをイメージのDockerfileでVOLUMEとして定義することと同じです。実際、DockerfileでVOLUMEとして定義されているディレクトリare匿名ボリュームは、ホストに明示的にマップされていない場合。
それらを持つことのポイントは、追加の柔軟性です。
PD:匿名ボリュームは、ホストの/ var/lib/docker(または構成したディレクトリ)のどこかにすでに存在します。それらがどこにあるかを確認するには:
docker inspect --type container -f '{{range $i, $v := .Mounts }}{{printf "%v\n" $v}}{{end}}' $CONTAINER
注:$CONTAINER
をコンテナーの名前に置き換えてください。