Dockerコンテナデータボリューム(Data Volume)とデータ管理

7386 ワード


ボリューム(Volume)はコンテナ内のデータマウントポイントであり、ボリュームは連合ファイルシステムを迂回してDockerに永続的なデータを提供し、提供されたデータはホスト-コンテナまたは複数のコンテナ間で共有することもできる.ボリュームを使用すると、ミラーを再構築することなく、変更データを直接有効にすることができます.
  • データボリューム
  • 1.1データボリュームの追加
  • 1.2ボリューム位置
  • 1.3ローカルデータをコンテナデータボリュームにマウント
  • データボリュームコンテナ
  • データボリュームのバックアップ、リカバリ、移行
  • 3.1バックアップデータボリューム
  • 3.2バックアップデータボリューム

  • 1.データボリューム


    データボリュームは、統合ファイルシステムを迂回することができ、1つ以上のコンテナ間でディレクトリを共有できるように指定されています.ボリュームは、データの永続化または共有に役立つ機能を提供します.
    データボリュームの設計の最初の悲しみは、コンテナのライフサイクルに関係なく、永続化されたデータを提供することです.したがって、コンテナを削除すると、Dockerはコンテナが参照されないまでボリュームを自動的に削除しません.

    1.1データボリュームの追加

    docker createコマンドおよびdocker createコマンドでコンテナを作成する場合は、-vパラメータを使用してコンテナにデータボリュームを追加できます.-vパラメータパラメータは、複数のデータボリュームを追加するために複数回使用できます.
    たとえば、次のようにコンテナにボリュームを追加できます.
    $ sudo docker run -t -i -v /home/test --name test itbilu/test /bin/bash

    これにより、コンテナ内/webappの場所にボリュームが作成されます.
    コンテナの作成時にデータボリュームを追加するほか、DockerfileファイルでVolumeコマンドで追加することもできます.Volumeは複数のデータボリュームを追加するために複数回使用できます.
    説明:本明細書で使用するミラーの例(itbilu/test)は、次のDockerfileファイルから作成されます.
    # Version: 0.0.3
    FROM ubuntu:16.04
    MAINTAINER   "[email protected]"
    RUN apt-get update
    RUN apt-get install -y nginx
    RUN echo 'Hello World,  ' \ 
       > /var/www/html/index.html
    RUN mkdir /home/itbilu/
    ENV ITBILU_PATH /home/itbilu/
    VOLUME [$ITBILU_PATH]
    EXPOSE 80

     

    1.2ボリューム位置


    ボリュームを追加すると、docker inspectでコンテナ内のデータボリュームの場所を表示できます.
    $ sudo docker inspect test
    docker inspectコンテナまたはミラーの詳細な構成情報を表示するために使用できます.コンテナのMountsノードの下で、コンテナのボリューム情報を表示できます.
    ...
    "Mounts": [{
      "Type": "volume",
      "Name": "5f869c580c06e6079b0de2c5ce682c1c9467286c76b506703d87bf11d1271c24",
      "Source": "/var/lib/docker/volumes/5f869c580c06e6079b0de2c5ce682c1c9467286c76b506703d87bf11d1271c24/_data",
      "Destination": "/home/test",
      "Driver": "local",
      "Mode": "",
      "RW": true,
      "Propagation": ""
    },
    {
      "Type": "volume",
      "Name": "e4fd6c3a91ba2e03b14cf174c2023f366abbe9f2f73ca07e6bac223f68e47773",
      "Source": "/var/lib/docker/volumes/e4fd6c3a91ba2e03b14cf174c2023f366abbe9f2f73ca07e6bac223f68e47773/_data",
      "Destination": "[/home/itbilu/]",
      "Driver": "local",
      "Mode": "",
      "RW": true,
      "Propagation": ""
    }],
    ...

    上記の例では、2つのマウントボリュームがあり、1つはdocker runコンテナの作成時に作成され、もう1つは、コンテナミラーを実行するDockerfileファイルの作成中にVOLUMEコマンドによって作成されます.ここで、Sourceはシンクホストソースファイルの位置を示し、Destinationはデータボリュームのコンテナ内のマウント位置を示し、RWはボリュームが読み取り/書き込み可能であるか否かを示す.
     

    1.3ローカルデータをコンテナデータボリュームにマウントする


    前述の例では、コンテナを実行するときにコンテナにマウントするデータボリュームのローカルディレクトリを指定していません.Dockerではデフォルトのデータディレクトリを使用します.-vパラメータは、コンテナにデータボリュームを作成するほか、ホスト内のディレクトリをコンテナ内のデータボリュームにマウントすることもできます.
    たとえば、コンテナを実行し、ローカルの~/code/itbiluディレクトリをコンテナの/home/itbiluデータボリュームにマウントします.
    $ sudo docker run -t -i -v ~/code/itbilu:/home/itbilu --name test itbilu/test /bin/bas

    注意:ローカル・ディレクトリをコンテナ内のマウント・ディレクトリにマウントする場合、コンテナ内のデータ・ボリュームにデータがすでに存在する場合、ローカル・コンテンツはデータ・ボリューム内のデータと重複し、データは削除されません.
    ただし、コンテナディレクトリでは絶対パスを使用する必要がありますが、ローカルディレクトリでは絶対パスまたは他の形式を使用できます.
     
    共有ストレージのマウント
    ローカルディレクトリをコンテナ・データ・ボリュームにマウントできるほか、一部のDockerボリューム・プラグインでは、iSCSINFSFC-vなど、コンテナに格納されているデータ・ボリュームを共有することができます.共有ボリュームを使用するメリットは、ホストとは独立していることです.これは、共有ストレージにアクセスし、プラグインをインストールすれば、任意のコンテナでボリュームを起動できることを意味します.詳細:
  • Mount a shared-storage volume as a data volume

  •  
    ローカルファイルをコンテナデータボリュームにマウント~/.bash_historyパラメータは、ディレクトリだけでなく、単一のファイルもマウントできます.次のようになります.
    $ sudo docker run -t -i -v ~/.bash_history:/root/.bash_history \
    --name test itbilu/test /bin/bash

    以上、ローカルのbashファイルを新しいコンテナにマウントします.これにより、コンテナ内でホスト上のtraining/postgres履歴にアクセスできます.
     

    2.データボリュームコンテナ


    コンテナ間で共有する永続性データがある場合や、非永続コンテナで使用する場合は、名前付きデータボリュームコンテナを作成し、データをマウントすることが望ましい.
    次に、新しい名前の共有コンテナを作成します.このコンテナは、training/postgresミラーを使用してすべてのコンテナ間に共有レイヤを作成し、ディスク領域を節約するアプリケーションを実行しません.
    $ sudo docker create -v /dbdata --name dbstore training/postgres /bin/true

    注意:--volumes-fromはDockerの公式ドキュメントに提供されているミラーであり、本稿では直接使用します.
    データボリュームコンテナの使用
    データボリュームコンテナを作成したら、training/postgresオプションを使用して、別のコンテナにデータコンテナをマウントできます.
    $ sudo docker run -d --volumes-from dbstore --name db1 training/postgres

    複数のコンテナ間で共有することもできます.たとえば、別のコンテナにマウントします.
    $ sudo docker run -d --volumes-from dbstore --name db2 training/postgres

    この場合、/dbdataミラー内の名前dbstoreのディレクトリがある場合、training/postgresコンテナからボリュームがマウントされ、/dbdataミラー内のdbstore下のファイルが非表示になります.最終的には、dbstoreコンテナ内のファイルのみが表示されます.
    既存のdb1コンテナ(例:db2dbstore)からボリュームをマウントするマウントチェーンを拡張することもできます.
    $ sudo docker run -d --name db3 --volumes-from db1 training/postgres

    この場合、最初のdb1容器であっても、その後のdb2容器であっても、自己マウントボリュームの容器を除去すると、ボリュームは除去されない.ボリュームをハードディスク(HDD)から削除するには、docker rm -vコマンドを使用して、ボリュームを参照した最後のコンテナを削除する必要があります.
     

    3.データボリュームのバックアップ、リカバリ、移行


    上記の操作に加えて、データボリュームの一般的な操作には、データボリュームのバックアップ、リカバリ、マージ操作があります.一般的な操作は次のとおりです.

    3.1バックアップデータボリューム


    先にデータボリュームコンテナについて説明したとき、dbdataコンテナという名前のコンテナを作成し、コンテナに/dbdataのデータボリュームを作成しました.次に、--volumes-fromパラメータを使用してコンテナを作成してこのデータボリュームをマウントし、データをバックアップできます.
    $ sudo docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata

    この操作では、ubuntuミラーリングによりコンテナを作成し、--volumes-fromパラメータによりデータボリュームコンテナ内のデータを共有し、現在のディレクトリ($(pwd))をデータボリュームにマウントします.コンテナの実行後、tarコマンドを使用してデータボリュームをバックアップしました.
    コマンドの実行が完了すると、コンテナは停止し、ローカルの現在の操作ディレクトリの下でバックアップされたデータを見つけることができます.
     

    3.2バックアップデータボリューム


    データバックアップ後、コンテナを作成してバックアップデータをコンテナ内のデータボリュームにリカバリし、データの移行を実現できます.
    まず、コンテナを作成して実行し、データボリュームを追加します.
    $ sudo docker run -i -t -v /dbdata --name dbdata2 ubuntu /bin/bash

    次に、tarコマンドを使用してバックアップデータをリカバリします.
    $ sudo docker run --rm --volumes-from dbdata2 -v $(pwd):/backup ubuntu bash -c "cd /dbdata && tar xvf /backup/backup.tar --strip 1"

    これにより、コンテナdbdata2/dbdataディレクトリにデータが復元され、コンテナでこれらのデータを操作して使用することができます.
    テキストリンク:https://itbilu.com/linux/docker/4kiHC33_G.html
    転載先:https://www.cnblogs.com/-wenli/p/11381871.html