如何在 Container Station 3 中配置并部署自定义应用程序模板?


最后修订日期: 2023-03-27

Container Station 应用程序模板可用于将预配置的容器部署到您的 QNAP 环境中。默认情况下,Container Station 会提供一组经过 QNAP 验证的模板,但您也可以添加其他自定义应用程序模板来满足您的特定需求。您可以直接将这些自定义应用程序模板托管到 QNAP 设备或外部 Web 服务器上。

本教程介绍在 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:类似于 Always,但手动停止容器的情况除外,此时即使 Container Station 重新启动后容器也不会重新启动。

示例

{
  "restart_policy": "unless-stopped"
}

auto_start_policy

属性

描述

描述

与 LXD 容器相关的自动启动策略。如果未指定,此值的默认值为retain

重要程度

可选

格式

字符串

接受的值

  • no:不自动重新启动容器。

  • always:容器停止时始终重新启动容器。如果已手动停止容器,则只有当 Container Station 重新启动或您手动重新启动容器时,才会重新启动容器。

  • retain:类似于 Always,但手动停止容器的情况除外,此时即使 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 使用。本主题介绍使用也在 Container Station 中运行的 NGINX 容器托管模板文件的过程。

您也可以在 QNAP Web 服务器中托管应用程序模板文件。请参见使用 QNAP Web 服务器托管自定应用程序模板

重要:

更新自定义应用程序模板 JSON 文件后,必须重新启动 NGINX 容器,以在容器中反映这些更改。

  1. 上传自定义应用程序模板文件。
    1. 打开 File Station
    2. 导航到设备上的文件夹。
    3. 上传应用程序模板文件。
    4. 记下模板文件的位置以备后用。
  2. 打开 Container Station
  3. 在上面板中,单击“Explore”(浏览)旁边的箭头
  4. 选择“Create Container”(创建容器)。

    此时会打开“Create Container”(创建容器)窗口。

  5. 选择映像。

    设置

    操作

    Mode(模式)

    选择“Basic Mode”(基本模式)。

    Registry(存储库)

    选择“Docker Hub”(Docker 中心)。

    Image(映像)

    输入nginx

  6. 单击“Next”(下一步)。
  7. 可选: 配置容器设置。

    设置

    操作

    Name(名称)

    输入容器名称。例如:nginx-my-template

    Auto start policy(自动启动策略)

    选择 Unless Stopped(停止时除外)。

    此选项将使该容器始终重新启动,除非由用户手动停止。

    Network Configuration(网络配置)

    根据您的网络环境配置设置。

    在本教程中,我们使用“Default”(默认)网络模式,并通过主机上的端口30080将流量发送到容器。

    注意:

    如果未指定“Host”(主机)字段,则在容器重新启动后,已发布的端口可能会更改。这可能会导致 Container Station 无法访问应用程序模板。

  8. 可选: 修改高级设置。
    1. 单击“Advanced Settings”(高级设置)。

      此时会出现“Advanced Settings”(高级设置)窗口。

    2. 转到“Storage”(存储)选项卡。
    3. 单击“Add Volume”(添加卷)旁边的箭头。
    4. 选择“Bind Mount Host Path”(绑定装载主机路径)。

      随即会添加一个新存储行。

    5. 单击

      此时会打开“Select Host Path”(选择主机路径)窗口。

    6. 找到并选择之前上传的应用程序模板文件。
    7. 单击“Apply”(应用)。
    8. 在“Container”(容器)字段中,输入/usr/share/nginx/html/TEMPLATE_FILENAME
      注意:

      TEMPLATE_FILENAME替换为您模板文件的名称。例如:/usr/share/nginx/html/my-templates.json

    9. 选择 RO
    10. 单击“Apply”(应用)。

      Container Station 随即会保存存储设置。

  9. 单击“Next”(下一步)。
  10. 查看容器设置,然后单击“Finish”(完成)。

应用程序模板文件随即可供使用。

注意:

您可以通过在 Web 浏览器中输入“http://主机 IP 地址:发布的主机端口/模板文件名”,来验证应用程序模板文件是否可访问。例如:http://192.168.1.1:30080/my-templates.json。

使用 QNAP Web 服务器托管自定应用程序模板

接下来,需要使自定义应用程序模板可供 Container Station 使用。本主题介绍使用 QNAP Web 服务器托管模板文件的过程。

也可以直接在 Container Station 中使用 NGINX 容器托管应用程序模板文件。请参见在 NGINX 容器中托管自定义应用程序模板

  1. 启用 QTS Web 服务器。
    1. 以管理员身份登录系统。
    2. 转到Control Panel”(控制台)>“Applications”(应用程序)>“Web Server”(Web 服务器)>“Web Server”(Web 服务器)
    3. 选择“Enable Web Server”(启用 Web 服务器)。
    4. 可选: 配置 Web 服务器设置。
    5. 单击“Apply”(应用)。

      系统随即会启用 Web 服务器

  2. 上传自定义应用程序模板文件。
    1. 打开 File Station
    2. 导航到为 Web 服务器创建的 Web 文件夹。
    3. 上传应用程序模板文件。

应用程序模板文件随即可供使用。

注意:

您可以通过在 Web 浏览器中输入“http://主机 IP 地址:Web 服务器端口/模板文件名”,来验证应用程序模板文件是否可访问。例如:http://192.168.1.1:80/my-templates.json。

将自定义应用程序模板添加到 Container Station

下一步是将自定义应用程序模板文件添加到 Container Station。随后,便可在 Container Station 中看到应用程序列表。

  1. 启动 Container Station
  2. 在菜单上,单击“Preferences”(首选项)。
  3. 转到“App Templates”(应用程序模板)。
  4. 选择“Enable custom template”(启用自定义模板)。
  5. 指定自定义应用程序模板的 URL。
    注意:

    根据您的配置,可能要求您在 URL 中包括已配置的 Web 服务器的 IP 地址和端口号。例如:http://192.168.1.1:30080/my-template-file.json

  6. 单击“Apply”(应用)。

Container Station 随即会保存自定义应用程序模板。

部署自定义应用程序模板

最后一步是部署在上一步中添加的自定义应用程序模板文件中的容器。

  1. 在菜单上,转到“App Templates”(应用程序模板)。
  2. 转到“Custom Templates”(自定义模板)选项卡。
  3. 找到一个模板。
  4. 单击“Deploy”(部署)。

此时会打开“Deploy Container”(部署容器)向导。请参见创建 Docker 容器

这篇文章有帮助吗?

谢谢您,我们已经收到您的意见。

请告诉我们如何改进这篇文章:

如果您想提供其他意见,请于下方输入。

选择规格

      显示更多 隐藏更多
      open menu
      back to top