在 Container Station 3 中如何設定及部署自訂應用程式範本?


最後修訂日期: 2023-03-27

Container Station 應用程式範本可讓您將預先設定的容器部署到 QNAP 環境中。依預設,Container Station 提供一組 QNAP 驗證版本,但您可以根據自己的特定需求,新增其他自訂應用程式範本。您可以直接在 QNAP 裝置上或在外部網站伺服器上託管這些自訂應用程式範本。

本篇教學文章說明在 QNAP 裝置上託管自訂應用程式範本的兩種方式,以及如何設定 Container Station 存取這些自訂應用程式範本。

建立自訂應用程式範本檔案

第一步是建立自訂應用程式範本檔案。依預設,Container Station 提供了一份經過驗證的容器清單,這些容器搭配 QNAP 裝置正常運作。您可以在這裡下載 QNAP 驗證範本來修改,也可以自行建立新檔案。

注意:

您可以使用文字編輯器來修改範本檔案。

應用程式範本格式

應用程式範本定義是使用 JSON 編寫。有效的範本由一個陣列,以及一或多個容器範本元素所組成。每個容器範本元素都是一個 JSON 物件,其中包括任何必要或選用的資料欄位。格式應類似以下示例:

{
  “templates”: [
    {
      // template1
    },
    {
      // template2
    },
    ...
  ]
}

JSON 元素格式

type

屬性

描述

描述

此範本的容器 (Docker 或 LXD) 類型。

重要性

必要

格式

整數

接受的值

  • 1:用於 Docker 容器。

  • 10:用於 LXD 容器。

title

屬性

描述

描述

範本的標題。

重要性

必要

格式

字串

接受的值

任何字串值

sub_title

屬性

描述

描述

範本版本的相關資訊。

重要性

必要

格式

字串

接受的值

任何字串值

description

屬性

描述

描述

用於提供版本相關資訊的描述。

重要性

必要

格式

字串

接受的值

任何字串值

logo

屬性

描述

描述

範本的標誌位置。

重要性

非必要

格式

字串

接受的值

網路網域的任何有效 URL 或相對路徑,用於託管自訂應用程式範本。

location

屬性

描述

描述

範本 URL。可為範本的簡介網頁。

重要性

非必要

格式

字串

接受的值

任何有效的 URL

platform

屬性

描述

描述

支援的平台。必須包含有效值。

重要性

必要

格式

字串

接受的值

  • linux:所有平台

  • linux/amd64:64 位元 x86

  • linux/arm64:64 位元 ARM

  • linux/arm:32 位元 ARM

範例

{
  "platform": "linux/amd64"
}

image

屬性

描述

描述

與範本相關聯的映像檔。

重要性

必要

格式

字串

接受的值

任何有效的映像檔

範例

{
  "image": "nginx:latest"
}

command

屬性

描述

描述

在 Docker 容器中執行的命令。如果未指定,容器會使用 Dockerfile 中指定的預設命令。

重要性

非必要

格式

字串

接受的值

任何字串值

範例

{
  "command": "nginx -g 'daemon off;'"
}

entrypoint

屬性

描述

描述

啟動 Docker 容器的端點。如果未指定,容器會使用 Dockerfile 中指定的預設端點。

重要性

非必要

格式

字串

接受的值

任何字串值

範例

{
  "entrypoint": "/docker-entrypoint.sh"
}

env

屬性

描述

描述

描述範本所需環境變數的 JSON 陣列。陣列中的每個元素都必須是有效的 JSON 物件。

重要性

非必要

格式

陣列

接受的值

有效的 JSON 陣列

陣列格式

  • name:(必要) 容器映像檔中支援的環境變數名稱。

  • value:(必要) 關聯至變數的值。

範例

{
  "env": [
    { "name": "ENV_VAR1", "value": "" },
    { "name": "ENV_VAR2", "value": "value2" }
  ]
}

labels

屬性

描述

描述

描述與範本相關聯之標籤的 JSON 陣列。陣列中的每個元素都必須是有效的 JSON 物件。

重要性

非必要

格式

陣列

接受的值

有效的 JSON 陣列

陣列格式

  • name:(必要) 標籤索引鍵的名稱。

  • value:(必要) 關聯至索引鍵的值。

範例

{
  "labels": [
    { "name": "com.example.vendor", "value": "Acme Incorporated" },
    { "name": "com.example.label-with-value", "value": "foo" },
    { "name": "version", "value": "1.0" }
  ]
}

volumes

屬性

描述

描述

描述與範本相關聯之磁碟區的 JSON 陣列。陣列中的每個元素都必須是有效的 JSON 物件且具有必要的容器屬性。

重要性

非必要

格式

陣列

接受的值

有效的 JSON 陣列

陣列格式

  • container:(必要) 容器路徑。

  • volume:(非必要) Docker 磁碟區的名稱。

  • bind:(對於 Docker 容器,此為選用項目,對於 LXD 容器,則為必要項目) 用作綁定掛載來源的主機路徑。

  • readonly:(非必要) 如果設為true,磁碟區會以唯讀模式掛載。

範例

{
  "volumes": [
    {
      "container": "/usr/share/nginx/html"
    },
    {
      "container": "/usr/share/nginx/html"
      "volume": "nginx-vol"
    },
    {
      "container": "/usr/share/nginx/html/my-templates.json",
      "bind": "/Container/my-templates.json  ",
      "readonly": true
    }
  ]
}

ports

屬性

描述

描述

描述範本所公開之連接埠的 JSON 陣列。陣列中的每個元素都必須是有效的 JSON 字串,並指定容器中的埠號及通訊協定。這可以選擇使用埠號和冒號 (例如 8080:) 作為前置字元,以定義在主機上對應的連接埠。如果未指定主機連接埠,Docker 主機會在容器啟動時自動指派連接埠。

重要性

非必要

格式

陣列

接受的值

有效的 JSON 陣列

範例

{
  "ports": ["8080:80/tcp", "443/tcp", "80/udp"]
}

hostname

屬性

描述

描述

容器的主機名稱。有助於輕易識別出容器。

重要性

非必要

格式

字串

接受的值

任何字串值

範例

{
  "hostname": "myContainerHostName"
}

restart_policy

屬性

描述

描述

與 Docker 容器相關聯的重新啟動原則。如果未指定,此值預設為unless-stopped

重要性

非必要

格式

字串

接受的值

  • no:不要自動重新啟動容器。

  • on-failure:若容器因錯誤而結束 (例如非零的結束碼),則重新啟動容器。

  • always:若容器停止,則一律將其重新啟動。若是手動停止了容器,只有在 Container Station 重新啟動時,該容器才會重新啟動。您也可以手動將其重新啟動。

  • unless-stopped:與[一律]類似,但若有人手動停止了容器,即使 Container Station 已重新啟動,該容器也不會重新啟動。

範例

{
  "restart_policy": "unless-stopped"
}

auto_start_policy

屬性

描述

描述

與 LXD 容器相關聯的自動啟動原則。如果未指定,此值預設為retain

重要性

非必要

格式

字串

接受的值

  • no:不要自動重新啟動容器。

  • always:若容器停止,則一律將其重新啟動。若是手動停止了容器,只有在 Container Station 重新啟動時,該容器才會重新啟動。您也可以手動將其重新啟動。

  • retain:與[一律]類似,但若有人手動停止了容器,即使 Container Station 已重新啟動,該容器也不會重新啟動。

範例

{
  "auto_start_policy": "retain"
}

interactive

屬性

描述

描述

控制 Docker 容器是否應在前景模式下啟動。如果未指定,則預設值為true

重要性

非必要

格式

布林值

接受的值

  • true:在前景模式下啟動 Docker 容器。

  • false:在卸離模式下啟動容器。

範例

{
  "interactive": false
}

tty

屬性

描述

描述

控制是否應為 Docker 容器分配虛擬 TTY。如果未指定,則預設為true

重要性

非必要

格式

布林值

接受的值

  • true:為 Docker 容器分配一個虛擬 TTY

  • false:不為 Docker 容器分配虛擬 TTY。

範例

{
  "tty": false
}

privileged

屬性

描述

描述

控制容器是否應在前景模式下啟動。如果未指定,則預設為false

重要性

非必要

格式

布林值

接受的值

  • true:在特權模式下啟動容器。

  • false:不在特權模式下啟動容器。

範例

{
  "privileged": true
}

在 NGINX 容器中託管自訂應用程式範本

接下來,您必須使自訂應用程式範本可用於 Container Station。本主題將說明如何以 NGINX 容器(此容器也在 Container Station 中執行)託管範本檔案。

或者,您也可以在 QNAP 網站伺服器中託管應用程式範本檔案。請參見:以 QNAP 網站伺服器託管自訂應用程式範本

重要提示:

在更新自訂應用程式範本 JSON 檔案後,您必須重新啟動 NGINX 容器,變更才能反映在容器中。

  1. 上傳自訂應用程式範本檔案。
    1. 開啟[File Station]
    2. 前往裝置上的資料夾。
    3. 上傳應用程式範本檔案。
    4. 記下範本檔案的位置以備之後使用。
  2. 開啟[Container Station]
  3. 在最上方的面板中,按一下[探索]旁的箭頭
  4. 選取[建立容器]

    [建立容器]視窗隨即開啟。

  5. 選取映像檔。

    設定

    動作

    模式

    選擇[基本模式]

    倉庫伺服器

    選取 Docker Hub

    映像檔

    輸入nginx

  6. 按一下[下一步]
  7. 非必要: 編輯容器設定。

    設定

    動作

    名稱

    輸入容器名稱。範例:nginx-my-template

    自動啟動原則

    選取[除非停止]

    此選項會使容器一律重新啟動,除非使用者手動停止。

    網路設定

    編輯設定以適合您的網路環境。

    在本教學中,我們使用預設網路模式,並透過主機上的連接埠30080傳送流量到容器。

    注意:

    如果未指定[主機]欄位,則容器重新啟動後已發佈的連接埠可能會改變。這可能會導致 Container Station 無法存取應用程式範本。

  8. 非必要: 修改進階設定。
    1. 按一下[進階設定]

      [進階設定]視窗隨即顯示。

    2. 前往[儲存]分頁。
    3. 按一下[新增儲存空間]旁邊的箭頭。
    4. 選取[綁定掛載主機路徑]

      此時會新增儲存空間資料列。

    5. 按一下

      [選取主機路徑]視窗隨即開啟。

    6. 找到您之前上傳的應用程式範本檔案,並加以選取。
    7. 按一下[套用]
    8. [容器]欄位中,輸入/usr/share/nginx/html/TEMPLATE_FILENAME
      注意:

      請將TEMPLATE_FILENAME換成您的範本檔案名稱。範例:/usr/share/nginx/html/my-templates.json

    9. 選取 RO
    10. 按一下[套用]

      Container Station 就會將儲存空間設定存檔。

  9. 按一下[下一步]
  10. 檢視容器設定,然後按一下[完成]

應用程式範本檔案將變為可供使用的狀態。

注意:

若要驗證應用程式範本檔案是否可以存取,您可以在網頁瀏覽器中輸入 http://HOST_IP_ADDRESS:PUBLISHED_HOST_PORT/TEMPLATE_FILENAME。範例:http://192.168.1.1:30080/my-templates.json.

以 QNAP 網站伺服器託管自訂應用程式範本

接下來,您必須使自訂應用程式範本可用於 Container Station。本主題說明以 QNAP 網站伺服器託管範本檔案的程序。

或者,您也可以直接在 Container Station 中使用 NGINX 容器託管應用程式範本檔案。請參見:在 NGINX 容器中託管自訂應用程式範本

  1. 啟用 QTS 網站伺服器。
    1. 請以管理員身分登入系統。
    2. 前往[控制台]>[應用程式]>[網站伺服器]>[網站伺服器]
    3. 選取[啟用網站伺服器]
    4. 非必要: 編輯網站伺服器設定。
    5. 按一下[套用]

      系統就會啟用網站伺服器

  2. 上傳自訂應用程式範本檔案。
    1. 開啟[File Station]
    2. 前往系統為網站伺服器所建立的 Web 資料夾。
    3. 上傳應用程式範本檔案。

應用程式範本檔案將變為可供使用的狀態。

注意:

若要驗證應用程式範本檔案是否可以存取,您可以在網頁瀏覽器中輸入 http://HOST_IP_ADDRESS:WEB_SERVER_PORT/TEMPLATE_FILENAME。範例:http://192.168.1.1:80/my-templates.json.

將自訂應用程式範本新增到 Container Station

下一步是,將自訂應用程式範本檔案新增到 Container Station,這樣就可以在 Container Station 中使用應用程式範本清單。

  1. 啟動 Container Station
  2. 在選單上按一下[偏好設定]
  3. 前往[應用程式範本]
  4. 選取[啟用自訂範本]
  5. 指定自訂應用程式範本的 URL。
    注意:

    根據您的設定,URL 可能會要求您包含已設定網站伺服器的 IP 位址和埠號。範例:http://192.168.1.1:30080/my-template-file.json

  6. 按一下[套用]

Container Station 將儲存自訂應用程式範本。

部署自訂應用程式範本

最後一步是使用您在上一步中新增的自訂應用程式範本部署容器。

  1. 前往選單上的[應用程式範本]
  2. 前往[自訂範本]分頁。
  3. 指定範本。
  4. 按一下[部署]

[部署容器]精靈隨即開啟。請參見:建立 Docker 容器

這篇文章有幫助嗎?

60% 的人認為有幫助。
謝謝您,我們已經收到您的意見。

請告訴我們如何改進這篇文章:

如果您想提供其他意見,請於下方輸入。

選擇規格

      顯示更多 隱藏更多

      選擇其他偏好的語言:

      back to top