【DevOpsシリーズ】Dockerのデータ量(ボリューム)について詳しく解説
記事ディレクトリ
I. 概要
Docker のイメージは、複数の読み取り専用ファイル システムを重ね合わせて形成されます。コンテナーを起動すると、docker は読み取り専用レイヤーをロードし、読み取り専用レイヤーの上 (スタックの一番上) に読み取り/書き込みレイヤーを追加します。読み取り専用レイヤーのファイルを変更する必要がある場合は、このファイルレイヤーを読み取り/書き込みレイヤーにコピーする必要があります。ファイルの読み取り専用バージョンはまだ存在しており、上記のファイルの書き込みレベルのコピーによって隠されているだけです。docker を削除または再起動すると、以前に変更されたファイルは消えます。Docker では、読み取り専用レイヤーと読み取り/書き込みレイヤーの組み合わせを Union File System と呼びます。Docker は、アプリケーションと実行環境をパッケージ化して、実行用のコンテナを形成します。Docker コンテナによって生成されたデータが、新しいイメージを生成するための docker commit を通じて生成されない場合、データはイメージの一部として保存されます。 Docker にデータを保存するために、Docker はボリュームと呼ばれる仕組みを設計しました。
適切なデータ ストレージとデータ共有を実現するために、Docker はデフォルトの結合ファイル システムをバイパスし、通常のファイルまたはディレクトリの形式でホスト上に存在するボリュームの概念を提案しました。このディレクトリまたはファイルはデータ ボリュームと呼ばれます。。
2. データ量
ボリュームは 1 つ以上のコンテナで使用できる特別なディレクトリであり、UFS をバイパスし、次の機能を提供できます。
- データ ボリュームを使用すると、コンテナ間でデータを共有または再利用できます。
- ボリュームの変更は直接反映されます。
- データ ボリュームの変更はミラーの更新には含まれません。
- データ ボリュームのライフ サイクルは、そのデータ ボリュームを使用するコンテナがなくなるまで存続します。
3. データボリュームボリュームを使用する理由は何ですか?
ボリュームは、Docker に永続データまたは共有データを提供する 1 つ以上のコンテナ内の選択されたディレクトリであり、コンテナによって生成および使用されるデータを保存するための Docker の推奨メカニズムです。ボリュームへの変更はすぐに有効になり、イメージをコミットまたは作成するとき、ボリュームはイメージに含まれません。
データ ボリュームの役割:
- 永続データ
- データを共有する
データ量の特徴:
- たとえ効果が出たとしても
- ボリュームの更新はミラーリングに影響しません
- コンテナが停止または削除されても、ボリュームはデフォルトで存続します
4. データボリュームの基本操作
4.1 データボリュームの作成
次のコマンドを使用してデータ ボリュームを作成します
- docker volume create 卷名
docker volume create db_vol
このようにして作成されたデータボリュームは、docker volume によって表示や削除などの管理も可能です。
4.2 データ量の表示
docker volume ls
4.3 データ量の詳細を表示する
- docker volume inspect 卷名
docker volume inspect db_vol
4.4 データボリュームの削除
- docker volume rm 卷名
docker volume rm db_vol
5. データ量の使用
5.1 最初にデータボリュームを作成してからマウントします
docker volume create data_volume
5.2 コンテナが使用するデータボリュームの作成
docker run -d -it \
> --name volumetest \
> --mount source=data-vol,target=/data \
> ubuntu
注: 「\」を追加すると、最後のキャリッジ リターンとライン フィードがコメントに追加されます。システムはコマンドがまだ終了していないことを認識するため、終了文字が読み取られるまでユーザーの入力を待ち続けます。
略語 (-v):
docker run -d -it \
> --name volumetest \
> -v data-vol:/data \
> ubuntu
5.3 ホストディレクトリを直接マウントする
この方法では、事前にデータ ボリュームを作成する必要はありません。ホスト上のディレクトリを直接指定してコンテナにマウントできます。ただし、ホスト上に対応するディレクトリが存在する必要があり、存在しない場合は例外が報告されます。
docker: Error response from daemon: invalid mount config for type "bind": bind source path does not exist: /root/vdata.
1). マウント モードでコンテナを作成するコマンドは次のとおりです。
docker run -d -it \
> --name volumetest02 \
> --mount type=bind,source=/home/lisen/vdata,target=/vdata \
> ubuntu
2). -v モード作成コマンドは次のとおりです。
docker run -dit --name volumetest02 -v /home/lisen/vdata:/vdata ubuntu
5.4 読み取り専用データボリューム
作成されたデータ ボリュームはデフォルトで読み取り/書き込み可能であり、ほとんどの状況に適していますが、読み取り専用に設定することもできます。
1). マウント モードでコンテナを作成するコマンドは次のとおりです。
docker run -d -it \
> --name volumetest02 \
> --mount type=bind,source=/home/lisen/vdata,target=/vdata,ro \
> ubuntu
2). -v モードで作成します (省略形として理解できます):
docker run -dit --name volumetest02 -v /home/lisen/vdata:/vdata:ro ubuntu
データ ボリュームの主な機能はデータの永続化とデータ共有であるため、通常、読み取り専用モードは使用されません。
5.5 データボリュームコンテナ
目的: データ ボリューム コンテナーの主な目的は、複数のコンテナー間で継続的に更新されるデータを共有することです。また、データ ボリューム コンテナーは、他のコンテナーがマウントするデータ ボリュームを特に提供するコンテナーでもあります。
1)。新しいデータ ボリューム コンテナーを作成する
docker run -it -d --name data-volume-con -v /data ubuntu
2)。データボリュームコンテナを使用するための新しいコンテナを作成します
docker run -it -d --name db-con-1 --volumes-from data-volume-con ubuntu
パラメーター –volumes-from は、データ ボリューム コンテナーを指定するために使用されます。新しく作成したコンテナーを入力し、マウントされたディレクトリ (データ ディレクトリ、データ ボリューム コンテナーの作成時に指定したディレクトリ) に新しいテスト ファイルを作成します。
5.6 データボリュームコンテナ
1)。データボリュームのバックアップ
バックアップするデータ ボリューム (volumes-from パラメーターで指定) とデータのバックアップに使用されるデータ ボリューム (-v パラメーターで指定) の両方をマウントするコンテナーを作成します。tar 圧縮コマンドを使用してデータを圧縮します。 volume-from パラメータで指定されたバックアップ対象のボリュームは、バックアップに使用されるデータ ボリュームに圧縮されます (ホストの対応するディレクトリに保存するのと同等)。
docker run --rm \
> --name backup \
> --volumes-from data-volume-con \
> -v /host-backup:/con-backup \
> ubuntu tar cvf /con-backup/backup200201.tar /data
- –rm パラメータは、作成されたコンテナが一時コンテナであり、実行後に自動的に削除されることを指定します。このコンテナはバックアップを完了するためにのみ使用されます。バックアップが完了すると、データはホストに保存され、コンテナは自然に削除されます。不要になりました。
- –volumes-from パラメーターは、バックアップする必要があるデータ ボリューム コンテナーを指定します
- -v パラメータは、データのバックアップに使用されるデータ ボリュームを指定します。/host-backup はホスト ディレクトリ、/con-backup は対応するコンテナ ディレクトリです。
- tar コマンドはデータ圧縮を完了します。圧縮コマンドは実際にはコンテナ内で実行されるため、圧縮のソースはコンテナ ディレクトリであることに注意してください。正確には、バックアップ コンテナ (-name パラメータで指定) で実行されます。圧縮が完了すると、当然ホストディレクトリに保存されます。
2)。データ復元
復元されたデータを保存するためのコンテナーとして機能する新しいデータ ボリューム コンテナーを作成します。
docker run -it --name data-volume-con2 -v /data ubuntu
一時コンテナを作成し、リストアデータを格納するデータボリュームコンテナとバックアップデータを格納するデータボリュームの両方をマウントし、tarコマンドを使用してバックアップデータをリストアデータが格納されているデータボリュームに解凍します。
- -rm パラメータ。「データ バックアップ」セクションの説明を参照してください。
- –volumes-from パラメーターは、復元されたデータの保存に使用されるコンテナーを指定します。
- -v パラメータは、バックアップ データが保存されるデータ ボリュームを指定するために使用されます。/host-backup は、ホスト上のバックアップ データの保存に使用されるディレクトリです。コンテナの /container-back ディレクトリにマウントします。tar コマンドは、 /コンテナ-バック