基于 Incredibuild Docker 镜像启动容器

一旦主机上存储了 Incredibuild 镜像后,需使用 docker run 命令来运行镜像并基于该镜像启动容器。

> 如要作为容器运行 Incredibuild 镜像,请执行以下步骤:

  • 在 PowerShell 或终端中,输入下列命令,以基于 Incredibuild 镜像启动容器:

    复制
    docker run --cpus <Max_No._of_Cores_to_Use> 
    -e Coordinator=<Coordinator_Machine_IP_Adddress_or_Hostname> 
    -e CoordinatorPort=<Coordinator_Port_No.> 
    -e BuildServicePort=<Agent_Port_No._for_Coordinator_Communication>
    -e BuildHelperPort=<First_Agent_Port_No._in_a_Range_for Communicating_with_the_Agent_Cores>" 
    -it 
    -p <Host_Machine_Port_No._mapped to>:<BuildServicePort No._in the_Container>/tcp 
    -p <Start-End_Port_Range_in the Host_Machine_mapped_to>:
    <Start-End_Port_Range_for_the_Agent_Cores_in_the Container>/tcp 
    <IncrediBuild_Image>  

其中:

  • --cpus [可选] – 容器化 Agent 可使用的最大 CPU 内核数。默认最大内核数为 2。如果未指定内核数,则将使用默认数字。例如,如果您想让 Agent 使用 8 个或更少的内核,则输入:--cpus 8。设置该 CPU 内核数时,应考虑主机具有的 CPU 内核数量、您想将这些可用内核中的多少内核分配给容器、其他 Incredibuild 容器是否将在此主机上运行。

  • -e Coordinator= [强制] – 将与容器 Agent 通信的 Coordinator 的 IP 地址或主机名。例如,如要将 Agent 连接至 IP 地址为 172.0.0.0 的 Coordinator,则输入:-e Coordinator=172.0.0.0

  • -e CoordinatorPort= [可选] – 与 Agent 通信的 Coordinator 端口号。默认情况下,Coordinator 端口号为31104。如果未规定其他端口号,则使用默认端口号。例如,如要使用 Coordinator 机器上的端口 20001 与 Agent 通信,则输入:-e CoordinatorPort=20001

  • -e BuildServicePort= [可选] – 与 Coordinator 通信的 Agent 端口号。默认情况西,Agent 的 BuildService 端口号为 31105。如果未规定其他端口号,则使用默认端口号。例如,如要将容器上的端口 40001 分配用于 Agent 与 Coordinator 之间的通信,则输入:-e BuildServicePort=40001

  • -e BuildHelperPort= [可选] – 端口范围内的第一个 Agent 端口号,用于 Initiator 和容器 Agent 内核之间的通信。对于容器化 Agent 内的每一个可用内核,一个连续端口号应是开放且可用的。例如,如果端口范围内的第一个端口号是 32000,且 Agent 有 4 个内核,则另外 3 个端口应为 32001、32002、32003。默认情况下,Agent 的 BuildHelper 端口号为 31106。如果未规定其他端口号,如果未规定其他端口号,则使用默认端口号。端口范围内的可用 Agent 内核数取决于 --cpus 参数的值。例如,如要在容器上分配端口 32000-32003 用于与容器化 Agent 的 4 个内核的通信,可输入: -e BuildHelperPort=32000

  • -it [强制] – 一个通用的 docker 运行选项,允许您登录使用 TTY 的容器,即:终端,并防止容器在启动后立即退出。

  • -p <Host_Machine_Port_No._mapped to>:<BuildServicePort No.>/tcp[强制] - 主机中的一个物理开放端口与端口号的映射。容器中 BuildServicePort 端口的映射。为了与 Coordinator 进行通信,容器中的 Agent 需要一个开放端口。该端口应映射到主机的一个开放端口,以启用与 Coordinator 机器的通信。主机和容器上的这些端口号不必相同。例如,对于与 Coordinator 的通信来说,需要将主机上的端口 30044 映射到容器上的端口 40001,可输入:-p 30044:40001/tcp注意:如果您没有为 BuildService 指定端口号,且使用了默认端口号,则需要输入默认端口号31105。例如,-p 30044:31105/tcp

  • -p <Start-End_Port_Range_in the Host_Machine_mapped_to>:<Start-End_Port_Range_for_the_Agent_Cores_in_the Container>/tcp -主机中的物理端口范围与容器中 BuildServicePort 的端口范围的映射。对于 Initiator 和容器化 Agent 内核之间的通信,需要在容器中开放一个端口范围,且该端口范围应映射到主机内的端口范围,以启用通信。主机和容器上的这些端口号必须相同。例如,对于与容器化 Agent 的 4 个内核的通信,需要将主机上的端口范围 32000-32003 映射到容器上的端口范围 32000-32003,可输入:-p 32000-32003:32000-32003/tcp注意:如果您没有如果您没有为 BuildHelper 指定端口号,且使用了默认都那口好,则需要输入默认端口号 31106,作为容器中端口范围内的第一个端口号。例如,-p 31106-31109:31106-31109/tcp

  • <Incredibuild_Image> [强制] - 下载到机器上的 Incredibuild 镜像名称。例如,Incredibuild:9.5.0

例如,在终端中输入下列命令,以启动具有已激活的 Agent 的 Incredibuild 容器:

复制
docker run --cpus 4 
-e Coordinator=IncrediBuild1 
-e CoordinatorPort=31104 
-e BuildServicePort=31105 
-e BuildHelperPort=31106 
-it 
-p 31105:31105/tcp 
-p 31106-31109:31106-31109/tcp 
incredibuild/9.5.0

在此例中:

  • --cpus – 容器化 Agent 可以使用的最小内核数为 4

  • -e Coordinator= – Agent 将与主机名为 Incredibuild1 的 Coordinator 通信。

  • -e CoordinatorPort= – 与 Agent 通信的 Coordinator 端口号为 31104

  • -e BuildServicePort= – 与 Coordinator 通信的 Agent 端口号为 31105

  • -e BuildHelperPort= – 用来与 Agent 内核通信的端口范围内的第一个 Agent 端口号为 31106。由于 Agent 最多可以使用 4 个内核,所以容器中应开放另外 3 个连续端口:311073110831109

  • -it - 使用 TTY 登录容器的通用 docker run 选项。

  • -p 31105:31105/tcp – 主机上的端口号 31105 映射到容器上的端口号 31105,用于容器化 Agent 与 Coordinator 之间的通信。

  • -p 31106-31109:31106-31109/tcp – 主机上的端口范围 31106-31109 映射到容器上的端口范围 31106-31109,用于容器化 Agent 内核与 Initiator 之间的通信。

  • <Incredibuild_Image> – 用于启动容器的 Incredibuild 镜像为 Incredibuild/9.5.0

输出:

复制
Setting Coordinator to IncrediBuild1
Setting Coordinator Port to 31104
Setting BuildService Port to 31105
Setting BuildHelper Port to 31106
Starting IncrediBuild Agent Service

容器启动后,新的激活后的容器化 Agent 将被添加到 Incredibuild Environment。这个新 Agent 订阅了 Coordinator,其详细信息已输入 docker run 命令中,并显示在 Coordinator Monitor 中:

说明

  • 容器化 Agent 名称基于容器 ID 和主机名。如果您想为容器化 Agent 设定一个有意义的名称,可使用 --hostname Docker 选项为您的容器指定一个内部主机名,该主机名将显示在容器化 Agent 名称中。

  • 如果您想将容器化 Agent 用作 Initiator,则应考虑到容器与其主机已隔离,因此不能依赖主机文件系统和安装环境。例如,如果您想从容器化 Agent 构建一个 Visual Studio 项目,则需要在容器上安装 Visual Studio,并将项目复制到容器,以便从容器运行项目。

  • 如果您停止、删除或终止 Incredibuild 容器,则应注意,已分配给容器化 Agent 的许可证不会自动释放到您的许可证池。如果您想解除分配给容器化 Agent 的许可证,以便稍后将其重新分配给不同的 Agent,则需要像对任何其他 Agent 一样 Unsubscribe(取消订阅)该 Agent,如下所述。

> 如要解除分配容器化 Agent 的许可证,请执行以下步骤:

  • 在 Coordinator Monitor 中,选择并右键单击容器化 Agent。从弹出菜单中,选择 Unsubscribe 选项:注意:您也可以打开 Coordinator Monitor 中的 Agent 菜单,并选择 Unsubscribe 选项。

    已分配给 Agent 的许可证将返回您的许可证池,而容器化 Agent 将从 Coordinator Monitor 删除。