Container Builder#
Container Builder (CB) 用于为使用 Composer 创建的 AI 应用程序图构建 Docker 镜像。除了 Docker 镜像,它还可以将最终镜像推送到云端进行部署。
Container Builder 与 Registry 交互:用于
将扩展和其他相关文件下载到您的本地系统。
复制配置文件中指定的其他必需文件,以生成中间工作文件夹和优化的 Dockerfile。
将归档文件/软件包依赖项和指令转换为 Docker,并尝试构建最小尺寸的本地镜像。为了优化,您可以轻松配置 Container Builder 以支持多阶段 Docker 构建。

Container Builder 支持在 x86 Ubuntu 系统上安装图和构建容器镜像。它还可以从 x86_64 平台构建 arm64 镜像 - 为此,您需要安装 QEMU 和 bintutils
。
先决条件#
安装正确的 Docker 版本 https://docs.docker.net.cn/engine/install/ubuntu/
登录您可能需要拉取/推送镜像的服务器。运行
$ docker login server:port
如果您需要 NGC 镜像和资源,请按照 https://ngc.nvidia.com/setup/api-key 申请权限并获取 API_KEY 令牌。然后运行,
$ docker login nvcr.io
某些功能(例如 squash)可能需要 Docker 实验性支持。要启用该功能,请更新
/etc/docker/daemon.json
并添加{ "experimental": true }
然后通过运行以下命令重启 Docker
$ sudo systemctl restart docker
如果您想从 x86_64 平台构建 ARM Docker 镜像,则需要安装 QEMU 和 binfmt。可能需要重启操作系统。
$ 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
安装 Graph Composer 软件包。确保已安装
container_builder
可执行二进制文件。
Container Builder 功能#
镜像构建基于 Docker build。Container Builder 提供不同的阶段模型来构建镜像。有 compile_stage 和 clean_stage 模型供用户选择。某些功能仅适用于一个阶段。有关更多详细信息,请参阅功能表。
功能 |
描述 |
阶段 (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
可以是 x86
或 aarch64
$ 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 配置文件构建容器并执行容器的基本步骤集。
更新配置文件以开始构建。打开
/opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test1/ds_test1_container_builder_dgpu.yaml
为
graph_files
指定具有正确 DeepStream SDK 版本的正确基础镜像。如果未指定基础镜像,Container Builder 将尝试从/opt/nvidia/graph-composer/container_builder.yaml
中的预定义基础镜像池中自动选择。将选择与图目标最匹配的容器base_image: "nvcr.io/nvidia/deepstream:x.x-x"
在
docker_build
部分中指定输出镜像名称docker_build: image_name: deepstream_test1_dgpu:nvgcb_test
通过在终端中运行以下命令,确保 gxf 服务器已启动
$ systemctl --user status gxf_server
用户还可以通过设置环境变量
GXF_SERVER_PORT
在不同的端口上运行gxf_server
。目前,Container Builder CLI 仅支持本地运行gxf_server
,而基于 Windows 的用户或基于 GUI 的 Graph Composer 用户可以设置远程地址以连接到远程运行的gxf_server
。运行 Container Builder 工具以构建镜像
$ container_builder build -c ds_test1_container_builder_dgpu.yaml -d x86 -wd /opt/nvidia/deepstream/deepstream/reference_graphs/deepstream-test1/
验证容器中的镜像和图,使用配置文件中的镜像
$ 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 文档部分。
Container Builder 主控制部分 - 用户可以使用它指定图安装选项、构建/推送选项和其他主机端控制选项。每个配置文件只能有一个带有键字段 container_builder: name 的控制部分
Container Dockerfile 阶段部分 - 所有部分都将转换为 Dockerfile。用户可以指定多个阶段部分。有 2 个模型模板用于不同的阶段。
clean_stage 模型:如果未指定,则这是默认模型。输出容器镜像必须具有 clean_stage 部分作为最终阶段。用户应尽可能保持最终阶段的清洁。
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: 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 的网络模式 |
字符串,可选 默认值为 |
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 取决于实际源路径。
字段 |
描述 |
类型和范围 |
示例注释 |
阶段 compile_stage / clean_stage |
target |
图目标键,对应于注册表在图安装期间使用的目标配置 |
字符串,可选 从以下选项中选择
|
target: x86
|
两者 |
unique_stage |
当前阶段的唯一名称,也用于 Dockerfile 目标名称 |
字符串,必需 |
unique_stage: final_image
|
两者 |
base_image |
指定当前目标阶段所基于的阶段名称或远程/本地镜像。 |
字符串,可选 |
base_image: "ubuntu:22.04"
用于基于指定依赖项自动选择 base_image: "auto"
|
两者 |
platform |
如果基础镜像在多个平台中具有相同的名称,则指定基础镜像的平台 |
字符串,可选 从以下选项中选择
默认值:linux/amd64 |
platform: linux/amd64
|
两者 |
stage_model |
配置文件将用于构建此阶段的 stage_model |
字符串,可选 从以下选项中选择
默认值: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 |
启用后自动将 注意: 不建议使用,但在某些需要 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 |