Расширение

Образ для расширения Docker должен включать файл metadata.json в корне своей файловой системы. В нем описывается содержимое расширения, которое необходимо установить, чтобы оно заработало в Docker Desktop.

Поскольку каждая часть является необязательной, расширение содержит:

  • Часть пользовательского интерфейса, которая добавляет вкладку на панель мониторинга в Docker Desktop.

  • Служба виртуальной машины, которая выполняется на виртуальной машине рабочего стола как один или несколько контейнеров Docker. Данные контейнеры могут запрашивать доступ к определенным ресурсам на виртуальной машине, например, подключая папки в файле compose.

  • Список двоичных файлов, которые необходимо установить на хост.

раздел пользовательского интерфейса

Часть пользовательского интерфейса расширения может взаимодействовать во время выполнения со службой виртуальной машины расширения или вызывать двоичные файлы расширения, развернутые на узле, через API расширения, определённый далее.

Формат файла metadata.json должен быть следующим:

{
    "icon": "extension-icon.svg",
    "ui": ...
    "vm": ...
    "host": ...
}

Разделы ui, vm и host являются необязательными и зависят от того, что предоставляет данное расширение. Они описывают содержимое расширения, которое необходимо установить.

Раздел ui определяет новую вкладку, которая добавляется на панель мониторинга в Docker Desktop. Он следует форме:

"ui":{
    "dashboard-tab":
    {
        "title":"MyTitle",
        "root":"/ui",
        "src":"index.html"
    }
}

root указывает папку, в которой находится код пользовательского интерфейса в файловой системе образа. src указывает точку входа, которую следует загружает на вкладке расширения.

Другие точки расширения пользовательского интерфейса будут доступны в будущем.

Раздел ВМ

Базовая серверная служба расширений

Раздел vm определяет серверную службу, которая работает внутри виртуальной машины рабочего стола. Он должен определять значение image или composefile, указывающее, какую службу запускать на виртуальной машине рабочего стола.

В простых случаях вы можете указывает image и определить образ Docker, который будет выполняться для вашего бэкенда.

Вы можете использовать composefile, если вам нужны более конкретные параметры, такие как монтирование томов или запрос ВОЗМОЖНОСТЕЙ, которые не могут быть выражены только с помощью образа Docker. Вы также можете использовать файл compose для использования нескольких серверных служб.

Во многих случаях серверные службы расширений можно определить с помощью того же образа, который используется для упаковки расширения. Затем данный образ должен иметь определённый CMD для запуска серверной службы в дополнение к строкам COPY для упаковки расширения.

Если вы используете один и тот же образ для упаковки расширения и для серверной службы, вы упрощаете упаковку/релиз с точки зрения терминов или управления версиями или, например, отправки образов расширений в Docker Hub.

"vm": {
    "image":"${DESKTOP_PLUGIN_IMAGE}"
},

Раздел метаданных vm должен определять либо image, либо composefile. При использовании image для расширения создаётся файл compose по умолчанию.

Примечание

${DESKTOP_PLUGIN_IMAGE} — это специальное ключевой аргумент, которое позволяет легко ссылаться на образ, упаковывающее расширение. Также здесь можно указывает любое другое полное имя образа. Однако во многих случаях использование одного и того же образа упрощает разработку расширений.

Определяет свой собственный файл compose для серверной части расширения.

Для более продвинутых вариантов использования расширение также может:

  • Указывает пользовательский файл compose.

  • Запуск нескольких контейнеров для службы расширения ВМ.

  • Смонтируйте тома в виртуальной машине.

  • Требуют конкретных ВОЗМОЖНОСТЕЙ.

"vm": {
    "composefile":"docker-compose.yaml"
},

Composefile, например, с определением тома, будет выглядеть так:

services:
  myExtension:
    image: ${DESKTOP_PLUGIN_IMAGE}
    volumes:
      - /host/path:/container/path

Используйте сокет Docker из вашего бэкэнда расширения

Расширения Docker могут вызывать команды Docker непосредственно из внешнего интерфейса с помощью SDK. В некоторых случаях полезно также взаимодействовать с движком Docker из бэкенда. Контейнеры серверной части расширения могут монтировать сокет Docker и использовать его для взаимодействия с механизмом Docker из логики серверной части расширения. (Подробнее о Сокет двигателя Docker)

Однако при монтировании сокета Docker из контейнера расширения, который находится на виртуальной машине Desktop, вы хотите монтировать сокет Docker изнутри виртуальной машины, а не монтировать /var/run/docker.sock из файловой системы хоста (использование сокета Docker с хоста может привести к проблемы с разрешениями в контейнерах). Для этого вы можете использовать /var/run/docker.sock.raw. Docker Desktop монтирует сокет, который находится на виртуальной машине рабочего стола, а не на узле.

services:
  myExtension:
    image: ${DESKTOP_PLUGIN_IMAGE}
    volumes:
      - /var/run/docker.sock.raw:/var/run/docker.sock

Хост раздел

Раздел host определяет несколько двоичных файлов, которые необходимо развернуть на хосте. Пользовательский интерфейс может вызывать данные двоичные файлы через API JavaScript. См. вызов двоичного файла расширения на хосте.

"host": {
  "binaries": [
    {
      "darwin": [
        {
          "path": "/darwin/myBinary"
        },
      ],
      "windows": [
        {
          "path": "/windows/myBinary.exe"
        },
      ],
      "linux": [
        {
          "path": "/linux/myBinary"
        },
      ]
    }
  ]
}

binaries определяет список двоичных файлов, которые необходимо копирует из образа расширения на хост.

path указывает двоичный путь в файловой системе образа. Docker Desktop отвечает за копирование данных файлов в свое собственное местоположение, а JavaScript API позволяет вызывать данные двоичные файлы.

Узнайте, как вызывать двоичные файлы хоста.