|
@@ -0,0 +1,222 @@
|
|
|
+<!--[metadata]>
|
|
|
++++
|
|
|
+aliases = [
|
|
|
+"/engine/extend/"
|
|
|
+]
|
|
|
+title = "Plugin manifest"
|
|
|
+description = "How develop and use a plugin with the managed plugin system"
|
|
|
+keywords = ["API, Usage, plugins, documentation, developer"]
|
|
|
+advisory = "experimental"
|
|
|
+[menu.main]
|
|
|
+parent = "engine_extend"
|
|
|
+weight=1
|
|
|
++++
|
|
|
+<![end-metadata]-->
|
|
|
+
|
|
|
+# Plugin Manifest Version 0 of Plugin V2
|
|
|
+
|
|
|
+This document outlines the format of the V0 plugin manifest. The plugin
|
|
|
+manifest described herein was introduced in the Docker daemon (experimental version) in the [v1.12.0
|
|
|
+release](https://github.com/docker/docker/commit/f37117045c5398fd3dca8016ea8ca0cb47e7312b).
|
|
|
+
|
|
|
+Plugin manifests describe the various constituents of a docker plugin. Plugin
|
|
|
+manifests can be serialized to JSON format with the following media types:
|
|
|
+
|
|
|
+Manifest Type | Media Type
|
|
|
+------------- | -------------
|
|
|
+manifest | "application/vnd.docker.plugin.v0+json"
|
|
|
+
|
|
|
+
|
|
|
+## *Manifest* Field Descriptions
|
|
|
+
|
|
|
+Manifest provides the base accessible fields for working with V0 plugin format
|
|
|
+ in the registry.
|
|
|
+
|
|
|
+- **`manifestVersion`** *string*
|
|
|
+
|
|
|
+ version of the plugin manifest (This version uses V0)
|
|
|
+
|
|
|
+- **`description`** *string*
|
|
|
+
|
|
|
+ description of the plugin
|
|
|
+
|
|
|
+- **`documentation`** *string*
|
|
|
+
|
|
|
+ link to the documentation about the plugin
|
|
|
+
|
|
|
+- **`interface`** *PluginInterface*
|
|
|
+
|
|
|
+ interface implemented by the plugins, struct consisting of the following fields
|
|
|
+
|
|
|
+ - **`types`** *string array*
|
|
|
+
|
|
|
+ types indicate what interface(s) the plugin currently implements.
|
|
|
+
|
|
|
+ currently supported:
|
|
|
+
|
|
|
+ - **docker.volumedriver/1.0**
|
|
|
+
|
|
|
+ - **`socket`** *string*
|
|
|
+
|
|
|
+ socket is the name of the socket the engine should use to communicate with the plugins.
|
|
|
+ the socket will be created in `/run/docker/plugins`.
|
|
|
+
|
|
|
+
|
|
|
+- **`entrypoint`** *string array*
|
|
|
+
|
|
|
+ entrypoint of the plugin, see [`ENTRYPOINT`](../reference/builder.md#entrypoint)
|
|
|
+
|
|
|
+- **`workdir`** *string*
|
|
|
+
|
|
|
+ workdir of the plugin, see [`WORKDIR`](../reference/builder.md#workdir)
|
|
|
+
|
|
|
+- **`network`** *PluginNetwork*
|
|
|
+
|
|
|
+ network of the plugin, struct consisting of the following fields
|
|
|
+
|
|
|
+ - **`type`** *string*
|
|
|
+
|
|
|
+ network type.
|
|
|
+
|
|
|
+ currently supported:
|
|
|
+
|
|
|
+ - **bridge**
|
|
|
+ - **host**
|
|
|
+ - **none**
|
|
|
+
|
|
|
+- **`capabilities`** *array*
|
|
|
+
|
|
|
+ capabilities of the plugin (*Linux only*), see list [`here`](https://github.com/opencontainers/runc/blob/master/libcontainer/SPEC.md#security)
|
|
|
+
|
|
|
+- **`mounts`** *PluginMount array*
|
|
|
+
|
|
|
+ mount of the plugin, struct consisting of the following fields, see [`MOUNTS`](https://github.com/opencontainers/runtime-spec/blob/master/config.md#mounts)
|
|
|
+
|
|
|
+ - **`name`** *string*
|
|
|
+
|
|
|
+ name of the mount.
|
|
|
+
|
|
|
+ - **`description`** *string*
|
|
|
+
|
|
|
+ description of the mount.
|
|
|
+
|
|
|
+ - **`source`** *string*
|
|
|
+
|
|
|
+ source of the mount.
|
|
|
+
|
|
|
+ - **`destination`** *string*
|
|
|
+
|
|
|
+ destination of the mount.
|
|
|
+
|
|
|
+ - **`type`** *string*
|
|
|
+
|
|
|
+ mount type.
|
|
|
+
|
|
|
+ - **`options`** *string array*
|
|
|
+
|
|
|
+ options of the mount.
|
|
|
+
|
|
|
+- **`devices`** *PluginDevice array*
|
|
|
+
|
|
|
+ device of the plugin, (*Linux only*), struct consisting of the following fields, see [`DEVICES`](https://github.com/opencontainers/runtime-spec/blob/master/config-linux.md#devices)
|
|
|
+
|
|
|
+ - **`name`** *string*
|
|
|
+
|
|
|
+ name of the device.
|
|
|
+
|
|
|
+ - **`description`** *string*
|
|
|
+
|
|
|
+ description of the device.
|
|
|
+
|
|
|
+ - **`path`** *string*
|
|
|
+
|
|
|
+ path of the device.
|
|
|
+
|
|
|
+- **`env`** *PluginEnv array*
|
|
|
+
|
|
|
+ env of the plugin, struct consisting of the following fields
|
|
|
+
|
|
|
+ - **`name`** *string*
|
|
|
+
|
|
|
+ name of the env.
|
|
|
+
|
|
|
+ - **`description`** *string*
|
|
|
+
|
|
|
+ description of the env.
|
|
|
+
|
|
|
+ - **`value`** *string*
|
|
|
+
|
|
|
+ value of the env.
|
|
|
+
|
|
|
+- **`args`** *PluginArgs*
|
|
|
+
|
|
|
+ args of the plugin, struct consisting of the following fields
|
|
|
+
|
|
|
+ - **`name`** *string*
|
|
|
+
|
|
|
+ name of the env.
|
|
|
+
|
|
|
+ - **`description`** *string*
|
|
|
+
|
|
|
+ description of the env.
|
|
|
+
|
|
|
+ - **`value`** *string array*
|
|
|
+
|
|
|
+ values of the args.
|
|
|
+
|
|
|
+
|
|
|
+## Example Manifest
|
|
|
+
|
|
|
+*Example showing the 'tiborvass/no-remove' plugin manifest.*
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "manifestVersion": "v0",
|
|
|
+ "description": "A test plugin for Docker",
|
|
|
+ "documentation": "https://docs.docker.com/engine/extend/plugins/",
|
|
|
+ "entrypoint": ["plugin-no-remove", "/data"],
|
|
|
+ "interface" : {
|
|
|
+ "types": ["docker.volumedriver/1.0"],
|
|
|
+ "socket": "plugins.sock"
|
|
|
+ },
|
|
|
+ "network": {
|
|
|
+ "type": "host"
|
|
|
+ },
|
|
|
+
|
|
|
+ "mounts": [
|
|
|
+ {
|
|
|
+ "source": "/data",
|
|
|
+ "destination": "/data",
|
|
|
+ "type": "bind",
|
|
|
+ "options": ["shared", "rbind"]
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "destination": "/foobar",
|
|
|
+ "type": "tmpfs"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+
|
|
|
+ "args": {
|
|
|
+ "name": "args",
|
|
|
+ "description": "command line arguments",
|
|
|
+ "value": []
|
|
|
+ },
|
|
|
+
|
|
|
+ "env": [
|
|
|
+ {
|
|
|
+ "name": "DEBUG",
|
|
|
+ "description": "If set, prints debug messages",
|
|
|
+ "value": "1"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+
|
|
|
+ "devices": [
|
|
|
+ {
|
|
|
+ "name": "device",
|
|
|
+ "description": "a host device to mount",
|
|
|
+ "path": "/dev/cpu_dma_latency"
|
|
|
+ }
|
|
|
+ ]
|
|
|
+}
|
|
|
+
|
|
|
+```
|