叫用主機二進位檔
在某些情況下,您的擴充功能可能需要從主機呼叫某些指令。例如,您可能想要呼叫雲端供應商的 CLI 來建立新資源、呼叫擴充功能所提供的工具之 CLI,或是執行您想在主機上執行的 Shell 指令碼。
您可以使用擴充功能 SDK 從容器中執行 CLI 來達成目的。但此 CLI 需要存取主機的檔案系統,若在容器中執行,過程既不輕鬆也不快速。
然而,主機二進位檔案是從擴充功能中呼叫的(作為二進位檔案、Shell 指令碼),這些檔案隨您的擴充功能一同發布並部署到主機上。由於擴充功能可以在多個平台上執行,這意味著您需要為所有想要支援的平台發布對應的可執行檔。
了解更多關於擴充功能 架構 的資訊。
注意只有作為擴充功能一部分發布的可執行檔,才能使用 SDK 進行呼叫。
在此範例中,CLI 是一個簡單的 Hello world 指令碼,它必須透過參數呼叫並回傳一個字串。
將可執行檔加入擴充功能 (extension)
在 binaries/unix/hello.sh 檔案中為 macOS 和 Linux 建立一個 bash 指令碼,內容如下:
#!/bin/sh
echo "Hello, $1!"在另一個檔案 binaries/windows/hello.cmd 中為 Windows 建立一個 batch script,內容如下:
@echo off
echo "Hello, %1!"接著更新 Dockerfile,將 binaries 資料夾複製到擴充功能的容器檔案系統中,並讓這些檔案具備可執行權限。
# Copy the binaries into the right folder
COPY --chmod=0755 binaries/windows/hello.cmd /windows/hello.cmd
COPY --chmod=0755 binaries/unix/hello.sh /linux/hello.sh
COPY --chmod=0755 binaries/unix/hello.sh /darwin/hello.sh從 UI 呼叫可執行檔
在您的擴充功能中,使用 Docker Desktop Client 物件,透過 ddClient.extension.host.cli.exec() 函式來 呼叫擴充功能所提供的 Shell 指令碼。在本範例中,當擴充功能檢視渲染時,該二進位檔案會透過 result?.stdout 取得並回傳一個字串作為結果。
export function App() {
const ddClient = createDockerDesktopClient();
const [hello, setHello] = useState("");
useEffect(() => {
const run = async () => {
let binary = "hello.sh";
if (ddClient.host.platform === 'win32') {
binary = "hello.cmd";
}
const result = await ddClient.extension.host?.cli.exec(binary, ["world"]);
setHello(result?.stdout);
};
run();
}, [ddClient]);
return (
<div>
{hello}
</div>
);
}重要我們還沒有 Vue 的範例。 填寫表格,讓我們知道您是否需要 Vue 的範例。
重要我們還沒有 Angular 的範例。 填寫表格,讓我們知道您是否需要 Angular 的範例。
重要我們還沒有 Svelte 的範例。 填寫表格,讓我們知道您是否需要 Svelte 的範例。
設定中繼資料檔案
主機二進位檔案必須在 metadata.json 檔案中指定,以便 Docker Desktop 在安裝擴充功能時將它們複製到主機上。一旦解除安裝擴充功能,這些已複製的二進位檔案也會隨之移除。
{
"vm": {
...
},
"ui": {
...
},
"host": {
"binaries": [
{
"darwin": [
{
"path": "/darwin/hello.sh"
}
],
"linux": [
{
"path": "/linux/hello.sh"
}
],
"windows": [
{
"path": "/windows/hello.cmd"
}
]
}
]
}
}path 必須參照容器內二進位檔案的路徑。