Container Builder#

Container Builder (CB) 用于为使用 Composer 创建的 AI 应用程序图构建 Docker 镜像。除了 Docker 镜像,它还可以将最终镜像推送到云端进行部署。

Container Builder 与 Registry 交互:用于

  • 将扩展和其他相关文件下载到您的本地系统。

  • 复制配置文件中指定的其他必需文件,以生成中间工作文件夹和优化的 Dockerfile。

  • 将归档文件/软件包依赖项和指令转换为 Docker,并尝试构建最小尺寸的本地镜像。为了优化,您可以轻松配置 Container Builder 以支持多阶段 Docker 构建。

Container Builder

Container Builder 支持在 x86 Ubuntu 系统上安装图和构建容器镜像。它还可以从 x86_64 平台构建 arm64 镜像 - 为此,您需要安装 QEMU 和 bintutils

先决条件#

  1. 安装正确的 Docker 版本 https://docs.docker.net.cn/engine/install/ubuntu/

  2. 登录您可能需要拉取/推送镜像的服务器。运行

    $ docker login server:port
    

如果您需要 NGC 镜像和资源,请按照 https://ngc.nvidia.com/setup/api-key 申请权限并获取 API_KEY 令牌。然后运行,

$ docker login nvcr.io
  1. 某些功能(例如 squash)可能需要 Docker 实验性支持。要启用该功能,请更新 /etc/docker/daemon.json 并添加

    {
           "experimental": true
    }
    

    然后通过运行以下命令重启 Docker

    $ sudo systemctl restart docker
    
  2. 如果您想从 x86_64 平台构建 ARM Docker 镜像,则需要安装 QEMUbinfmt。可能需要重启操作系统。

    $ sudo apt-get install qemu binfmt-support qemu-user-static
    $ docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
    

要验证它是否工作,请运行

$ docker run --rm -t arm64v8/ubuntu uname -m
  1. 安装 Graph Composer 软件包。确保已安装 container_builder 可执行二进制文件。

Container Builder 功能#

镜像构建基于 Docker build。Container Builder 提供不同的阶段模型来构建镜像。有 compile_stageclean_stage 模型供用户选择。某些功能仅适用于一个阶段。有关更多详细信息,请参阅功能表。

Container Builder 功能#

功能

描述

阶段 (compile_stage/clean_stage)

本地文件/文件夹复制

将本地文件/文件夹复制到当前镜像目标路径。

两者

阶段文件/文件夹复制

将文件/文件夹从其他目标阶段或其他镜像复制到当前镜像/阶段目标路径。

两者

安装多个 DeepStream 图文件

将一个或多个 DeepStream 图文件扩展和相关文件安装到镜像中

N/A,最终镜像

创建/销毁多个 Registry 仓库

指定要创建和删除的多个 Registry 仓库列表

N/A,最终镜像

通过 apt/pip3 安装软件包

在线安装 Debian 软件包和 pip3 软件包

两者

HTTP 归档文件下载和安装

下载 HTTP 归档文件,并在之后运行自定义命令。

两者

git 仓库克隆和自定义构建

从仓库克隆特定分支/标签/提交,并进行自定义构建

仅 compile_stage

多阶段 Docker 构建

从多个阶段构建最终目标镜像。

N/A,用于最终镜像

自定义命令行运行

在一个镜像阶段运行自定义命令

clean_stage

Dockerfile 其他

基础镜像选择和其他杂项

WORKDIR/ENV/ENTRYPOINT/LABEL

clean_stage

Docker build 选项

支持平台、参数、网络、缓存、squash

N/A,用于最终镜像

将镜像推送到云端

将本地构建的镜像推送到远程服务器

N/A,用于最终镜像

跨平台容器构建

支持从 x86_64 构建其他平台(例如 ARM64)的容器

N/A

Container Builder 工具用法#

CB (container_builder) 工具只有很少的输入参数。配置文件以 YAML 格式文本文件收集所有用户设置。简而言之,要生成容器,用户需要更新配置文件并运行命令行,其中 graph_target_key 可以是 x86aarch64

$ container_builder build -c config.yaml -d graph_target_key

容器镜像也可以使用以下命令推送到远程仓库

$ container_builder push -c config.yaml -d graph_target.yaml

有关配置设置的更多详细信息,请参阅配置规范。图目标键对应于图目标配置,存储在文件 /opt/nvidia/graph-composer/graph_targets.yaml 中,注册表在图安装期间使用该文件。有关示例文件,请参阅注册表 CLI 图安装文档。

默认日志打印级别为 INFO,输出流显示在屏幕上。log-level、log-file 和其他参数用于调试。有关更多详细信息,请参阅以下命令的帮助选项

$ container_builder -h

多架构构建#

此外,CB 工具现在可以构建多架构镜像。用户可以使用以下命令来实现相同的目的

$ container_builder build -c config_file1.yaml config_file2.yaml -d target_key1 target_key2 -wd [working dir]

如果用户在每个配置文件中都指定了目标,如下所示,则也可以跳过命令中提到的目标键

%YAML 1.2
---
target: x86   # optional
unique_stage: final_image
base_image: auto
stage_model: clean_stage

这里需要注意的一点是,多架构功能要求用户也提及 Docker 推送配置;否则,CB 将无法生成最终的多架构镜像。

运行 Container Builder#

以下是使用现有 Container Builder 配置文件构建容器并执行容器的基本步骤集。

  1. 更新配置文件以开始构建。打开 /opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test1/ds_test1_container_builder_dgpu.yaml

  2. graph_files 指定具有正确 DeepStream SDK 版本的正确基础镜像。如果未指定基础镜像,Container Builder 将尝试从 /opt/nvidia/graph-composer/container_builder.yaml 中的预定义基础镜像池中自动选择。将选择与图目标最匹配的容器

    base_image: "nvcr.io/nvidia/deepstream:x.x-x"
    
  3. docker_build 部分中指定输出镜像名称

    docker_build:
      image_name: deepstream_test1_dgpu:nvgcb_test
    
  4. 通过在终端中运行以下命令,确保 gxf 服务器已启动

    $ systemctl --user status gxf_server
    

    用户还可以通过设置环境变量 GXF_SERVER_PORT 在不同的端口上运行 gxf_server。目前,Container Builder CLI 仅支持本地运行 gxf_server,而基于 Windows 的用户或基于 GUI 的 Graph Composer 用户可以设置远程地址以连接到远程运行的 gxf_server

  5. 运行 Container Builder 工具以构建镜像

    $ container_builder build -c ds_test1_container_builder_dgpu.yaml -d x86 -wd /opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test1/
    
  6. 验证容器中的镜像和图,使用配置文件中的镜像

    $ docker run  --gpus all  -v /tmp/.X11-unix:/tmp/.X11-unix <image_name>
    

Container Builder 配置#

Container Builder 的输入配置文件遵循 YAML1.2 格式规则 https://yaml.org/spec/1.2/spec.html

配置设置中有 2 个主要的 YAML 文档部分。

  1. Container Builder 主控制部分 - 用户可以使用它指定图安装选项、构建/推送选项和其他主机端控制选项。每个配置文件只能有一个带有键字段 container_builder: name 的控制部分

  2. Container Dockerfile 阶段部分 - 所有部分都将转换为 Dockerfile。用户可以指定多个阶段部分。有 2 个模型模板用于不同的阶段。

    1. clean_stage 模型:如果未指定,则这是默认模型。输出容器镜像必须具有 clean_stage 部分作为最终阶段。用户应尽可能保持最终阶段的清洁。

    2. compile_stage 模型:它用于执行一些额外的工作,例如从源代码构建二进制文件以及安装一些编译工具。它应该是一个中间阶段,用户可以指定 clean_stage 以从 compile_stage 复制所需的二进制文件。

注意

从 Container Builder 构建 Docker 镜像时,您必须安全地存储私有信息。了解更多 Docker 参考 https://docs.docker.net.cn/engine/reference/builder/ 以避免将关键层暴露给公众。MSB(多阶段构建)是分离内部源代码阶段和清洁公共阶段的最佳实践之一。在 Container Builder 中,用户可以使用 compile_stage 快速开始源代码编译,并将结果复制到 clean_stage 以获得最终镜像。更多详情请参考 https://docs.docker.net.cn/develop/develop-images/multistage-build/

Container Builder 配置的基本示例#

此示例包含 2 个部分:clean_stage 构建部分和一个主控制部分。

在阶段构建期间

  • base_image 开始,并将一些 debian、Python3 软件包安装到目标镜像中

  • 安装归档文件

  • 从本地和其他镜像复制文件

  • 最后在输出目标镜像上进行一些清理和环境设置。

主控制部分会将图依赖项通过 Registry 安装到目标镜像中。您可以指定一些构建选项来控制阶段构建,并最终将目标镜像推送到云端。

以下是带有内联注释的示例代码。

 # Container dockerfile Stage build section
---
# target: x86   # optional, can be used during multi-arch build
unique_stage: final_image  # required, name must be unique
# base_image is required
base_image: "nvcr.io/nvidia/deepstream:7.1-triton-multiarch"
stage_model: clean_stage # Optional

# Install debian packages
apt_deps:
- curl
- ca-certificates
- tar
- python3
- python3-pip

# Install pip3 packages
pip3_deps:
- PyYAML>=5.4.1

# Copy local files to image
local_copy_files:
- src: "/opt/nvidia/graph-composer/gxe"
  # dst: "/opt/nvidia/graph-composer/gxe"
- src: "/opt/nvidia/graph-composer/libgxf_core.so"
  # dst: "/opt/nvidia/graph-composer/libgxf_core.so"

# Copy files from other images or other stages
stage_copy_files:
- src_stage: "nvcr.io/nvidia/deepstream:7.1-samples"
  src: "/opt/nvidia/deepstream/deepstream/samples"
  # dst: "/opt/nvidia/deepstream/deepstream/samples"

# Download HTTP archives and install
http_archives:
- url: https://host:port/archive.tar.bz2
  curl_option: "-u user:token"
  post_cmd: "tar -jxvf archive.tar.bz2 -C /"

# Clean up operations
custom_runs:
- "apt autoremove && ln -s /opt/nvidia/deepstream/deepstream/samples /samples"

# Specify WORKDIR
work_folder: /workspace/test/

# Specify multiple ENV
env_list:
   PATH: "/opt/nvidia/graph-composer:$PATH"
   LD_LIBRARY_PATH: "/opt/nvidia/graph-composer/:$LD_LIBRARY_PATH"

# specify ENTRYPOINT
#entrypoint: ["/opt/nvidia/graph-composer/gxe"]

# Container Builder Main Control Section
---  # delimiter required
container_builder: main # required, any string is ok for name
graph: # optional
   graph_files: [deepstream-test1.yaml] # graph file in local
   graph_dst: /workspace/test/  # destination path in target image

   # extension manifest location in target image
   manifest_dst: /workspace/test/

   # extensions installed location in target image
   ext_install_root: /workspace/test/

# docker build options
docker_build:
   image_name: deepstream_test1:nvgcb_test
   no_cache: true
   squash: false

# docker push list to cloud, optional
# username/password are optional if $docker login already ran
docker_push:
-  url: "nvcr.io/nvidian/user/deepstream_test1:nvgcb_test"
   Username:
   password:

多阶段示例#

此示例显示了多阶段构建。download_stage 在 compile_stage 模型中将使用 netrc 文件进行权限验证,从私有 Git 仓库下载所有 ONNX 模型。最终镜像会将 download_stage 中的特定文件复制到最终镜像位置。download_stage 将会丢失,作为一些中间层,最终镜像是干净的,以保持最小的依赖关系并摆脱 netrc 文件。

# use compile_stage to download all models through git
---
unique_stage: download_stage
base_image: "ubuntu:22.04"
stage_model: compile_stage


# copy netrc file into compile stage for git clone
local_copy_files:
- src: "/home/user/.netrc"
  dst: "/root/.netrc"

# download models into folder /download/models
git_repo_list:
- repo_folder: /downloads/models
  url: https://privatehost/user/models #a private host require netrc
  tag: master

# use clean_stage for final image output
---
# Final Stage
unique_stage: final_image
base_image: "ubuntu:22.04"
stage_model: clean_stage

# copy a specific file out of download_stage into final_image
stage_copy_files:
- src_stage: "download_stage"
  src: "/downloads/models/modelA.onnx"
  dst: "/data/modelA.onnx"

# Container builder main control settings
---
# Container Builder Config
container_builder: builder_name # required
docker_build:
  image_name: "cb_multi_stage:cb_test"
  # specify step orders in case multiple stages out of order
  stage_steps: [download_stage, final_image]
  no_cache: true

Container Builder 主控制部分规范#

注意

所有以 /*dst 结尾的字段都以“/”结尾,表示目标镜像上的文件夹路径。/*src 取决于实际源路径。

Container Builder 控制规范#

字段

描述

类型和范围

示例注释

container_builder

控制部分名称

字符串,必需

container_builder: main

graph

包含图文件、扩展和注册表设置的字典

字典,可选

graph:
  graph_files: [test1.yaml]
  manifest_dst:    /workspace/test/

graph.graphfiles

YAML 格式的 Deepstream gxf 图文件,可以由 Composer 生成

list[string],图的必需项

graph:
  graph_files: [test1.yaml, test2.yaml]

graph.graph_dst

图文件在目标镜像中的目标位置。如果未提供,用户可以决定通过阶段构建进行复制

字符串,可选

graph:
  graph_dst: /workspace/test1/

如果存在多个 graph_files,则必须指定文件夹路径。

graph.manifest_dst

清单文件在目标镜像中的目标位置

字符串,图的必需项

graph:
  manifest_dst: /workspace/test/

如果存在多个 graph_files,则必须指定文件夹路径。

graph.ext_install_root

图扩展前缀目录在目标镜像中的目标位置

字符串,可选

取决于注册表行为是否已设置

graph:
  ext_install_root: /opt/nvidia/graph-composer

必须指定文件夹路径

docker_build.image_name

带有标签的目标镜像名称

字符串,可选

如果不存在,将使用随机名称

docker_build:
  image_name: nvgcb_test:21.04

docker_build.no_cache

是否使用缓存构建。默认情况下禁用缓存

布尔值,可选

docker_build:
  no_cache: true

docker_build.squash

压缩镜像层以减小镜像大小,需要在 Docker 中启用实验性功能,请检查先决条件。

注意:并非所有层都支持 squash,如果某些层失败,则需要禁用 squash

布尔值,可选

docker_build:
  squash: false

docker_build.network

Docker build 的网络模式

字符串,可选

默认值为 host

docker_build:
  network: host

docker_build.stage_steps

阶段构建部分的顺序,在启用多阶段构建时可用。

list[string],可选

如果禁用,默认顺序是阶段部分的顺序

---
unique_stage: final_stage
...
---
unique_stage: download_stage
...
---
docker_build:
  stage_steps: [download_stage, final_stage]

docker_push

用于 Docker 推送的远程镜像仓库列表。每个项目都有一个带有标签的远程仓库 URL

list[dict],可选

如果您打算使用多架构功能,则必须

docker_push:
- url: "nvcr.io/user/repo1:cb_test1"
- url: "gitlab/user/repo1:cb_test1"
...

docker_push.url

每个 URL 都是远程镜像仓库和标签名称。

字符串,docker_push 的必需项

docker_push:
- url: "nvcr.io/user/repo1:cb_test1"

docker_push.username

用于登录远程仓库服务器的用户名


注意: 如果用户已经运行了 $docker login server:port,则不是必需的

字符串,可选

docker_push:
- url: "nvcr.io/user/repo1:cb_test1"
  username: <user>

docker_push.password

用于登录远程仓库服务器的文本密码


注意: 如果用户已经运行了 $docker login server:port,则不是必需的

字符串,可选

docker_push:
- url: "nvcr.io/user/repo1:cb_test1"
  username: <user>
  password: <password>

docker_push.password_env

存储密码的全局操作系统环境变量的变量名。这可以避免用户在配置文件中暴露文本密码

注意: 如果用户已经运行了 $docker login,则不是必需的

字符串,可选

docker_push:
- url: "nvcr.io/user/repo1:cb_test1"
  username: <user>
  password_env: <TOKEN>

debug

一些调试信息并保留一些中间状态

字典,可选

debug:
  docker_file: /path/to/dockerfile
  docker_folder: /path/to/docker_folder

debug.docker_file

保留生成的 Dockerfile 以进行调试

字符串,可选

debug:
  docker_file: /path/to/dockerfile

debug.docker_folder

保留生成的 Docker 文件夹以进行调试

字符串,可选

debug:
  docker_folder: /path/to/docker_folder

Container Dockerfile 阶段部分规范#

下表列出了 compile_stage 和 clean_stage 部分的配置规范。大多数字段对于两个阶段模型都是通用的。只有 clean_stage 应用于最终阶段。此外,用户应记住 compile_stage 的阶段未优化,可能包含最终输出不需要的额外软件包和文件。

注意

所有以 *dst 结尾的字段都以“/”结尾,表示目标镜像上的文件夹路径。*src 取决于实际源路径。

Container Builder Dockerfile 阶段规范#

字段

描述

类型和范围

示例注释

阶段 compile_stage / clean_stage

target

图目标键,对应于注册表在图安装期间使用的目标配置

字符串,可选 从以下选项中选择

  • x86

  • aarch64

target: x86

两者

unique_stage

当前阶段的唯一名称,也用于 Dockerfile 目标名称

字符串,必需

unique_stage: final_image

两者

base_image

指定当前目标阶段所基于的阶段名称或远程/本地镜像。

字符串,可选

base_image: "ubuntu:22.04"

用于基于指定依赖项自动选择

base_image: "auto"

两者

platform

如果基础镜像在多个平台中具有相同的名称,则指定基础镜像的平台

字符串,可选 从以下选项中选择

  • linux/amd64

  • linux/arm64

默认值:linux/amd64

platform: linux/amd64

两者

stage_model

配置文件将用于构建此阶段的 stage_model

字符串,可选 从以下选项中选择

  • clean_stage

  • compile_stage

默认值:clean_stage

stage_model: clean_stage

两者

build_args

在自动生成的 Dockerfile 之上的构建参数字典。这些参数可用于 Docker 和其他命令行

list[string],可选

build_args:
  CURL_PACK: "curl"

apt_deps:
- "$CURL_PACK"

两者

apt_deps

用于 apt install 的 Debian 软件包名称列表

list[string],可选

apt_deps:
- curl
- ca-certificates
- zip=3.0-11build1

两者

pip3_deps

用于 pip3 install 的 Python 软件包名称列表。注意:用户需要在配置文件中指定 apt_deps 以安装 python3-pip

list[string],可选

pip3_deps:
- PyGObject
- PyYAML
- result

两者

resources_files

描述要复制到容器的资源文件的列表

list[string],可选

resources_files:
- resources1.yaml
- resources2.yaml

两者

local_copy_files

要从本地文件/文件夹复制到阶段镜像的目标路径的文件名列表

list[dict],可选

local_copy_files:
- src: "/opt/nvidia/graph-composer/gxe"
  dst: "/opt/nvidia/bin/"
- src: deepstream-test1 (a folder in local)
  dst: "/workspace/deepstream-test1"

两者

local_copy_files.src

在本地计算机中指定文件/文件夹名称。相对路径是相对于配置文件的路径

字符串,可选

local_copy_files:
- src: "/opt/nvidia/graph-composer/gxe"
  dst: "/opt/nvidia/bin/"
- src: deepstream-test1
  dst: "/workspace/deepstream-test1"

两者

local_copy_files.dst

在目标镜像阶段中指定绝对路径位置。如果 src 是绝对路径且 dst 为空,则 dst 将与 src 的路径相同。请阅读本节顶部关于 dst 文件夹策略的说明

字符串,可选

本地文件示例

local_copy_files:
- src: "/opt/nvidia/graph-composer/gxe"
  dst: "/opt/nvidia/graph-composer/gxe"

dst 的替代方案。

1. dst 为空

dst:

dst: "/opt/nvidia/graph-composer"

2. 本地文件夹示例

local_copy_files:
- src: "/opt/nvidia/samplefolder"
  dst: "/data/samplefolder"

两者

stage_copy_files

用于跨多个阶段和多个镜像复制文件的 StageCopyStructure 列表

list[dict],可选

stage_copy_files:
- src_stage: "nvcr.io/public/image:xxxx"
  src: "/opt/nvidia/samples"
An empty dst is same as src path

两者

stage_copy_files.src_stage

指定源文件来自的阶段名称或镜像名称

字符串,可选

stage_copy_files:
- src_stage: "nvcr.io/public/image:xxxx"
  src: "/opt/nvidia/samples"
- src_stage: "<compile_stage_name>"
  src: "/opt/nvidia/bin"

两者

stage_copy_files.sr c

在 src_stage 镜像/阶段中指定文件/文件夹名称。注意:建议使用绝对路径以避免冲突

字符串,可选

stage_copy_files:
- src_stage: "nvcr.io/public/image:xxxx"
  src: "/opt/nvidia/samples"

两者

stage_copy_files.dst

在目标阶段中指定文件/文件夹名称。

注意:建议使用绝对路径以避免冲突,空 dst 与 src 的路径相同

字符串,可选

默认值:空值与 src 的路径相同

stage_copy_files:
- src_stage: "nvcr.io/public/image:xxxx"
  src: "/opt/nvidia/samples"
  dst: "/opt/nvidia/samples"

两者

http_archives

要下载和自定义安装的 HTTP 归档结构列表。

注意:基础镜像/阶段应具有 curl/ca-certificates,否则用户需要在 apt_deps 中指定它们。归档文件下载到临时文件夹中,稍后自动清理。如果不希望自动清理文件名,用户需要为文件名指定绝对路径

list[dict],可选

http_archives:
- url: https://host/download/installer.sh
  post_cmd: "bash installer.sh"
  post_env:
    key: PATH
    value: "/root/bin:$PATH"
- url: https://host/download/sample.mp4
  filename: /opt/nvidia/video/sample.mp4

两者

http_archives.url

指定下载归档文件的 URL

字符串,http_archives 的必需项

http_archives:
- url: https://host/download/installer.sh

两者

http_archives.filename

重命名下载的文件。可以是:a. 空,解析 URL 路径中的最后一个字段作为文件名,并下载到临时文件夹中,稍后回收。b. 没有路径的文件名将使归档文件下载到临时文件夹中,稍后回收。c. 绝对路径将使归档文件下载到目标镜像上的路径,并保留在那里而不被回收。d. 不支持相对路径,会导致未定义的结果。

字符串,可选

http_archives:
- url: https://host/download/sample.mp4
  filename: /opt/nvidia/video/sample.mp4

与 ... 相同

http_archives:
- url: https://host/download/sample.mp4
  filename: sample.mp4
  post_cmd: "cp -a sample.mp4 /opt/nvidia/video/sample.mp4"

两者

http_archives.post_cmd

指定如何在阶段构建期间安装归档文件

字符串,可选

http_archives:
- url: https://host/download/installer.sh
  post_cmd: "chmod a+x installer.sh && ./installer.sh"

默认文件名为 installer.sh

两者

http_archives.post_env

指定下载并安装此归档文件后的环境设置。环境变量具有 key:string 和 value:string。键和值设置必须遵循 Linux Shell 环境变量规则

dict[key, value],可选 key:string value: string

优化环境 PATH=/root/bin:$PATH

http_archives:
- url: https://host/download/installer.sh
  post_cmd: "bash installer.sh"
  post_env:
    key: PATH
    value: "/root/bin:$PATH"

两者

http_archives.curl_option

指定下载归档文件时的额外 curl 选项(例如权限)。

字符串,可选

http_archives:
- url: https://host/download/sample.mp4
  curl_option: "-u user:token"
  filename: /data/sample.mp4

将 netrc 文件复制到镜像以供 curl 使用并在下载归档文件后删除的示例

local_copy_files:
- src: "/home/user/.netrc"
  dst: "/root/.netrc"
http_archives:
- url: https://host/download/sample.mp4
  curl_option: "-n"
  filename: /data/sample.mp4
custom_runs:
- "rm -rf /root/.netrc"

两者

git_repo_list

要克隆、下载和从源代码进行自定义构建的 Git 仓库列表。用户可以使用多阶段配置文件来构建源代码,并将二进制文件阶段复制到最终阶段

list[dict],可选

---
unique_stage: compile_1
stage_model: compile_stage
git_repo_list:
- url: https://github.com/org/project
  repo_folder: /workspace/project
  tag: master
  build_cmd: "./autogen.sh && make && make install"
---
unique_stage: final
stage_copy_files:
- src_stage: compile_1
  src: "/usr/local/bin/binary"
  dst: "/usr/bin/binary"

仅 compile_stage

git_repo_list.url

指定用于 Git 获取仓库源代码的 URL

字符串,git_repo_list 的必需项

git_repo_list:
- url: https://github.com/org/project

仅 compile_stage

git_repo_list.tag

指定要获取的 Git 仓库的确切标签/分支/提交 ID

字符串,git_repo_li st 的必需项

git_repo_list:
- url: https://github.com/org/project
  tag: master

仅 compile_stage

git_repo_list.repo_folder

在目标阶段中指定用于存储仓库文件的绝对文件夹路径

字符串,git_repo_li st 的必需项

git_repo_list:
- url: https://github.com/org/project
  tag: master
  repo_folder: /workspace/project

仅 compile_stage

git_repo_list.build_cmd

指定如何从源代码构建和安装仓库的自定义 Shell 命令行

字符串,可选

stage_model: compile_stage
git_repo_list:
- url: https://github.com/org/project
  tag: master
  repo_folder: /workspace/project
  build_cmd: "./autogen.sh && make && make install"

仅 compile_stage

ssh_key_host_copy

启用后自动将 $HOME/.ssh/ 配置 $HOME/.ssh/id_rsa 复制到编译阶段 /root/.ssh/,并 ssh-keyscan git_repo_list 中的所有主机

注意: 不建议使用,但在某些需要 SSH 密钥的 Git 仓库中可能很有用。用户应谨慎启用它,因为它可能会在编译阶段暴露私钥。

字符串,可选 默认值:false

ssh_key_host_copy: true

仅 compile_stage

work_folder

在镜像阶段中指定工作区文件夹,作为启动容器时的默认文件夹

字符串,可选

work_folder: /workspace/deepstream/

两者

custom_runs

Docker 构建结束时的一系列自定义 RUN

list[string],可选

local_copy_files:
- src: "mypackage.deb"
  dst: "/tmp/"
custom_runs:
- "dpkg -i /tmp/mypackage.deb && rm -rf /tmp/*.deb"

两者

disable_run_true

自动生成的 Dockerfile 在本地和阶段的每次复制之间都有一个 RUN true。这是一种在某些情况下解决 Docker 构建报告复制错误的变通方法。建议在 Docker 修复之前保持默认值,但仍然为用户保留更新选项。

布尔值,可选 默认值:false

disable_run_true: false

两者

env_list

在 Docker 构建结束时指定一系列自定义环境设置

list[string],可选

env_list:
  PATH: "/opt/bin/:$PATH"
  LD_LIBRARY_PATH:"/opt/lib/:$LD_LIBRARY_PATH"
  DISPLAY: ":0"

仅 clean_stage

entrypoint

为镜像指定 entrypoint 的字符串列表

list[string],可选

entrypoint: ["/opt/bin/entrypoint.sh", "param1"]

仅 clean_stage