無處不在的物聯(lián)網設備需要服務器允許“邊緣”設備執(zhí)行重要的任務。但是,設置服務器是一項艱巨的任務。必須滿足特定應用程序的適當依賴關系。有時,需要相互依賴的軟件的確切版本來滿足互操作性。此外,一旦服務器經過配置和測試以適用于特定任務,就必須記錄確切的配置以供將來復制。最后,不同應用程序和任務的依賴關系可能會發(fā)生沖突,可能需要完全獨立的服務器進行隔離。
作為嵌入式軟件工程師,構建和配置服務器以測試邊緣設備上的特定功能幾乎是不必要的。相反,可以利用容器技術來設置一個簡單的服務器來執(zhí)行單個任務。多個容器可以組合形成一組虛擬服務器,以與運行在物聯(lián)網設備上的不同應用程序進行交互。在本文中,我們將介紹 Docker 在這方面提供的一些功能。
本文將重點介紹 Hawkbit,它是一個服務器端應用程序,可用于更新基于 Linux 的邊緣設備;SWUpdate 名義上在邊緣設備上運行以管理更新過程。由于 Hawkbit 在服務器上運行,因此最好在 Docker 映像中運行它,以避免遇到上述問題。
幸運的是,Docker 提供了Hawkbit 的標準鏡像。使用 Hawkbit 運行容器的 Docker 標準調用如下:
$> docker run -d -p 8888:80 hawkbit/hawkbit-update-server
上面的docker run命令傳遞了-d選項,該選項指示它作為守護進程在后臺運行。選項8888:80指示 Docker 將在主機(即運行 Docker 的機器)的端口 8888 上接收到的所有數據轉發(fā)到 Docker 容器的端口 80。出于安全原因,建議執(zhí)行從主機到 Docker 容器的“端口轉發(fā)”。某些 Web 應用程序有一些常用端口,不建議在主機上打開這些端口。如果它們在主機上保持打開狀態(tài),則攻擊者可以使用這些端口訪問機器。相反,如果在主機上使用非標準端口(例如 8888),則安全威脅會降低。
有時,由于配置錯誤,Docker 容器無法按預期運行。例如,Hawkbit 有一個用于配置的 Web 界面。由于主機的網絡配置,可能無法訪問 Hawkbit Web 界面。以下 Docker 命令可用于實時查看 Docker 容器的日志:
$> 碼頭工人 PS $> docker logs -f <容器ID>
第一個命令docker ps將在一個包含以下列的表中列出所有正在運行的容器:
- CONTAINER ID:容器的哈希值,將用于任何需要“容器 ID”的后續(xù)命令。
- IMAGE:用于運行 Docker 容器的鏡像名稱。在此示例中,這將是“hawkbit/hawkbit-update-server”。
- COMMAND:容器正在運行的命令。在此示例中,這是用于運行 hawkbit 服務器的命令。
- CREATED:自容器創(chuàng)建以來經過的時間。
- STATUS:容器的狀態(tài),包括經過的時間。在此示例中,顯示的時間將與CREATED下列出的時間相同。
- PORTS:暴露給容器的端口。在本例中,應顯示“80”。
- NAMES:賦予特定實例的唯一名稱。
獲取容器 ID 后,使用docker ps命令可以將其輸入到docker logs -f命令,該命令將實時顯示容器生成的任何日志。另一個用于解決 Docker 容器問題的常用命令是:
$> docker attach <容器ID>
此命令會將標準輸出從容器轉發(fā)到您的主機,并將標準輸入從您的主機轉發(fā)到容器。換句話說,就好像您坐在由容器執(zhí)行的機器前,您可以通過鍵盤訪問它,并且可以看到顯示器上正在打印的內容。
出于安全目的,Web 應用程序的另一個常見任務是提供 HTTPS 支持。回想一下,在加密參數的初始協(xié)議之后,HTTPS 會加密客戶端和服務器之間的流量。Nginx 是一個可以提供 HTTPS 支持的應用程序,并且可以與 Hawkbit 結合以通過加密連接提供 FW/SW 更新。由于 Docker 在其集線器上提供了 Nginx 映像,因此可以將其與 Hawkbit Docker 容器映像結合使用以提供單一解決方案。這可以通過 Docker Compose 來完成。Docker Compose 允許在單個文件中配置多個 Docker 容器。這些 Docker 容器代表在內部 Docker 網絡上相互連接的不同機器。
配置文件通常命名為“docker-compose.yml”,并具有定義特定配置的鍵值對。以下是包含 Hawkbit 和 Nginx 的示例文件示例:
服務: 鷹比特: 圖片:hawkbit/hawkbit-update-server 重啟:總是 端口: - “8888:80” 標簽: 名稱:“hawkbit-test” nginx: 圖片:nginx 端口: - “8443:443” 卷: -./data/nginx:/etc/nginx/conf.d
我們將把注意力集中在配置文件的結構和格式上,因為 Nginx 配置的細節(jié)超出了本文的范圍。每個“Docker Compose 文件”(通常稱為配置文件)都以“服務”開頭,因為容器的目的是提供某種服務。然后每個容器都由一個特定的名稱標識。重要的是要注意縮進很重要,因為 Docker Compose 要求文件以某種方式格式化。然后,在每個單獨的容器下,一組鍵值對定義容器所需的配置參數。在上面的示例中,在hawkbit下,我們有以下鍵值對:
- image:指示 Docker 它應該使用哪個容器鏡像。
- restart:如果容器因任何原因停止,指示 Docker 重新啟動容器。
- 端口:指示 Docker 如何將某些端口從主機轉發(fā)到容器(如前所述)。
- 標簽: Docker 在啟動容器時應該使用的實例名稱。
在nginx容器下,存在卷鍵值對,以指示 Docker 將主機上的特定位置掛載到 Docker 容器(這與docker run命令的-v選項相同,后者是上一篇文章中討論過)。最后,要啟動這些容器,應在與配置文件相同的位置執(zhí)行以下命令:
$> 碼頭工人組成
就是這樣!兩個 docker 容器應該已啟動并正在運行。
總之,Docker 提供了額外的機制,以在啟動和運行 Docker 容器時啟用適當的安全實踐,并支持在使用 Docker 容器時可能出現(xiàn)的調試問題。最后,Docker Compose 是一個有用的工具,可以使用單個配置文件啟動多個容器。在測試基于 IoT 的系統(tǒng)的應用程序時,所有這些工具都非常寶貴。
審核編輯:湯梓紅
-
嵌入式
+關注
關注
5085文章
19138瀏覽量
305722 -
服務器
+關注
關注
12文章
9203瀏覽量
85547 -
容器
+關注
關注
0文章
495瀏覽量
22069 -
Docker
+關注
關注
0文章
472瀏覽量
11865
發(fā)布評論請先 登錄
相關推薦
評論