web-dev-qa-db-ja.com

Docker匿名ボリューム

次のような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
11

匿名ボリュームがどのように柔軟性を追加するかを尋ねる@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

最近では、名前付きボリュームを使用する方が、管理がはるかに簡単で、より明示的であるため、より適切になっています。

8
BitMask777

匿名ボリュームは同等これらのディレクトリをイメージの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をコンテナーの名前に置き換えてください。

0
Ricardo Branco