Dockerコンテナデータボリューム(Data Volume)とデータ管理
7386 ワード
ボリューム(
Volume
)はコンテナ内のデータマウントポイントであり、ボリュームは連合ファイルシステムを迂回してDockerに永続的なデータを提供し、提供されたデータはホスト-コンテナまたは複数のコンテナ間で共有することもできる.ボリュームを使用すると、ミラーを再構築することなく、変更データを直接有効にすることができます.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ボリューム・プラグインでは、
iSCSI
、NFS
、FC
、-v
など、コンテナに格納されているデータ・ボリュームを共有することができます.共有ボリュームを使用するメリットは、ホストとは独立していることです.これは、共有ストレージにアクセスし、プラグインをインストールすれば、任意のコンテナでボリュームを起動できることを意味します.詳細:ローカルファイルをコンテナデータボリュームにマウント
~/.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
コンテナ(例:db2
、dbstore
)からボリュームをマウントするマウントチェーンを拡張することもできます.$ 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