

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 從 Dockerfile 建置 AWS IoT Greengrass 容器映像
<a name="build-greengrass-dockerfile"></a>

AWS 提供 Dockerfile，您可以下載並使用它在 Docker 容器中執行 AWS IoT Greengrass Core 軟體。Dockerfiles 包含用於建置 AWS IoT Greengrass 容器映像的原始碼。

在建置 AWS IoT Greengrass 容器映像之前，您必須設定 Dockerfile 以選取您要安裝 AWS IoT Greengrass 的核心軟體版本。您也可以設定環境變數，以選擇如何在安裝期間佈建資源，並自訂其他安裝選項。本節說明如何從 AWS IoT Greengrass Dockerfile 設定和建置 Docker 映像。



## 下載 Dockerfile 套件
<a name="download-dockerfile-package"></a>

您可以從 GitHub 下載 AWS IoT Greengrass Dockerfile 套件：

[AWS Greengrass Docker 儲存庫](https://github.com/aws-greengrass/aws-greengrass-docker)

下載套件之後，請將內容解壓縮到電腦上的 `download-directory/aws-greengrass-docker-nucleus-version` 資料夾。Dockerfile 使用較舊版本的 Greengrass。您應該更新 檔案，以使用您想要的 Greengrass 版本。

## 指定 AWS IoT Greengrass 核心軟體版本
<a name="set-dockerfile-build-argument"></a>

在 Dockerfile 中使用下列建置引數，指定您要在 Docker AWS IoT Greengrass 映像中使用的 AWS IoT Greengrass Core 軟體版本。根據預設，Dockerfile 會使用最新版本的 AWS IoT Greengrass Core 軟體。

`GREENGRASS_RELEASE_VERSION`  
Core AWS IoT Greengrass 軟體的版本。根據預設，Dockerfile 會下載 Greengrass 核的最新可用版本。將 值設定為您要下載的 nucleus 版本。

## 設定環境變數
<a name="set-dockerfile-environment-variables"></a>

環境變數可讓您自訂 AWS IoT Greengrass Core 軟體在 Docker 容器中的安裝方式。您可以透過各種方式設定 Docker AWS IoT Greengrass 映像的環境變數。
+ 若要使用相同的環境變數來建立多個映像，請直接在 Dockerfile 中設定環境變數。
+ 如果您使用 `docker run` 啟動容器，請在 命令中將環境變數做為引數傳遞，或在環境變數檔案中設定環境變數，然後將檔案做為引數傳遞。如需在 Docker 中設定環境變數的詳細資訊，請參閱 Docker 文件中的[環境變數](https://docs.docker.com/engine/reference/commandline/run/#env)。
+ 如果您使用 `docker-compose up` 啟動容器，請在環境變數檔案中設定環境變數，然後將檔案做為引數傳遞。如需在 Compose 中設定環境變數的詳細資訊，請參閱 [Docker 文件](https://docs.docker.com/compose/environment-variables/)。

您可以為 Docker AWS IoT Greengrass 映像設定下列環境變數。

**注意**  
請勿修改 Dockerfile 中的`TINI_KILL_PROCESS_GROUP`變數。此變數允許轉送`SIGTERM`至 PIDs 群組中的所有 PID，以便在 Docker 容器停止時 AWS IoT Greengrass ，核心軟體可以正確關閉。

`GGC_ROOT_PATH`  
（選用） 容器內資料夾的路徑，做為 AWS IoT Greengrass Core 軟體的根目錄。  
預設：`/greengrass/v2`

`PROVISION`  
（選用） 判斷 AWS IoT Greengrass 核心是否佈建 AWS 資源。  
+ 如果您指定 `true`， AWS IoT Greengrass Core 軟體會將容器映像註冊為 AWS IoT 物件，並佈建 Greengrass 核心裝置所需的 AWS 資源。Core AWS IoT Greengrass 軟體會佈建 AWS IoT 物件、 （選用） AWS IoT 物件群組、IAM 角色和 AWS IoT 角色別名。如需詳細資訊，請參閱[AWS IoT Greengrass 在具有自動資源佈建的 Docker 容器中執行](run-greengrass-docker-automatic-provisioning.md)。
+ 如果您指定 `false`，則必須建立組態檔案，以提供給 AWS IoT Greengrass 核心安裝程式，指定 使用您手動建立 AWS 的資源和憑證。如需詳細資訊，請參閱[AWS IoT Greengrass 在具有手動資源佈建的 Docker 容器中執行](run-greengrass-docker-manual-provisioning.md)。
預設：`false`

`AWS_REGION`  
（選用） AWS IoT Greengrass 核心軟體用來擷取或建立必要 AWS 資源 AWS 區域 的 。  
預設：`us-east-1`。

`THING_NAME`  
（選用） 您註冊為此核心裝置的 AWS IoT 物件名稱。如果您的 中不存在具有此名稱的物件 AWS 帳戶，則 AWS IoT Greengrass Core 軟體會建立它。  
您必須指定 `PROVISION=true`才能套用此引數。  
預設：`GreengrassV2IotThing_`加上隨機 UUID。

`THING_GROUP_NAME`  
（選用） 您新增此核心裝置的 AWS IoT AWS IoT 物件群組名稱 如果部署以此物件群組為目標，則該群組中的此和其他核心裝置會在其連線時接收該部署 AWS IoT Greengrass。如果您的 中不存在具有此名稱的物件群組 AWS 帳戶，則 AWS IoT Greengrass Core 軟體會建立它。  
您必須指定 `PROVISION=true`才能套用此引數。

`TES_ROLE_NAME`  
（選用） IAM 角色的名稱，用來取得可讓 Greengrass 核心裝置與 AWS 服務互動的 AWS 登入資料。如果您的 中不存在具有此名稱的角色 AWS 帳戶，則 AWS IoT Greengrass Core 軟體會使用 `GreengrassV2TokenExchangeRoleAccess`政策建立該角色。此角色無法存取託管元件成品的 S3 儲存貯體。因此，您必須在建立元件時，將許可新增至成品的 S3 儲存貯體和物件。如需詳細資訊，請參閱[授權核心裝置與 AWS 服務互動](device-service-role.md)。  
預設：`GreengrassV2TokenExchangeRole`

`TES_ROLE_ALIAS_NAME`  
（選用） 指向為 Greengrass 核心裝置提供 AWS 登入資料之 IAM 角色 AWS IoT 的角色別名名稱。如果您的 中不存在具有此名稱的角色別名 AWS 帳戶，則 AWS IoT Greengrass Core 軟體會建立它，並將其指向您指定的 IAM 角色。  
預設：`GreengrassV2TokenExchangeRoleAlias`

`COMPONENT_DEFAULT_USER`  
（選用） AWS IoT Greengrass 核心軟體用來執行元件之系統使用者和群組的名稱或 ID。指定使用者和群組，以冒號分隔。群組為選用項目。例如，您可以指定 **ggc\$1user:ggc\$1group** 或 **ggc\$1user**。  
+ 如果您以根身分執行，這會預設為組態檔案定義的使用者和群組。如果組態檔案未定義使用者和群組，則預設為 `ggc_user:ggc_group`。如果 `ggc_user`或`ggc_group`不存在，軟體會建立它們。
+ 如果您以非根使用者身分執行 ， AWS IoT Greengrass Core 軟體會使用該使用者來執行元件。
+ 如果您未指定群組，則 AWS IoT Greengrass Core 軟體會使用系統使用者的主要群組。
如需詳細資訊，請參閱[設定執行元件的使用者](configure-greengrass-core-v2.md#configure-component-user)。

`DEPLOY_DEV_TOOLS`  
定義是否要在容器映像中下載和部署 [Greengrass CLI 元件](greengrass-cli-component.md)。您可以使用 Greengrass CLI 在本機開發和偵錯元件。  
 <a name="local-dev-tools-production-environment-warning"></a>建議您僅在開發環境中使用此元件，而非生產環境中。此元件可讓您存取生產環境中通常不需要的資訊和操作。僅將此元件部署到您需要的核心裝置，以遵循最低權限原則。
預設：`false`

`INIT_CONFIG`  
（選用） 用於安裝 AWS IoT Greengrass Core 軟體的組態檔案路徑。您可以使用此選項來設定具有特定核心組態的新 Greengrass 核心裝置，或指定手動佈建的資源，例如 。您必須將組態檔案掛載至您在此引數中指定的路徑。

`TRUSTED_PLUGIN`  
此功能適用於 [Greengrass 核元件](greengrass-nucleus-component.md)的 v2.4.0 和更新版本。  
（選用） 要載入為信任外掛程式的 JAR 檔案路徑。使用此選項提供佈建外掛程式 JAR 檔案，例如使用[機群佈建](fleet-provisioning.md)或[自訂佈建](custom-provisioning.md)安裝 。

`THING_POLICY_NAME`  
此功能適用於 [Greengrass 核元件](greengrass-nucleus-component.md)的 v2.4.0 和更新版本。  
（選用） 要連接到此核心裝置 AWS IoT 物件憑證 AWS IoT 的政策名稱。如果具有此名稱 AWS IoT 的政策不存在 AWS 帳戶 於您的 AWS IoT Greengrass Core 軟體中。  
您必須指定 `PROVISION=true`才能套用此引數。  
Core AWS IoT Greengrass 軟體預設會建立寬鬆 AWS IoT 政策。您可以縮小此政策的範圍，或建立自訂政策，以限制使用案例的許可。如需詳細資訊，請參閱[AWS IoT Greengrass V2 核心裝置的最低 AWS IoT 政策](device-auth.md#greengrass-core-minimal-iot-policy)。

## 指定要安裝的相依性
<a name="dockerfile-run-instruction"></a>

Dockerfile 中的 RUN AWS IoT Greengrass 指令會準備容器環境來執行 AWS IoT Greengrass Core 軟體安裝程式。您可以自訂 AWS IoT Greengrass Core 軟體安裝程式在 Docker 容器中執行之前安裝的相依性。

## 建置 AWS IoT Greengrass 映像
<a name="build-greengrass-docker-image"></a>

使用 AWS IoT Greengrass Dockerfile 建置 AWS IoT Greengrass 容器映像。您可以使用 Docker CLI 或 Docker Compose CLI 來建置映像並啟動容器。您也可以使用 Docker CLI 建置映像，然後使用 Docker Compose 從該映像啟動容器。

------
#### [ Docker ]

1. 在主機電腦上，執行下列命令來切換到包含已設定 Dockerfile 的目錄。

   ```
   cd download-directory/aws-greengrass-docker-nucleus-version
   ```

1. 執行下列命令，從 Dockerfile 建置 AWS IoT Greengrass 容器映像。

   ```
   sudo docker build -t "platform/aws-iot-greengrass:nucleus-version" ./
   ```

------
#### [ Docker Compose ]

1. 在主機電腦上，執行下列命令來切換到包含 Dockerfile 和 Compose 檔案的目錄。

   ```
   cd download-directory/aws-greengrass-docker-nucleus-version
   ```

1. 執行下列命令，使用 Compose 檔案來建置 AWS IoT Greengrass 容器映像。

   ```
   docker-compose -f docker-compose.yml build
   ```

------

您已成功建立 AWS IoT Greengrass 容器映像。Docker 映像檔已安裝 AWS IoT Greengrass 核心軟體。您現在可以在 Docker 容器中執行 AWS IoT Greengrass Core 軟體。