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