在 SpotCORE 中配置 Docker 容器
前言大綱
Spot 的計算能力可以通過安裝在機器人上的額外計算有效載荷來擴展。波士頓動力提供 Spot CORE 和 Spot CORE AI 計算負載,但用戶也可以附加其他類型的計算負載。本文檔描述瞭如何配置軟件以在這些計算負載上運行。大多數說明描述瞭如何在 Spot CORE 上管理自定義軟件的步驟,但這些步驟也適用於其他計算負載。
計算有效載荷的目的是在機器人上運行自定義軟件應用程序,這些應用程序與機器人軟件系統和附加到 Spot 的其他有效載荷進行交互。對於 Spot CORE,我們建議使用提供的 docker 框架來安裝、配置和運行自定義軟件。本文檔在 Create Docker Images section 描述瞭如何創建 docker images,以及如何在 Manage Docker Containers 部分以兩種不同的方式管理 Spot CORE 中的 docker 容器或其他計算負載。 Portainer section 部分介紹瞭如何使用 Portainer 來管理 docker 容器。此功能是 Spot 版本 2.1 中的新增功能。 Command-line section 命令行部分描述瞭如何使用命令行工具,例如 scp、ssh 和 docker CLI(命令行界面 Command Line Interface)在計算負載中運行 docker 容器。
多個 Spot SDK 示例支持 dockerization 並作為 docker 容器運行。下面列出了主要示例,但通過複製以下示例中的 docker 配置,可以輕鬆地將所有其他示例配置為作為 docker 容器運行。
- 數據採集插件 Data Acquisition Plugins
- Ricoh Theta
- 檢測和跟踪 Spot Detect and Follow
- 網絡攝像頭圖像服務 Web Cam Image Service
創建 Docker Images
第一步是使用軟件應用程序及其依賴項創建 docker image。 Docker 容器依賴於 images 鏡像,並使用它們來構建運行時環境並運行應用程序。創建 docker image 鏡像的指令在一個文件中指定,通常命名為 Dockerfile。 Dockerfile 指定從什麼基礎 docker image 開始,在基礎鏡像之上安裝哪些額外的軟件和函式庫,以及在容器啟動時需要運行哪些軟件。上面列出的所有 Spot SDK 示例都包含一個 Dockerfile。
構建 Docker Images
用於運行帶有軟件組件的容器的 docker 鏡像可以使用以下命令構建並保存到 tar 文件中,其中 {IMAGE_NAME} 表示所需的 docker 鏡像名稱。
sudo docker build -t {IMAGE_NAME} .
sudo docker save {IMAGE_NAME} > {IMAGE_NAME}.tar
在本地測試 Docker 鏡像
在計算負載上配置和運行 docker 容器之前,我們建議先在本地環境中測試容器,例如在開發筆記本電腦上。 要啟動 docker 容器及其配置的軟件應用程序,請運行:
sudo docker run -it --network=host {IMAGE_NAME} {ROBOT_IP} {APPLICATION ARGUMENTS}
哪裡是:
- {IMAGE_NAME} 表示構建步驟中指定的 docker 鏡像的名稱。
- {ROBOT_IP} 代表 Spot 機器人的 IP(如果連接到機器人的 wifi,則為 192.168.80.3)。
- {APPLICATION ARGUMENTS} 表示在 docker 容器中運行的應用程序將其作為輸入的任何其他參數。大多數與機器人上運行的服務通信的軟件應用程序都需要以下參數 --guid {PAYLOAD_GUID} --secret {PAYLOAD_SECRET} --host-ip {LOCAL_IP}。某些軟件應用程序可能會使用 --username\--password 組合來驗證機器人而不是 --guid\--secret 這些參數代表:
- {PAYLOAD_GUID} 表示負載 GUID。如何註冊無質量負載並使用示例負載的 GUID 進行測試,請參閱 Spot SDK 中的 Python 負載註冊代碼示例 。對於在專用負載(例如 Spot CORE 或其他計算負載)上運行的軟件,我們建議使用該計算負載的 GUID。
- {PAYLOAD_SECRET} 表示有效載荷秘密。如何註冊無質量負載並使用示例負載的秘密進行測試,請參閱 Spot SDK 中的 Python 負載註冊代碼示例。對於在專用負載上運行的軟件,例如在 Spot CORE 或其他計算負載上,我們建議使用該計算負載的 secret。
- {LOCAL_IP} 代表運行 docker 的平台的 IP。
在計算負載中管理 Docker 容器
本節介紹兩種管理計算負載上的 docker 容器的方法,使用自 2.1 版起已包含在 Spot CORE 中的 Portainer 或命令行工具。
Portainer 配置
在 Spot 2.1 版中,Spot CORE 預裝了 Portainer 軟件來管理 docker 容器。 Portainer 是用於容器管理的完整軟件解決方案,可加快 Spot CORE 上的軟件部署和故障排除。這是在 Spot CORE 上管理 docker 容器的推薦方法。我們還建議使用 Portainer 並按照這些說明使用其他計算有效負載。
通過 ssh-ing 到 Spot CORE 並運行 cat /etc/spotcore-release,檢查 Spot CORE 版本以確保它是 2.1 或更高版本。如果不是最新版本,請按照 升級說明 升級到最新的 Spot CORE 版本。
更新 Spot CORE 後,可以從 Portainer Web 控制台部署 docker 文件。要訪問 Web 控制台,請轉至 https://192.168.80.3:21900,登錄,然後單擊 “本地 Local ”端點。要上傳 tar 文件,請單擊 Web 控制台左側的“圖像 Image”選項卡,然後單擊“圖像 Images”部分中的“導入 Import”按鈕,如下所示。
選擇上面 docker save 命令創建的tar文件,然後點擊“上傳Upload”。如果上傳失敗,請嘗試使用以下命令更改 tar 文件的權限:
sudo chmod a+r {IMAGE_NAME}.tar
上傳完成後,轉到 Portainer 中的“Containers”選項卡,然後單擊“Add Container”按鈕添加一個容器。在如下所示的配置頁面中:
設置以下字段:
“Name名稱” = 容器的名稱。這應該設置為描述容器的唯一字符串。
“Image圖片”= {IMAGE_NAME}:最新。 {IMAGE_NAME} 表示用於構建 docker 鏡像的鏡像名稱。
“將所有暴露的網絡端口發佈到隨機主機端口 Publish all exposed network ports to random host ports”= True。這減少了端口衝突。
在容器配置頁面的“命令和日誌記錄 Command & logging”選項卡下,在“命令Command”字段中添加所有參數。具體來說,這些參數 --host-ip {HOST_COMPUTER_IP} --guid {PAYLOAD_GUID} --secret {PAYLOAD_SECRET} ROBOT_IP 應該是在 Spot CORE 上運行的所有需要與板載服務通信的軟件應用程序所必需的。確保{HOST_COMPUTER_IP}與計算payload的IP匹配(後置payload默認為192.168.50.5),ROBOT_IP從Spot CORE角度匹配機器人IP(默認為192.168.50.3) )。 {PAYLOAD_GUID} 和 {PAYLOAD_SECRET} 應對應於計算負載憑證。本節中指定的參數列表還應包括應用程序預期的其他參數。
在容器配置頁面的“網絡Network”選項卡下,將“網絡Network”段設置為主機 host,以便在主機操作系統和 docker 容器之間正確轉發端口。
在容器配置頁面的“重啟策略Restart policy”選項卡下,將策略設置為“除非停止Unless stopped”。這將允許 docker 容器一直繼續運行(即使在重新啟動 Spot 核心之後),除非它被 Portainer 中的用戶手動停止。
配置完所有必需的字段後,選擇“部署容器Deploy the container”以運行在 Spot CORE 上的 docker 容器中配置的軟件應用程序。下面的屏幕截圖顯示了正在運行的容器的 Web 控制台視圖。
單擊“日誌Logs”鏈接可以看到運行在 docker 容器中的軟件應用程序生成的日誌語句,如下面的屏幕截圖所示。
命令行配置
scp -r -P 20022 {IMAGE_NAME}.tar spot@192.168.80.3:
然後,ssh 到計算負載,並在本地加載 docker 文件:
sudo docker load -i {IMAGE_NAME}.tar
要運行 docker 容器和其中的軟件應用程序,請執行:
sudo docker run -it --network=host {IMAGE_NAME} 192.168.50.3 {APPLICATION ARGUMENTS}
留言
張貼留言
Aron阿龍,謝謝您的留言互動!