

终止支持通知：2026 年 5 月 31 日， AWS 将终止对的支持。 AWS Panorama 2026 年 5 月 31 日之后，您将无法再访问 AWS Panorama 控制台或 AWS Panorama 资源。有关更多信息，请参阅[AWS Panorama 终止支持](https://docs.aws.amazon.com/panorama/latest/dev/panorama-end-of-support.html)。

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 构建应用程序映像
<a name="applications-image"></a>

AWS Panorama Appliance 以从您构建的映像中导出的容器文件系统的形式运行应用程序。您可以在 Dockerfile 中指定应用程序的依赖项和资源，该 Dockerfile 使用 AWS Panorama 应用程序基础映像作为起点。

要构建应用程序映像，您可以使用 Docker 和 AWS Panorama 应用程序 CLI。本指南示例应用程序中的以下示例演示了这些用例。

**Example [packages/123456789012-SAMPLE\$1CODE-1.0/Dockerfile](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/sample-apps/aws-panorama-sample/packages/123456789012-SAMPLE_CODE-1.0/Dockerfile)**  

```
FROM public.ecr.aws/panorama/panorama-application
WORKDIR /panorama
COPY . .
RUN pip install --no-cache-dir --upgrade pip && \
    pip install --no-cache-dir -r requirements.txt
```

使用以下 Dockerfile 指令。

****
+ `FROM` - 加载应用程序基础映像 (`public.ecr.aws/panorama/panorama-application`)。
+ `WORKDIR` - 在映像上设置工作目录。`/panorama` 用于应用程序代码和相关文件。此设置仅在构建期间保留，不会影响应用程序运行时的工作目录 (`/`)。
+ `COPY` - 将文件从本地路径复制到映象中的路径。`COPY . .`将当前目录（程序包目录）中的文件复制到映象上的工作目录中。例如，应用程序代码是从 `packages/123456789012-SAMPLE_CODE-1.0/application.py` 复制到 `/panorama/application.py` 的。
+ `RUN`- 在构建期间对映像运行 shell 命令。通过在命令之间使用 `&&`，单个 `RUN` 操作可以按顺序运行多个命令。此示例更新 `pip` 程序包管理器，然后安装 `requirements.txt` 中列出的库。

您可以使用在构建时非常有用的其他指令，例如 `ADD` 和 `ARG`。向容器添加运行时系统信息的说明（例如 `ENV`）不适用于 AWS Panorama。AWS Panorama 不会从映像中运行容器。仅使用映像导出文件系统，然后将其传输到设备。

## 指定依赖项
<a name="applications-image-dependencies"></a>

`requirements.txt` 是一个 Python 要求文件，用于指定应用程序使用的库。示例应用程序使用 Open CV 和 适用于 Python (Boto3) 的 AWS SDK。

**Example [packages/123456789012-SAMPLE\$1CODE-1.0/requirements.txt](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/sample-apps/aws-panorama-sample/packages/123456789012-SAMPLE_CODE-1.0/requirements.txt)**  

```
boto3==1.24.*
opencv-python==4.6.*
```

Dockerfile 中的 `pip install` 命令会将这些库安装到 `/usr/local/lib` 下的 Python `dist-packages` 目录，以便您的应用程序代码可以将其导入。

## 本地存储
<a name="applications-image-storage"></a>

AWS Panorama 保留了用于存储应用程序的 `/opt/aws/panorama/storage` 目录。您的应用程序可以在此路径上创建和修改文件。在存储目录中创建的文件在重新启动后仍会保留。其他临时文件位置会在启动时清除。

## 构建映像资产
<a name="applications-image-build"></a>

使用 AWS Panorama 应用程序 CLI 为应用程序包构建映像时，CLI 将在程序包目录中运行 `docker build`。这将生成一个包含应用程序代码的应用程序映像。然后，CLI 会创建一个容器，导出其文件系统，对其进行压缩，然后将其存储在 `assets` 文件夹中。

```
$ panorama-cli build-container --container-asset-name code_asset --package-path packages/123456789012-SAMPLE_CODE-1.0
docker build -t code_asset packages/123456789012-SAMPLE_CODE-1.0 --pull
docker export --output=code_asset.tar $(docker create code_asset:latest)
gzip -1 code_asset.tar
{
    "name": "code_asset",
    "implementations": [
        {
            "type": "container",
            "assetUri": "6f67xmpl32743ed0e60c151a02f2f0da1bf70a4ab9d83fe236fa32a6f9b9f808.tar.gz",
            "descriptorUri": "1872xmpl129481ed053c52e66d6af8b030f9eb69b1168a29012f01c7034d7a8f.json"
        }
    ]
}
Container asset for the package has been succesfully built at  /home/user/aws-panorama-developer-guide/sample-apps/aws-panorama-sample/assets/6f67xmpl32743ed0e60c151a02f2f0da1bf70a4ab9d83fe236fa32a6f9b9f808.tar.gz
```

输出中的 JSON 数据块是资产定义，CLI 将其添加到程序包配置 (`package.json`) 中，并注册 AWS Panorama 服务。CLI 还会复制描述符文件，该文件指定了应用程序脚本的路径（应用程序的入口点）。

**Example [packages/123456789012-SAMPLE\$1CODE-1.0/descriptor.json](https://github.com/awsdocs/aws-panorama-developer-guide/blob/main/sample-apps/aws-panorama-sample/packages/123456789012-SAMPLE_CODE-1.0/descriptor.json)**  

```
{
    "runtimeDescriptor":
    {
        "envelopeVersion": "2021-01-01",
        "entry":
        {
            "path": "python3",
            "name": "/panorama/application.py"
        }
    }
}
```

在资产文件夹中，描述符和应用程序映像以其 SHA-256 校验码命名。当在 Amazon S3 存储资产时，此名称用作该资产的唯一标识符。