本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
運行碼頭容器
您可以將 AWS IoT Greengrass 元件設定為從儲存在下列位置的映像執行 Docker
-
Amazon Elastic Container Registry (Amazon ECR) 中的公共和私有映像存儲庫
-
公共碼頭集線器存儲庫
-
公共碼頭信任的註冊表
-
S3 儲存貯體
在您的自訂元件中,包含 Docker 映像 URI 作為成品,以擷取映像並在核心裝置上執行。對於 Amazon ECR 和 Docker Hub 映像,您可以使用 Doc ker 應用程式管理員元件下載映像並管理私有 Amazon ECR 儲存庫的登入資料。
主題
要求
要在組件中運行 Docker 容器,您需要以下內容:
-
一個 Greengrass 核心設備。如果您沒有帳戶,請參閱 教學課程:AWS IoT Greengrass V2 入門。
-
碼頭引擎
1.9.1 或更高版本安裝在 Greengrass 核心設備上。版本 20.10 是經過驗證可與 AWS IoT Greengrass 核心軟件配合使用的最新版本。在部署執行 Docker 容器的元件之前,您必須直接在核心裝置上安裝 Docker。 提示
您也可以將核心裝置設定為在元件安裝時安裝 Docker Engine。例如,下列安裝指令碼會在載入 Docker 映像檔之前先安裝 Docker 引擎。此安裝腳本適用於基於 Debian 的 Linux 發行版,例如 Ubuntu。如果您將元件設定為使用此命令安裝 Docker Engine,您可能需要在生命週期指令碼
true
中RequiresPrivilege
將設定為,才能執行安裝和命docker
令。如需詳細資訊,請參閱 AWS IoT Greengrass 元件配方參考。apt-get install docker-ce docker-ce-cli containerd.io && docker load -i {artifacts:path}/
hello-world.tar
-
執行 Docker 容器元件的系統使用者必須具有根或系統管理員權限,或者您必須將 Docker 設定為以非 root 使用者或非管理員使用者的身分執行。
-
在 Linux 裝置上,您可以將使用者新增至
docker
群組,以便在不使用的情況下呼叫docker
指令sudo
。 -
在 Windows 裝置上,您可以將使用者新增至
docker-users
群組,以便在沒有系統管理員權限的情況下呼叫docker
命令。
-
-
由裝載為 Docker 容器容器中的磁碟區
的 Docker 容器元件存取的檔案。 -
如果您將 AWS IoT Greengrass Core 軟體設定為使用網路 Proxy,則必須將 Docker 設定為使用相同的 Proxy 伺服器
。
除了這些需求之外,如果這些需求適用於您的環境,您還必須符合下列需求:
-
若要使用 Docker 撰寫
來建立和啟動您的 Docker 容器,請在 Greengrass 核心裝置上安裝 Docker 撰寫,然後將您的碼頭撰寫檔案上傳到 S3 儲存貯體。您必須將撰寫檔案存放在 S3 儲存貯體中 AWS 帳戶 與 AWS 區域 元件相同的儲存貯體中。若要取得在自訂元件中使用 docker-compose up
指令的範例,請參閱〈〉從 Amazon ECR 或碼頭集線器中的公共映像運行碼頭容器。 -
如果您在網路代理伺服器 AWS IoT Greengrass 後方執行,請將 Docker 常駐程式設定為使用代理伺服器
。 -
如果您的 Docker 映像檔儲存在 Amazon ECR 或 Docker 集線器中,請在 Docker 容器元件中加入 Docker 元件管理員元件做為相依性。在部署元件之前,您必須在核心裝置上啟動 Docker 精靈。
此外,請將影像 URI 納入為元件加工品。影像 URI 的格式必須
docker:
如下列範例所示:registry
/image
[:tag|@digest
]-
私人 Amazon ECR 圖片:
docker:
account-id
.dkr.ecr.region
.amazonaws.com/repository
/image
[:tag|@digest
] -
公共 Amazon ECR 圖片:
docker:public.ecr.aws/
repository
/image
[:tag|@digest
] -
公共碼頭集線器映像:
docker:
name
[:tag|@digest
]
有關從存儲在公共存儲庫中的映像運行 Docker 容器的更多信息,請參閱從 Amazon ECR 或碼頭集線器中的公共映像運行碼頭容器。
-
-
如果您的 Docker 映像檔儲存在 Amazon ECR 私有儲存庫中,則您必須將權杖交換服務元件作為 Docker 容器元件的相依性包含在 Docker 容器元件中。此外,Greengrass 裝置角色必須允許
ecr:GetAuthorizationToken
、和ecr:GetDownloadUrlForLayer
動作ecr:BatchGetImage
,如下列範例 IAM 政策所示。{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ecr:GetAuthorizationToken", "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ], "Resource": [ "*" ], "Effect": "Allow" } ] }
如需從 Amazon ECR 私有儲存庫中儲存的映像執行 Docker 容器的相關資訊,請參閱。從 Amazon ECR 中的私有映像運行碼頭集裝箱
-
若要使用存放在 Amazon ECR 私有儲存庫中的 Docker 映像檔,私有存放庫必須與核心裝置位於 AWS 區域 相同。
-
如果您的 Docker 映像或撰寫檔案儲存在 S3 儲存貯體中,Greengrass 裝置角色必須允許許
s3:GetObject
可允許核心裝置將映像下載為元件成品,如下列範例 IAM 政策所示。{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetObject" ], "Resource": [ "*" ], "Effect": "Allow" } ] }
如需從 Amazon S3 中存放的映像執行 Docker 容器的相關資訊,請參閱從 Amazon S3 中的映像運行碼頭集裝箱。
-
若要在 Docker 容器元件中使用處理序間通訊 (IPC)、 AWS 認證或串流管理員,您必須在執行 Docker 容器時指定其他選項。如需詳細資訊,請參閱下列內容:
從 Amazon ECR 或碼頭集線器中的公共映像運行碼頭容器
本節說明如何建立使用碼頭構成的自訂元件,從存放 Amazon ECR 和碼頭集線器的 Docker 映像執行碼頭容器。
使用碼頭構成運行碼頭容器
-
建立碼頭撰寫檔案並將其上傳到 Amazon S3 儲存貯體。請確定 Greengrass 裝置角色允許允許裝置存取撰寫檔案的
s3:GetObject
權限。下列範例中顯示的範例撰寫檔案包括來自 Amazon ECR 的 Amazon CloudWatch 代理程式映像以及來自碼頭集線器的 MySQL 映像。version: "3" services: cloudwatchagent: image: "public.ecr.aws/cloudwatch-agent/cloudwatch-agent:latest" mysql: image: "mysql:8.0"
-
在 AWS IoT Greengrass 核心裝置上建立自訂元件。下列範例中顯示的範例配方具有下列屬性:
-
Docker 應用程序管理器組件作為依賴關係。此元件可 AWS IoT Greengrass 讓您從公有的 Amazon ECR 和碼頭集線器儲存庫下載映像檔。
-
在公用 Amazon ECR 儲存庫中指定 Docker 映像的元件成品。
-
在公用 Docker Hub 儲存庫中指定 Docker 映像檔的元件人工因素。
-
一種元件人工因素,指定 Docker 撰寫檔案,其中包含您要執行的 Docker 映像的容器。
-
一個生命週期運行腳本,使用 docker-compose 最多
從指定的映像創建和啟動容器。
注意
若要在 Docker 容器元件中使用處理序間通訊 (IPC)、 AWS 認證或串流管理員,您必須在執行 Docker 容器時指定其他選項。如需詳細資訊,請參閱下列內容:
-
-
測試元件以確認其如預期般運作。
重要
您必須先安裝並啟動 Docker 精靈,才能部署元件。
在本機部署元件之後,您可以執行 docker 容器 ls
命令來確認您的容器是否執行。 docker container ls
-
當元件準備就緒時,請將元件上傳 AWS IoT Greengrass 至部署到其他核心裝置。如需詳細資訊,請參閱 發佈元件以部署到您的核心裝置。
從 Amazon ECR 中的私有映像運行碼頭集裝箱
本節說明如何從存放在 Amazon ECR 的私有儲存庫中的 Docker 映像建立執行 Docker 容器的自訂元件。
若要執行泊塢視窗容器
-
在 AWS IoT Greengrass 核心裝置上建立自訂元件。使用下列範例配方,它具有下列屬性:
-
Docker 應用程序管理器組件作為依賴關係。此元件可 AWS IoT Greengrass 讓您管理認證,以便從專用儲存庫下載映像。
-
令牌交換服務組件作為依賴項。此元件可讓您擷 AWS IoT Greengrass 取 AWS 登入資料,以便與 Amazon ECR 互動。
-
在私有 Amazon ECR 儲存庫中指定碼頭映像的元件成品。
-
使用 docker run
從映像建立和啟動容器的生命週期執行指令碼。
注意
若要在 Docker 容器元件中使用處理序間通訊 (IPC)、 AWS 認證或串流管理員,您必須在執行 Docker 容器時指定其他選項。如需詳細資訊,請參閱下列內容:
-
-
測試元件以確認其如預期般運作。
重要
您必須先安裝並啟動 Docker 精靈,才能部署元件。
在本機部署元件之後,您可以執行 docker 容器 ls
命令來確認您的容器是否執行。 docker container ls
-
將元件上傳 AWS IoT Greengrass 至部署至其他核心裝置。如需詳細資訊,請參閱 發佈元件以部署到您的核心裝置。
從 Amazon S3 中的映像運行碼頭集裝箱
本節說明如何從存放在 Amazon S3 中的 Docker 映像執行元件中的 Docker 容器。
從 Amazon S3 中的映像執行元件中的 Docker 容器
-
運行 docker 保存
命令來創建一個 Docker 容器的備份。您可以將此備份提供為元件加工品,以便在其上執行容器 AWS IoT Greengrass。以映像 檔的名稱取代您的世界
,並將hello-world.tar
取代為要建立的封存檔案的名稱。docker save
hello-world
>artifacts/com.example.MyDockerComponent/1.0.0/hello-world.tar
-
在 AWS IoT Greengrass 核心裝置上建立自訂元件。使用下列範例配方,它具有下列屬性:
-
一種生命週期安裝腳本,使用碼 docker 加
載從歸檔中加載 Docker 映像。 -
使用 docker run
從映像建立和啟動容器的生命週期執行指令碼。 --rm
此選項會在容器結束時清除容器。
注意
若要在 Docker 容器元件中使用處理序間通訊 (IPC)、 AWS 認證或串流管理員,您必須在執行 Docker 容器時指定其他選項。如需詳細資訊,請參閱下列內容:
-
-
測試元件以確認其如預期般運作。
在本機部署元件之後,您可以執行 docker 容器 ls
命令來確認您的容器是否執行。 docker container ls
-
當元件準備就緒時,請將 Docker 映像存檔上傳到 S3 儲存貯體,並將其 URI 新增至元件方案。然後,您可以將元件上傳 AWS IoT Greengrass 到部署到其他核心裝置。如需詳細資訊,請參閱 發佈元件以部署到您的核心裝置。
當您完成時,組件配方應如下列範例所示。
在 Docker 容器組件中使用進程間通信
您可以使用中的 Greengrass 處理序間通訊 (IPC) 程式庫與 Greengrass 核心、其他 Greengrass 元件和通訊。 AWS IoT Device SDK AWS IoT Core如需詳細資訊,請參閱 使 AWS IoT Device SDK 用與 Greengrass 核、其他元件和通訊 AWS IoT Core。
若要在 Docker 容器元件中使用 IPC,您必須使用下列參數執行 Docker 容器:
-
將 IPC 插槽安裝在容器中。Greengrass 核在環境變量中提供了 IPC 套接字文件路徑。
AWS_GG_NUCLEUS_DOMAIN_SOCKET_FILEPATH_FOR_COMPONENT
-
將
SVCUID
和AWS_GG_NUCLEUS_DOMAIN_SOCKET_FILEPATH_FOR_COMPONENT
環境變量設置為 Greengrass 核提供給組件的值。您的組件使用這些環境變量來驗證與 Greengrass 核的連接。
範例 方法範例:將 MQTT 訊息發佈至 AWS IoT Core (Python)
下列方案定義了將 MQTT 訊息發佈至的範例 Docker 容器元件。 AWS IoT Core此配方具有下列屬性:
-
一種授權原則 (
accessControl
),可讓元件 AWS IoT Core 在所有主題上將 MQTT 訊息發佈至。如需詳細資訊,請參閱授權元件執行 IPC 作業和 AWS IoT Core MQTT I PC 授權。 -
在 Amazon S3 中將 Docker 映像指定為 TAR 存檔的元件成品。
-
從 TAR 歸檔載入 Docker 映像檔的生命週期安裝指令碼。
-
從映像執行 Docker 容器的生命週期執行指令碼。碼頭運行
命令具有以下參數: -
該
-v
參數掛載 Greengrass IPC 套接字在容器中。 -
前兩個
-e
引數會在 Docker 容器中設定必要的環境變數。 -
其他
-e
引數會設定此範例所使用的環境變數。 -
該
--rm
參數在退出時清理容器。
-
在碼頭容器組件中使用 AWS 憑據(Linux)
您可以使用權杖交換服務元件與 Greengrass 元件中的 AWS 服務進行互動。此元件會使用本機容器伺服器,從核心裝置的 Token 交換角色提供 AWS 認證。如需詳細資訊,請參閱 與AWS服務互動。
注意
本節中的範例僅適用於 Linux 核心裝置。
若要在 Docker 容器元件中使用權杖交換服務的 AWS 認證,您必須使用下列參數執行 Docker 容器:
-
使用
--network=host
引數提供對主機網路的存取。此選項可讓 Docker 容器連線至本機權杖交換服務,以擷取 AWS 認證。這個論點僅適用於 Linux 的泊塢窗。警告
此選項可讓容器存取主機上的所有區域網路介面,因此此選項比在沒有主機網路存取權的情況下執行 Docker 容器的安全性較低。當您開發並執行使用此選項的 Docker 容器元件時,請考慮這一點。如需詳細資訊,請參閱 Docker 文件中的網路:主機
。 -
將
AWS_CONTAINER_CREDENTIALS_FULL_URI
和AWS_CONTAINER_AUTHORIZATION_TOKEN
環境變量設置為 Greengrass 核提供給組件的值。 AWS SDK 使用這些環境變數來擷取 AWS 認證。
範例配方:列出碼頭容器元件 (Python) 中的 S3 儲存貯體
下列方法定義範例 Docker 容器元件,該元件會列出您 AWS 帳戶的. 此配方具有下列屬性:
-
令牌交換服務組件作為依賴項。此相依性可讓元件擷取 AWS 認證,以便與其他 AWS 服務互動。
-
在 Amazon S3 中將 Docker 映像指定為 tar 存檔的元件成品。
-
從 TAR 歸檔載入 Docker 映像檔的生命週期安裝指令碼。
-
從映像執行 Docker 容器的生命週期執行指令碼。碼頭運行
命令具有以下參數: -
該
--network=host
引數提供了對主機網絡的容器訪問,因此容器可以連接到令牌交換服務。 -
-e
引數會在 Docker 容器中設定必要的環境變數。 -
該
--rm
參數在退出時清理容器。
-
在碼頭容器組件中使用流管理器(Linux)
您可以使用串流管理員元件來管理 Greengrass 元件中的資料串流。此元件可讓您處理資料串流,並將大量 IoT 資料傳輸至. AWS 雲端 AWS IoT Greengrass 提供您用來與串流管理員元件互動的串流管理員 SDK。如需詳細資訊,請參閱 管理核心裝 Greengrass 資料串流。
注意
本節中的範例僅適用於 Linux 核心裝置。
若要在 Docker 容器元件中使用串流管理員 SDK,您必須使用下列參數執行 Docker 容器:
-
使用
--network=host
引數提供對主機網路的存取。此選項可讓 Docker 容器透過本機 TLS 連線與串流管理員元件互動。這個參數只適用於 Linux 的碼頭工具警告
此選項可讓容器存取主機上的所有區域網路介面,因此此選項比在沒有主機網路存取權的情況下執行 Docker 容器的安全性較低。當您開發並執行使用此選項的 Docker 容器元件時,請考慮這一點。如需詳細資訊,請參閱 Docker 文件中的網路:主機
。 -
如果您將串流管理員元件設定為需要驗證 (這是預設行為),請將
AWS_CONTAINER_CREDENTIALS_FULL_URI
環境變數設定為 Greengrass 核心提供給元件的值。如需詳細資訊,請參閱串流管理員組態。 -
如果您將串流管理員元件設定為使用非預設連接埠,請使用處理序間通訊 (IPC),從串流管理員元件組態取得連接埠。您必須使用其他選項來執行 Docker 容器,才能使用 IPC。如需詳細資訊,請參閱下列內容:
範例 方法範例:將檔案串流至碼頭容器元件 (Python) 中的 S3 儲存貯體
下列方法定義了建立檔案並將其串流至 S3 儲存貯體的範例 Docker 容器元件。此配方具有下列屬性:
-
流管理器組件作為依賴關係。這種依賴關係使組件能夠使用流管理器 SDK 與流管理器組件進行交互。
-
在 Amazon S3 中將 Docker 映像指定為 TAR 存檔的元件成品。
-
從 TAR 歸檔載入 Docker 映像檔的生命週期安裝指令碼。
-
從映像執行 Docker 容器的生命週期執行指令碼。碼頭運行
命令具有以下參數: -
該
--network=host
引數提供了對主機網絡的容器訪問,因此容器可以連接到流管理器組件。 -
第一個
-e
引數會在 Docker 容器中設定所需的AWS_CONTAINER_AUTHORIZATION_TOKEN
環境變數。 -
其他
-e
引數會設定此範例所使用的環境變數。 -
-v
引數會在容器中掛載元件的工作資料夾。此範例會在工作資料夾中建立一個檔案,以使用串流管理員將該檔案上傳到 Amazon S3。 -
該
--rm
參數在退出時清理容器。
-