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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用Docker容器做更多事情

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

無處不在的物聯(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)的應用程序時,所有這些工具都非常寶貴。

審核編輯:湯梓紅

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

    關注

    5085

    文章

    19138

    瀏覽量

    305722
  • 服務器
    +關注

    關注

    12

    文章

    9203

    瀏覽量

    85547
  • 容器
    +關注

    關注

    0

    文章

    495

    瀏覽量

    22069
  • Docker
    +關注

    關注

    0

    文章

    472

    瀏覽量

    11865
收藏 人收藏

    評論

    相關推薦

    如何使用 Docker容器化技術

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

    ARM平臺實現(xiàn)Docker容器技術

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

    ARM平臺實現(xiàn)Docker容器技術

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

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

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

    請問docker容器如何添加自定義hosts?

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

    理解Docker容器并暢玩docker

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

    請問docker容器如何查看日志?

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

    Docker容器管理命令(一)

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

    Docker容器管理命令(二)

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

    學習 Docker 容器的 8 個命令分享

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

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

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

    docker容器刪除后數據還在嗎

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

    docker容器容器之間通信

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

    docker進入容器的方法有哪些

    Docker是一種流行的容器化平臺,它能夠快速構建、交付和運行應用程序。在使用Docker時,我們經常需要進入容器進行調試、管理和運行命令等操作。本文將詳細介紹
    的頭像 發(fā)表于 11-23 09:45 ?1.1w次閱讀

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

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