sql >> データベース >  >> NoSQL >> MongoDB

Docker:Dockerボリュームを保存するフォルダーを変更します

    名前付きボリュームは、dockerのフォルダー(/ var / lib / docker)内に保存されます。特定のホストフォルダにボリュームを作成する場合は、次の構文のホストボリュームを使用します。

    docker run -v /home/ubuntu/data/app-data:/app-data my-image
    

    または作成ファイルから:

    version: '2'
    services:
        mongo:
            container_name: "CaseBook-db"
            restart: always
            image: mongo:3.2.7
            ports:
                - "27017"
            volumes:
                - /home/ubuntu/data/db:/data/db
            labels:
                - "ENVIRONMENT_TYPE=meteor"
    
        app:
            container_name: "CaseBook-app"
            restart: always
            image: "meteor/casebook"
            build: .
            depends_on:
                - mongo
            environment:
                - MONGO_URL=mongodb://mongo:27017/CaseBook
            ports:
                - "80:3000"
            volumes:
                - /home/ubuntu/data/uploads:/Meteor-CaseBook-Container/.uploads
            labels:
                - "ENVIRONMENT_TYPE=meteor"
    

    ホストボリュームの場合、イメージ内のボリュームの内容は、ホストフォルダーのUIDを含む、ホストフォルダーの正確な内容でオーバーレイされます。空のホストフォルダは、空の名前付きボリュームのようにイメージから初期化されません。 UIDマッピングは、ホストボリュームを使用する上で最も難しい部分になる傾向があります。

    編集:以下のコメントから、ホストボリュームとして機能する名前付きボリュームが必要な場合は、Dockerのプラグインリストにリストされているローカルの永続ボリュームプラグインがあります。プラグインをインストールした後、ホストフォルダを指すボリュームを作成できます。名前付きボリュームを削除した後でも、ホストディレクトリが残されるという機能があります。プラグインの使用例は次のとおりです。

    docker volume create -d local-persist -o mountpoint=/data/images --name=images
    docker run -d -v images:/path/to/images/on/one/ one
    docker run -d -v images:/path/to/images/on/two/ two
    

    また、次のボリューム例を含むv2作成ファイルも含まれています。

    volumes:
      data:
        driver: local-persist
        driver_opts:
          mountpoint: /data/local-persist/data
    

    先月私が気付いた追加のオプションの1つは、ローカルボリュームドライバーのマウントオプションを使用して、バインドマウントを手動で作成することです。これはdockerのホストボリュームに似ていますが、次の違いがあります。

    • ディレクトリが存在しない場合、バインドマウントを指す名前付きボリュームでコンテナを起動しようとすると失敗します。ホストボリュームを使用すると、dockerはrootが所有する空のディレクトリに初期化します。
    • ディレクトリが空の場合、名前付きボリュームは、ファイルとディレクトリの所有権/権限を含む、マウント位置のイメージのコンテンツでバインドマウントを初期化します。ホストボリュームでは、ホストディレクトリの内容は初期化されません。

    名前付きボリュームをバインドマウントとして作成するには、次の方法で事前に作成できます。

    docker volume create --driver local \
      --opt type=none \
      --opt device=/home/user/test \
      --opt o=bind \
      test_vol
    

    docker runから コマンド、これは--mountで実行できます :

    docker run -it --rm \
        --mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=none,volume-opt=o=bind,volume-opt=device=/home/user/test \
        foo
    

    または、作成ファイルで、次のコマンドを使用して名前付きボリュームを作成できます。

    volumes:
      data:
        driver: local
        driver_opts:
          type: none
          o: bind 
          device: /home/user/test 
    

    名前付きボリュームの機能が必要な場合は、local-persistサードパーティドライバーではなく、ローカルドライバーで名前付きボリュームを使用することをお勧めします。



    1. StackExchange.Redisタイムアウト

    2. spring-redisがリモートホストに接続できません

    3. MongoDBが機械学習を可能にする方法

    4. ネストされた配列内の一致したサブドキュメント要素のみを返します