0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用Docker容器做更多事情

郭大 ? 來源:大連云港 ? 作者:大連云港 ? 2022-07-18 17:42 ? 次閱讀

無處不在的物聯(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 容器無法按預(yù)期運(yùn)行。例如,Hawkbit 有一個(gè)用于配置的 Web 界面。由于主機(jī)的網(wǎng)絡(luò)配置,可能無法訪問 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í),所有這些工具都非常寶貴。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5046

    文章

    18821

    瀏覽量

    298608
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    8701

    瀏覽量

    84563
  • 容器
    +關(guān)注

    關(guān)注

    0

    文章

    490

    瀏覽量

    21986
  • Docker
    +關(guān)注

    關(guān)注

    0

    文章

    446

    瀏覽量

    11738
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何使用 Docker容器化技術(shù)

    對(duì)于開發(fā)人員來說,Docker肯定都不陌生,今天小編帶大家重新學(xué)習(xí)一下Docker。 什么是 Docker 官話: Docker 是一種開源的容器
    的頭像 發(fā)表于 09-30 11:24 ?1.6w次閱讀

    ARM平臺(tái)實(shí)現(xiàn)Docker容器技術(shù)

    ,一個(gè)相同配置的主機(jī)往往可以運(yùn)行更多數(shù)量的應(yīng)用。更快速的啟動(dòng)時(shí)間:傳統(tǒng)的虛擬機(jī)技術(shù)啟動(dòng)應(yīng)用服務(wù)往往需要數(shù)分鐘,而Docker容器應(yīng)用,由于直接運(yùn)行于宿主內(nèi)核,無需啟動(dòng)完整的操作系統(tǒng),因此可以做到秒級(jí)
    發(fā)表于 07-17 11:05

    ARM平臺(tái)實(shí)現(xiàn)Docker容器技術(shù)

    技術(shù),一個(gè)相同配置的主機(jī)往往可以運(yùn)行更多數(shù)量的應(yīng)用。 更快速的啟動(dòng)時(shí)間:傳統(tǒng)的虛擬機(jī)技術(shù)啟動(dòng)應(yīng)用服務(wù)往往需要數(shù)分鐘,而Docker容器應(yīng)用,由于直接運(yùn)行于宿主內(nèi)核,無需啟動(dòng)完整的操作系統(tǒng),因此可以做到秒
    發(fā)表于 07-25 14:36

    如何在Docker中創(chuàng)建容器

    Docker是一個(gè)開源的引擎,可以輕松的為任何應(yīng)用創(chuàng)建一個(gè)輕量級(jí)的、可移植的、自給自足的容器。開發(fā)者在筆記本上編譯測(cè)試通過的容器可以批量地在生產(chǎn)環(huán)境中部署,包括VMs(虛擬機(jī))、bare metal
    發(fā)表于 01-03 15:58

    請(qǐng)問docker容器如何添加自定義hosts?

    docker容器添加自定義hosts的方案有哪些?docker容器添加自定義hosts的錯(cuò)誤示例
    發(fā)表于 11-05 06:20

    理解Docker容器并暢玩docker

    !命令行!玩docker,簡(jiǎn)單幾句命令就夠了。Docker容器響應(yīng)迅速,執(zhí)行迅速,回憶一下VM啟動(dòng)要多久?最佳的試驗(yàn)場(chǎng)所,想怎么玩怎么玩,rm -rf /* 根本不是大問題。主機(jī)上刪掉容器
    發(fā)表于 11-05 09:54

    請(qǐng)問docker容器如何查看日志?

    docker容器如何查看日志
    發(fā)表于 11-19 07:29

    Docker容器管理命令(一)

    1、Docker容器管理命令的使用方法查看當(dāng)前主機(jī)本地docker鏡像:啟動(dòng)容器必須依賴鏡像,所以要獲取到鏡像的唯一標(biāo)識(shí)docker
    發(fā)表于 04-20 17:55

    Docker容器管理命令(二)

    1、Docker容器管理命令的使用方法批量刪除docker 容器docker cp命令docker
    發(fā)表于 04-21 11:31

    學(xué)習(xí) Docker 容器的 8 個(gè)命令分享

    利用這 8 個(gè)命令可以學(xué)習(xí) Docker 容器的基本管理方式。這是一個(gè)為 Docker 初學(xué)者準(zhǔn)備的,帶有示范命令輸出的指南。
    發(fā)表于 06-22 12:03 ?1315次閱讀
    學(xué)習(xí) <b class='flag-5'>Docker</b> <b class='flag-5'>容器</b>的 8 個(gè)命令分享

    人工智能可以多事情,但它能逗我們笑嗎?

    人工智能(AI)可以多事情。它可以說話,可以挑選出特定的照片、可以幫助人們?cè)诘罔F周圍尋找方向, 但它能逗我們笑嗎?這個(gè)功能會(huì)實(shí)現(xiàn)嗎?至少現(xiàn)在還不能。究其原因可以讓我們看到很多機(jī)器與人類的本質(zhì)區(qū)別。
    發(fā)表于 08-13 15:36 ?1024次閱讀

    docker容器刪除后數(shù)據(jù)還在嗎

    Docker作為一個(gè)容器化平臺(tái),提供了輕量級(jí)的虛擬化解決方案,能夠方便地創(chuàng)建、部署和管理應(yīng)用程序。然而,對(duì)于Docker容器的數(shù)據(jù)持久性是一個(gè)令人關(guān)注的問題。當(dāng)我們刪除一個(gè)
    的頭像 發(fā)表于 11-23 09:32 ?1480次閱讀

    docker容器容器之間通信

    Docker是一種輕量級(jí)容器化技術(shù),能夠?qū)?yīng)用程序及其依賴項(xiàng)封裝在一個(gè)獨(dú)立、可移植的容器中。而容器化的應(yīng)用程序通常是以分布式方式設(shè)計(jì)的,因此實(shí)現(xiàn)容器
    的頭像 發(fā)表于 11-23 09:36 ?1246次閱讀

    docker進(jìn)入容器的方法有哪些

    Docker是一種流行的容器化平臺(tái),它能夠快速構(gòu)建、交付和運(yùn)行應(yīng)用程序。在使用Docker時(shí),我們經(jīng)常需要進(jìn)入容器進(jìn)行調(diào)試、管理和運(yùn)行命令等操作。本文將詳細(xì)介紹
    的頭像 發(fā)表于 11-23 09:45 ?8967次閱讀

    docker容器有幾種狀態(tài)

    Docker 是一種流行的容器化平臺(tái),它能夠幫助開發(fā)人員將應(yīng)用程序和其依賴打包成一個(gè)獨(dú)立的容器,并且能夠在不同的環(huán)境中進(jìn)行部署和運(yùn)行。在 Docker 中,
    的頭像 發(fā)表于 11-23 09:50 ?1786次閱讀