The metadata.json file#
The metadata.json
file is the entry point for your extension. It contains the metadata for your extension, such as the
name, version, and description. It also contains the information needed to build and run your extension. The image for
a Docker extension must include a metadata.json
file at the root of its filesystem.
The format of the metadata.json
file must be:
{
"icon": "extension-icon.svg",
"ui": ...
"vm": ...
"host": ...
}
The ui
, vm
, and host
sections are optional and depend on what a given extension provides. They describe the extension content to be installed.
UI section#
The ui
section defines a new tab that's added to the dashboard in Docker Desktop. It follows the form:
"ui":{
"dashboard-tab":
{
"title":"MyTitle",
"root":"/ui",
"src":"index.html"
}
}
root
specifies the folder where the UI code is within the extension image filesystem.
src
specifies the entrypoint that should be loaded in the extension tab.
Other UI extension points will be available in the future.
VM section#
The vm
section defines a backend service that runs inside the Desktop VM. It must define either an image
or a
docker-compose.yaml
file that specifies what service to run in the Desktop VM.
"vm": {
"image":"${DESKTOP_PLUGIN_IMAGE}"
},
When you use image
, a default compose file is generated for the extension.
${DESKTOP_PLUGIN_IMAGE}
is a specific keyword that allows an easy way to refer to the image packaging the extension. It is also possible to specify any other full image name here. However, in many cases using the same image makes things easier for extension development.
"vm": {
"composefile": "docker-compose.yaml"
},
The Compose file, with a volume definition for example, would look like:
services:
myExtension:
image: ${DESKTOP_PLUGIN_IMAGE}
volumes:
- /host/path:/container/path
Host section#
The host
section defines executables that Docker Desktop copies on the host.
"host": {
"binaries": [
{
"darwin": [
{
"path": "/darwin/myBinary"
},
],
"windows": [
{
"path": "/windows/myBinary.exe"
},
],
"linux": [
{
"path": "/linux/myBinary"
},
]
}
]
}
binaries
defines a list of binaries Docker Desktop copies from the extension image to the host.
path
specifies the binary path in the image filesystem. Docker Desktop is responsible for copying these files in its own location, and the JavaScript API allows invokes these binaries.
Learn how to invoke executables.