Docker ボリューム・プラグインを書く¶
Docker ボリューム・プラグインとは、Amazon EBS のような外部のストレージ・システムと統合した環境に Docker をデプロイできるようにします。そして、単一の Docker ホスト上で、データ・ボリュームを使う間はその一貫性をもたらします。詳しい情報は プラグインのドキュメント をご覧ください。
コマンドラインの変更¶
ボリューム・プラグインを使うには docker run
コマンドで -v
と --volume-driver
フラグを指定します。 -v
フラグはボリューム名を受け付け、 --volume-driver
フラグはドライバの種類を指定します。例えば、次のように実行します。
$ docker run -ti -v volumename:/data --volume-driver=flocker busybox sh
このコマンドは、ユーザがボリュームで使う名前を volumename
としてボリューム・プラグインに渡しています。 volumename
は /
で始まってはいけません。
ユーザが volumename
を指定したら、プラグインは1つのコンテナが稼働し続ける間、あるいはコンテナのホスト上における外部ボリュームをプラグインに関連づけます。これを使えば、例えばステートフルなコンテナを、あるサーバから別のサーバに移せます。
volumename
と volumedriver
を同時に使うよう指定したら、ユーザは Flocker のような外部プラグインで単一ホスト上のボリュームや EBS のようなボリュームを管理します。
ボリューム・ドライバの作成¶
コンテナが作成用エンドポイント( /containers/create
) の volumeDriver
フィールドにおいて、 string
タイプでドライバ名を指定します。デフォルトの値は "local"
です(デフォルトのドライバは、local ボリュームです)。
ボリューム・プラグイン・プロトコル¶
プラグインは自身を VolumeDriver
として登録した時に有効化されます。その後、Docker デーモンがファイルシステム上に、コンテナが使うための書き込み可能なパスを提供します。
Docker デーモンはユーザのコンテナが指定したパスに対し、マウントの拘束(バインド)を扱います。
/VolumeDriver.Create¶
リクエスト :
{
"Name": "volume_name",
"Opts": {}
}
プラグインはユーザが作成を望むボリュームを、ユーザが指定した名前で作成するよう命令します。プラグインは実際にファイルシステムのボリュームを明示する必要がありません(マウントがコールされるまで)。Opts はドライバ固有のオプションをユーザがリクエストする箇所です。
応答 :
{
"Err": null
}
エラーが発生した場合は、エラー文字列が表示されます。
/VolumeDriver.Remove¶
リクエスト :
{
"Name": "volume_name"
}
ディスクから特定のボリュームを削除します。このリクエストはユーザから docker rm -v
を呼び出されたとき、コンテナに関連するボリュームを削除します。
応答 :
- {
- “Err”: null
}
エラーが発生した場合は、エラー文字列が表示されます。
/VolumeDriver.Mount¶
リクエスト :
{
"Name": "volume_name"
}
Docker でプラグインがボリュームを必要とする場合は、ユーザがボリューム名を指定する必要があります。これは、コンテナが開始される度に必要です。既に作成されているボリューム名で呼び出されると、プラグインは既にマウントされている箇所に対して、新しいマウント・リクエストとプロビジョンが行われると、アンマウント・リクエストが呼び出され、プロビジョニングが取り消されるまで追跡します。
応答 :
{
"Mountpoint": "/path/to/directory/on/host",
"Err": null
}
ボリュームが利用可能になったり、あるいはエラーが発生したりする場合には、ホスト・ファイルシステム上のパスを返します。
/VolumeDriver.Path¶
リクエスト :
{
"Name": "volume_name"
}
Docker はホスト上のボリュームのパスを覚えておく必要があります。
応答 :
{
"Mountpoint": "/path/to/directory/on/host",
"Err": null
}
ボリュームが利用可能になったり、あるいはエラーが発生したりする場合には、ホスト・ファイルシステム上のパスを返します。
リクエスト :
{
"Name": "volume_name"
}
Docker ホストに指定した名前のボリュームを使わないことを指示します。これはコンテナが停止すると呼び出されます。その時点でプラグインはデプロビジョンが安全に行われているとみなします。
レスポンス
{
"Err": null
}
エラーが発生したら、エラー文字列を返します。
参考
- Write a volume plugin
- https://docs.docker.com/engine/extend/plugins_volume/