ドッカーデータ管理(ボリューム/バインド/ tmpfsのマウント)

ボリューム、バインドマウント、ボリュームをTMPFS:ドッカーは、3つの異なるコンテナにホストデータを搭載するための方法を提供しています。あなたは、選択を覚えておくことはどの方法がわからない場合は、ボリュームは常に正しい選択です。

ボリュームはドッカーデータの永続化メカニズムです。バインドは、ボリュームの完全ドッカー管理により、ホストのディレクトリ構造に依存してマウントします。ボリュームは次のような利点があります。
  • ボリューム簡単にバックアップと移行。
  • ドッカーCLIまたはAPIによって管理することができます
  • ボリュームは、WindowsとLinuxの仕事の間には違いになることはできません。
  • 共有ボリュームの複数のコンテナより安全。
  • ボリュームのドライブを使用すると、リモートホストまたはクラウドにデータを保存し、データの内容を暗号化し、機能を追加することができます。
  • 新しいデータの内容は、事前に満たされた容器であってもよいです。
また、ボリュームは、コンテナのライフサイクルは、独立した、コンテナのサイズを大きくしません。
 

 
あなたのコンテナが永続的なデータを生成する必要がない場合には、使用tmpfsのモードを搭載、データがコンテナ層書き込みを避けるために書かれています。

 

私たちは、ドッキングウィンドウコンテナに書き込まれたデータを保存し、まだいくつかの欠点を持つことができますが。

  1. 容器が消えるなどのデータコンテナが実行を停止し、他のプロセスがこれらのデータを必要とするとき、コンテナからデータを抽出することは困難です。
  2. データは密接に彼のホスト・オペレーティング・システムに対応するコンテナ層に書き込まれ、データを容易に他の場所に移動することはできません。
  3. データ書き込み層コンテナにデータを書き込むには、Linuxカーネルを使用して、特定のストレージドライブを必要とするホストのファイルシステムおよびコンテナを管理するための統一されたファイルシステムを構築します。仮想化のこの追加の層は明らかにパフォーマンスが低下します。パフォーマンスの低下を避けるために、直接書き込み用のホスト・ファイル・システムへのデータボリュームドッカー方式の使用。

マウントの右のタイプを選択します

いずれかのマウントモードの選択は、容器のビュー内、データはデータであり、違いはありません。ホストからの全データをディレクトリまたはファイル・システム・コンテナ内のファイルとして表示されます。以下に示すように単純な私たちは、ホストマシンに保存されているコンテナデータ内の異なる場所で、これらの三つの方法で理解することができ、これらの三つの方法の違いは、それをマウントする方法を理解するには:
 
  1. ボリュームモード:データをホストする(Linux)特定のディレクトリ(の/ var / libに/ドッキングウィンドウ/ボリューム/)へのコンテナに格納されます。このディレクトリはドッカー管理ができ、他のプロセスを変更することはできません。あなたは、コンテナアプリケーションのデータを永続化したい場合は、ボリュームドッカーマウントするための推奨方法です。
  2. バインドモードをマウント:データは、ホスト・ファイル・システムの任意の位置にコンテナに格納され、さらに重要なシステムファイルやディレクトリを格納します。ドッカーもそれらのいずれかを変更することができるよりも、他のプロセスに加えて、
  3. 方法下TMPFS:データコンテナは、ホストがファイルシステムに書き込まれません、ホストのメモリに格納されるので、アプリケーションデータ格納容器を維持することができません。

詳細は、マウントするには、3つの方法を説明し

ボリューム: 
  • ドッカープロセスによって作成および管理。また、ドッカーコンテナまたはサービスを作成するプロセスにおけるプロセスによって作成することができ、作成コマンドのドッキングウィンドウのボリュームで指定されたボリュームを作成することができます。
  • あなたは、コンテナとしてのボリュームを作成する場合、このボリュームは、ホストマシン上のディレクトリに保存されます。あなたはコンテナにボリュームをマウントすると、そのディレクトリコンテナをマウントすることです。この機構はもちろん、ボリュームに加えて、ドッカーによって管理されており、他のコア機能よりもホストから単離され、バインドマウント非常に類似しています。
  • ボリュームは、同時に複数の容器に取り付けることができます。このボリュームの使用中の容器がない場合、ボリュームはまだ自動的に削除するのではなく、ドッカープロセスを使用することができます。ドッキングウィンドウのボリュームプルーン:もちろん、あなたは、ボリュームを削除するには、手動コマンドを使用することができます
  • ボリュームをマウントすると、あなたはそれに名前を付けていない場合は、ボリュームが第一の容器に装着された際に、ドッカープロセスが割り当てられます。(匿名)と命名されない場合があり、彼の名前(命名)のために選択することができますランダムな名前は、そのホスト・オペレーティング・システム、一意のボリューム名を確認します。名前に加えて、ボリュームに名前を付ける命名していないに違いはありません。
  • ボリュームはまた、あなたがリモートホストまたはクラウドにデータを救うために、ボリュームドライバーの使用をサポートしています。
バインドマウント:
  • 以前のバージョンではドッキングウィンドウは、彼の特徴がより限定された、ボリュームと比較して、機能に存在していました。バインドマウント、ホストファイルまたはディレクトリを使用する場合は、コンテナに装着されます。ファイルまたはディレクトリの絶対パスに従い、コンテナが使用することをマウントまたはホストマシンのデータを変更します。ホストは、必要なときにするために事前に既存のディレクトリやファイルが自動的に作成される必要がありません。バインドの使用は非常に良いですが、それは、ファイルシステムの適切なディレクトリ構造を持つホストに依存して、パフォーマンスにマウントされます。新しいアプリケーションドッカーを作成したい場合は、ドッカーCLIでバインドマウントを管理することはできませんので、我々はまだ、というボリュームの方法を使用することをお勧めします。(警告:バインドが使用バインドは、コンテナは、重要なシステムファイルやディレクトリの作成、変更、削除などのホスト・ファイル・システムを、変更するプロセスを介して容器の内部で行うことができるマウントので、この機能は強力ですが、両刃の剣をマウントが、どうやらも)ホスト上のドッカー以外のプロセスへの影響を含め、セキュリティへの影響を引き起こします
tmpfsマウント:
  • 取り付けのこの方法では、コンテナアプリケーションのデータは、データが一部だけの不要な永続ストレージのためのライフコンテナのサイクル、または保管中に使用することができ、持続的なハードディスクに保存されることはありませんいくつかの機密データや情報。例えば、ドッキングウィンドウ内で、コンテナおよびサービスにtmpfsの方法を実装するために秘密を使用して群れサービス。(秘密について、参考https://docs.docker.com/engine/swarm/secrets/)
バインドマウントとボリュームは、容器内にフラグまたは-v --volumeを用いて実装するが、わずかに異なるフォーマットすることができます。tmpfsのマウントするロゴ--tmpfsを使用することができます。しかし、上記のDocker17.06とでは、我々はこのフォーマットをより明確にするため、容器やサービスをマウントする--mount三つの方法を使用することをお勧めします。

アプリケーションシナリオのボリューム

  • 複数の容器の中でデータを共有する必要があります。手動のボリュームが作成されていないがある場合は、コンテナが停止または削除された場合、それは自動的にコンテナにマウント最初の前に作成され、このボリュームは削除されません。複数の容器は同時にであってもよく、またはRW RO方法は、ボリュームをマウントします。手動でのみ指定されたボリュームを削除し、それが削除されます。
  • ホストは、ファイルシステム構造をドッキングウィンドウに専用されていない場合。使用量は、コンテナをデカップリングホスト構成を実行することができます。
  • あなたは、リモートホストまたはクラウドにデータを保存したいときに。
  • バックアップ/別のホストにデータを移行/復元を指示したい場合は、ボリュームは良い選択です。あなたはこのように/ var / libに/ドッキングウィンドウ/ボリューム/ <ボリューム名>として、配置されているバックアップディレクトリに直接、その後、ボリュームと血管の実行を停止、ボリュームとすることができます

アプリケーションシナリオのバインドマウント

  • DNSドッカーコンテナを提供するように構成されたデフォルトである容器に共有ホストシステム・コンフィギュレーション・ファイルは、即ち、ホスト/etc/resolv.confファイルを介してバインドマウントは、容器に取り付けられています。
  • 共有コンテナの開発環境でのソースまたはホストの結果。たとえば:あなたはホスト上のMavenプロジェクトのテストを行うと、Mavenプロジェクトあなたがホスト上で変更を加えるたびに、コンテナは変更の直接の結果を得ることができ
  • あなたはホストファイルシステムの構造を決定することができたとき、容器の内部と完全に一致している必要があります。

tmpfsの該当シーン

  • 安全上の理由から、またはコンテナのパフォーマンス最適化の理由のためにあなたを(データの状態が非永久多数のように記述される)と、コンテナはこのよう長期保存に使用できるデータを必要としません。

小さなヒントのバインドマウントとボリュームを使用します

  • あなたは、コンテナ内の非空のディレクトリに空のボリュームをマウントするボリュームの方法を使用する場合は、すでに内容に存在する非空のディレクトリがボリュームにコピーされます。同様に、あなたは、コンテナの開始時に存在していないボリュームを指定した場合、空のボリュームが自動的に作成されます。
  • バインドマウントは、方法、又は非空のディレクトリコンテナに非空のボリュームのボリュームをマウントする方法を実装した場合、空でないディレクトリへの容器の内容物は、一時の体積上に搭載しましたコンテンツカバー(削除されていない)、ときアンマウント、ディレクトリ内のファイルがまだ存在して空ではありませんコンテナ。ただ、取り付けられたUSBがキャンセルされた場合は/ mntでUSBマウント/ mntには、唯一のオリジナル文書でUSBが、見えないの内容が表示されますときに、いくつかのファイルがある場合はLinuxで/ mntディレクトリのように再入力/後に元のファイルを見ることができmntに。

-vまたは--mountを使用することを選択してください

 
最初は、-v --volumeまたは使用別々の容器、 - 群れのサービスのためにマウントします。しかし、初め17.06ドッカーから、また--mount別々の容器に使用することができます。-mountコマンドより正確な詳細。-vオプションがマージされます。--mount使用してください。
 
あなたがボリュームのドライブオプションを開発する必要がある場合は、--mount使用する必要があります。
  • または--volumeを-v:使用して合成パラメータによって3部、「:」を間隔。順序を逆にすることはできません。
    • 最初の部分は、ボリュームの名前であるホスト上で一意です。匿名ボリューム名は、システムを与えられました。
    • 第2の部分は、ファイルまたはフォルダパスの容器に取り付けられています。
    • 第三の部分は、「または」は、これらのオプションは、後述するように、オプションのリストセパレータです。
  •     -mount:キーと値のペアを複数、<キー> = <値>。--volumeコマンド-v以上より-mountが、理解しやすいです。
    • タイプは、バインド、ボリュームやtmpfsはすることができます。この記事では、ボリュームに焦点を当て、そのタイプは、ボリューム使用されています。
    • ソース、ボリューム名、匿名のボリュームを省略することができます。ソースSRCと略記することがあります。
    • 目的地、コンテナをマウントするファイルまたはディレクトリのパス。あるいはまた、DSTの対象と略称を使用することができます。
    • 読み取り専用容器に取り付けられた読み取り専用、指定。
    • ボリューム-OPT、オプションの属性を繰り返し使用することができます。

-vと--mountの異なる振る舞い

すべての-mountと-vオプションが用意されていため、バインドは、異なるマウント。
サービスのボリュームを使用する場合は、唯一の--mountサポートしています。
 

ボリュームの作成および管理

バインドマウントとは異なり、容器の外にボリュームを作成して管理することができます。
 
ボリュームを作成します。
$]ドッキングウィンドウのボリュームは、私の-VOLを作成します
 
すべてのボリュームを表示します
$]ドッキングウィンドウのボリュームLS
ローカル私の-VOL
 
ビューボリューム
$]ドッキングウィンドウのボリュームは、私の-VOLを検査します
[
{
「ドライバ」:「ローカル」、
        "ラベル":{}、
        "マウントポイント": "は/ var / libに/ドッキングウィンドウ/ボリューム/私の-容量/ _data"、
        「名前」:「私の-巻」、
        "オプション":{}、
        「スコープ」:「ローカル」
}
]
 
ボリュームを削除するには:
私-VOL RM $]ドッキングウィンドウの音量
 
容器の容積で開始
あなたが容器の容積で開始した場合は、ボリュームが作成されていない、ドッカーが作成されます。次の例では、コンテナ/アプリ/下にmyvol2マウント。
-V -mount以下の実施例および結果は同じです。
 
- マウント:
$]ドッキングウィンドウの実行-d \
--name devtest \
--mountソース= myvol2、ターゲット= /アプリ\
  nginxの:最新
 
-v:
$]ドッキングウィンドウの実行-d \
--name devtest \
-v myvol2:/アプリ\
  nginxの:最新
マウントパーツを表示正しく装着見に点検し使用します。
"マウント":[
{
「タイプ」:「ボリューム」、
"名前": "myvol2"、
"ソース": "は/ var / libに/ドッキングウィンドウ/ボリューム/ myvol2 / _data"、
"宛先": "/アプリ"、
「ドライバ」:「ローカル」、
"モード": ""、
"RW":真、
「伝播」:「」
}
]、
それは、正しく取り付けられて見ることができ、読み書きできます。
 
コンテナを停止してからボリュームを削除
$ドッキングウィンドウコンテナ停止devtest
$ドッキングウィンドウコンテナのrm devtest
$ドッキングウィンドウボリュームのrm myvol2
ボリュームでサービスを開始
あなたは、ボリュームのサービス定義を開始すると、各サービスは、ローカルボリュームを使用する場合は、コンテナがデータを共有することはできません。自分の本来のボリュームを使用することができますが、いくつかのドライバは、共有ストレージ・ボリュームをサポートしています。アズールCloudstorプラグインのAWSとドッカーためドッカーは、永続的なストレージの使用をサポートします。
以下の例は、ローカルストレージmyvol2を使用してnginxの4部、それぞれを開始するのに役立ちます。
$]ドッキングウィンドウサービス\ -dを作成します
--replicas = 4 \
--name devtestサービス\
--mountソース= myvol2、ターゲット= /アプリ\
  nginxの:最新
 
実行されているサービスを表示するには、ドッキングウィンドウのサービスのPS devtestサービスを使用します。
$ドッカサービスのPS devtestサービス
ID NAMEイメージNODE望ましい状態CURRENT STATEエラーPORTS
4d7oz1j85wwn devtest-service.1のnginxの:14秒前に実行して実行して、最新のモービー  
サービスを削除します。
$ドッカサービスのRM devtestサービス
 
異なるサービスの同定
ドッキングウィンドウのサービスは、コマンドは-vまたは-volumeをサポートしていません作成します。あなたは-mount使用する必要があります。
コンテナ積載量を使用して
 
あなたは、新しいボリュームを作成するためのコンテナを起動コンテナ内のディレクトリ(/アプリ/)マウントされている場合は上記のように、ファイルやフォルダが存在し、このディレクトリの内容は、ボリュームにコピーされます。その後、別の容器を使用して、このボリュームもプリロードされたコンテンツにアクセスすることができ、コンテナの使用ボリュームをマウントします。
これを説明するために、例えば、nginxのは、コンテナを起動し、nginxのデフォルトのHTMLコンテンツを格納されたコンテンツコンテナを/ usr / share / nginxの/ htmlディレクトリを含む新しいボリュームnginxの-VOLを、ロード。
--mountと同じ結果を-v
- マウント:
$]ドッキングウィンドウの実行-d \
--name = nginxtest \
--mountソース= nginxの-VOL、宛先=を/ usr / share / nginxの/ HTML \
  nginxの:最新
 
-v
$]ドッキングウィンドウの実行-d \
--name = nginxtest \
-v nginxの-VOL:を/ usr / share / nginxの/ htmlの\
  nginxの:最新
 
次のコマンドを実行した後にクリーンアップされています
$ドッキングウィンドウコンテナ停止nginxtest
$ドッキングウィンドウコンテナのrm nginxtest
$ドッキングウィンドウのボリュームのrmのnginx-巻
読み取り専用ボリューム
 
ドッカーは、開発アプリケーションの数、コンテナバックのホストにデータを書き込む必要があります。しかし、時にはコンテナはデータのみを読み取る必要があります。同じコンテナボリュームを複数搭載することができることを覚えておいて、リーダ搭載容器は、読み取り専用コンテナも同様の両方を実装してもよいマウントであってもよいです。
この例の変形例以上、それは読み取り専用で、コンテナをロード「や」オプションの区切り文字リスト、
--mountと同じ結果を-v
- マウント
$]ドッキングウィンドウの実行-d \
--name = nginxtest \
--mountソース= nginxの-VOL、宛先=を/ usr / share / nginxの/ HTML、読み取り専用\
  nginxの:最新
 
-v
$]ドッキングウィンドウの実行-d \
--name = nginxtest \
-v nginxの-VOL:を/ usr / share / nginxの/ HTML:\ RO
  nginxの:最新
 
正しいビューが部品をマウントするかどうかをチェックするためのコマンドをマウントnginxtestドッキングウィンドウを検査使用
"マウント":[
{
「タイプ」:「ボリューム」、
"名前": "nginxの-巻"、
"ソース": "は/ var / libに/ドッキングウィンドウ/ボリューム/ nginxの-容量/ _data"、
"宛先": "を/ usr / share / nginxの/ htmlの"、
「ドライバ」:「ローカル」、
"モード": ""、
"RW":偽、
「伝播」:「」
}
]、
 
クリーンアップコマンド
$ドッキングウィンドウコンテナ停止nginxtest
$ドッキングウィンドウコンテナのrm nginxtest
$ドッキングウィンドウのボリュームのrmのnginx-巻
 
マシン間でデータを共有
可用性の高いアプリケーションを構築するときは、同じファイルに同じアクセスに複数のサービスを設定する必要があります。
 

 

この効果を達成するには、いくつかの方法があります。一つは、アプリケーションでそのようなAmazon S3のようなクラウド・ストレージ・ファイルへのアクセスを追加することです。もう一つは、サポートサービス、外側ボリュームストレージドライブ(NFS、アマゾンS3)Aを使用することです。
ドライブ内のボリュームを使用すると、アプリケーションシステムの抽象基礎となるを保存することができます。あなたのサービスは、NFSドライブボリュームを使用する場合たとえば、あなたは、クラウドに保存されたデータとして、アプリケーションロジックを変更する必要が別のドライバの更新サービスを使用することはできません。
ボリュームのドライブを使用します
当你使用docker volume create创建一个volume,或者当你启动一个带有没创建volume的容器,你可以指定volume驱动。下面例子使用vieux/sshfs volume驱动 ,首先创建一个独立的volume,然后启动一个创建新volume的容器。
 
初始化设置
这个例子假设你有两个节点,第一个是Docker主机而且可以连接到第二个的ssh.
在Docker主机中安装vieux/sshfs插件:
$ docker plugin install --grant-all-permissions vieux/sshfs
 
使用volume驱动创建volume
这个样例指定一个SSH密码,但是如果两个主机共享keys配置,你可以省略密码。每个volume驱动可以没有或者更多配置选项,可以使用-o标识。
$ docker volume create --driver vieux/sshfs \
-o sshcmd=test@node2:/home/test \
-o password=testpassword \
  sshvolume
 
test@node2:/home/test 为远程主机挂载点
 
启动一个带有使用volume驱动创建volume的容器
这个样例指定一个SSH密码,但是如果两个主机共享keys配置,你可以省略密码。每个volume驱动可以没有或者更多配置选项。如果volume驱动要穿可选参数,你必须使用—mount。
$ docker run -d \
--name sshfs-container \
--volume-driver vieux/sshfs \
--mount src=sshvolume,target=/app,volume-opt=sshcmd=test@node2:/home/test,volume-opt=password=testpassword \
  nginx:latest

おすすめ

転載: www.cnblogs.com/ExMan/p/11613073.html