RM新时代网站-首页

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

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

3天內不再提示

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

Tronlong創(chuàng)龍科技 ? 來源:Tronlong創(chuàng)龍科技 ? 作者:Tronlong創(chuàng)龍科技 ? 2024-03-07 13:48 ? 次閱讀

什么是Docker?

(1)Docker的架構

Docker是一個開源的應用容器引擎,讓開發(fā)者可打包他們的應用以及依賴包到一個可移植的鏡像中,然后發(fā)布到任何流行的Linux或Windows機器上,亦可實現(xiàn)虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口。使用Docker,可像管理應用程序一樣管理基礎結構。通過利用Docker的快速發(fā)布、測試和部署代碼的方法,可顯著減少產品開發(fā)時間。

Docker使用客戶端——服務器(C/S)體系結構。Docker客戶端與Docker守護進程進行通信,后者執(zhí)行構建、運行和分發(fā)Docker容器的繁重工作。Docker客戶端和守護進程可在同一個系統(tǒng)上運行,亦可將Docker客戶端連接至遠程Docker守護進程。Docker客戶端和守護進程使用REST API、UNIX套接字或網絡接口進行通信。


wKgaomXpMM2ANlt5AARGmREsrH4588.png

圖1

(2)Docker的作用


更高效的利用系統(tǒng)資源:Docker對系統(tǒng)資源的利用率更高,無論是應用執(zhí)行速度,內存損耗或者文件存儲速度,都要比傳統(tǒng)虛擬機技術更高效。因此,相比虛擬機技術,一個相同配置的主機往往可以運行更多數量的應用。


更快速的啟動時間:傳統(tǒng)的虛擬機技術啟動應用服務往往需要數分鐘,而Docker容器應用,由于直接運行于宿主內核,無需啟動完整的操作系統(tǒng),因此可以做到秒級,甚至毫秒級的啟動時間,大大的節(jié)約了開發(fā)測試,部署的時間。


一致的運行環(huán)境:開發(fā)過程中常見的一個問題是環(huán)境一致問題,由于開發(fā)環(huán)境,測試環(huán)境,生產環(huán)境不一致,導致有些bug并未在開發(fā)過程中發(fā)現(xiàn)。而Docker的鏡像提供了除內核外完整的運行時環(huán)境,確保環(huán)境一致性,從而不會在出現(xiàn)“這段代碼在我機器上沒問題”這類問題。


持續(xù)支付和部署:對開發(fā)和運維人員來說,最希望就是一次創(chuàng)建和部署,可以在任意的地方運行。(定制應用鏡像來實現(xiàn)集成、持續(xù)支付、部署。開發(fā)人員可以通過dockerfile來進行鏡像構建,并結合持續(xù)集成系統(tǒng)進行集成測試,而運維人員則可直接在生產環(huán)境中快速部署該鏡像,甚至結合持續(xù)部署系統(tǒng)進行自動部署)。而且使用dockerfile使鏡像構建透明化,不僅僅開發(fā)團隊可理解應用運行環(huán)境,也方便運維團隊理解應用運行所需條件,幫助更好的生產環(huán)境中部署該鏡像。


更輕松的遷移:由于Docker確保了執(zhí)行環(huán)境的一致性,使得應用的遷移更加的容易。Docker可在很多平臺上運行,無論是物理機、虛擬機、公有云、私有云、甚至是筆記本、其運行結果是一致的。因此用戶可很輕易的將在一個平臺上運行的應用,遷移到另一個平臺上,而不用擔心運行環(huán)境的變化導致應用無法正常運行的情況。


更輕松的維護和拓展:Docker使用的分層存儲以及鏡像的技術,使得應用重復部分的復用更為容易,也使得應用的維護更新更加簡單,基于基礎鏡像進一步擴展鏡像也變得十分簡單。此外,Docker團隊同各個開源項目團隊一起維護了一大批高質量的官網鏡像,既可直接在生產環(huán)境使用,又可作為基礎進一步定制,大大的降低了應用服務的鏡像制作成本。

Docker容器技術應用場景

Docker的應用場景十分廣泛,涵蓋工業(yè)網關、儲能EMS、通訊管理機、電力RTU、電力錄波器、汽車充電樁等領域。而由創(chuàng)龍科技推出的雙核Cortex-A7@1.2GHz含稅79元超強性價比全志T113-i工業(yè)核心板在支持Docker后,其性價比還將進一步提升!

圖2

基于T113-i平臺實現(xiàn)Docker容器技術

如下為基于全志T113-i工業(yè)平臺,演示Docker安裝、構建鏡像以及下載鏡像并運行容器的方法。


1Docker安裝

1.1安裝方法

(1)安裝依賴包

打開Ubuntu,確保Ubuntu可正常訪問互聯(lián)網,執(zhí)行如下命令安裝Docker依賴包。

Host#

sudo apt-get update

wKgZomXpMPuAE8p-AABl0hKNJpo094.png

圖3

Host#sudo apt-get install ca-certificates curl gnupg lsb-release

wKgZomXpMQaAb90WAACz16gFRR4130.png

圖4


(2)添加Docker官方GPG密鑰


Host#sudo mkdir -m 0755 -p /etc/apt/keyrings

Host#curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

wKgaomXpMSCAADxgAABuLZw2anA808.png

圖5

(3)設置Docker Stable存儲庫

Host#

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

wKgaomXpMSqANeKPAABXABH4F2A954.png

圖6


(4)安裝Docker

Host#

sudo apt-get update

Host#

sudo apt-get install docker-ce docker-ce-cli containerd.io

wKgaomXpMUGAGlv5AACTX5noQkM665.png

圖7

wKgZomXpMUmALul_AAHtygDyHiw658.png

圖8

(5)驗證Docker

執(zhí)行如下命令,通過運行Docker自帶的hello-world鏡像來驗證是否已安裝成功。程序運行后,輸出如下內容則表示Docker安裝成功。

Host#sudo docker run hello-world


wKgaomXpMV-Aa969AAFXRnsVHBU696.png

圖9

更多參考信息,請查閱官方手冊:https://docs.docker.com/engine/install/ubuntu。

1.2搭建本地鏡像倉庫

Docker用Registry來保存用戶構建的鏡像。Registry分為公共和私有兩種。Docker公司運營的公共Registry叫做Docker Hub,用戶可在Docker Hub注冊賬號,分享并保存自己的鏡像。Docker公司的公共鏡像倉庫(

https://hub.docker.com

)提供了龐大的鏡像集合供用戶使用。一個

Docker Registry

中可包含多個倉庫,每個倉庫可包含多個標簽(Tag),每個標簽對應一個鏡像。通常,一個倉庫會包含同一個軟件不同版本的鏡像,而標簽對應該軟件的各個版本。用戶可通過“[<倉庫名>:<標簽>]”的格式來指定具體是某個軟件某個版本的鏡像。如未給出標簽,將以[latest]作為默認標簽。本次使用的鏡像是registry:2,請執(zhí)行如下命令自動下載并啟動。

Host#

mkdir -p /home/tronlong/docker/myregistry

Host#

sudo docker run -d -p 5000:5000 -v /home/tronlong/docker/myregistry:/var/lib/registry registry:2

參數說明:

-d:后臺啟動容器。-p:將容器的5000端口映射至Ubuntu的5000端口(5000是registry服務端口)。-v:將容器"/var/lib/registry"目錄映射至Ubuntu的"/home/tronlong/docker/myregistry",用于存放鏡像數據。

wKgZomXpMcGAW_bvAADyTi1uzYE177.png

圖10

請執(zhí)行如下命令,查看容器是否已啟動,出現(xiàn)如下內容說明容器已正常啟動。


Host#

sudo docker ps

wKgaomXpMzyAaFq_AABf_ieBVM4243.png

圖11

請通過瀏覽器訪問"http://192.168.10.101:5000/v2/_catalog",若返回如下內容則說明registry已經成功啟動,192.168.10.101為Ubuntu的IP。

wKgaomXpM0SAMEkoAAAOzfSmTJs496.png

圖12


因為Docker剛建立運行,所以里面無任何鏡像內容。至此,Docker環(huán)境安裝完成。


2 構建鏡像

請在Ubuntu上新建工作目錄"/home/tronlong/docker/dockerfile/",并將產品資料“4-軟件資料LinuxFilesystemdocker”目錄下的文件系統(tǒng)壓縮包和產品資料“4-軟件資料Demobase-demosled_flashbin”目錄下的可執(zhí)行文件拷貝至Ubuntu共享目錄下,再執(zhí)行如下命令拷貝至Docker工作目錄。


Host#mkdir /home/tronlong/docker/dockerfile

Host#cp /mnt/hgfs/SharedFolders/led_flash /home/tronlong/docker/dockerfile/

Host#cp /mnt/hgfs/SharedFolders/rootfs.tar/home/tronlong/docker/dockerfile/

wKgaomXpM0-AIugvAADhOmpgufI941.png

圖13

在"/home/tronlong/docker/dockerfile/"目錄下,創(chuàng)建Dockerfile文件,并編寫如下內容。


Host#cd /home/tronlong/docker/dockerfile

Host#gedit Dockerfile

wKgZomXpM1-AfP3eAABsYdGY6MA265.png

圖14

wKgaomXpM2yAGgklAACYM9BF4ZM446.png

圖15


Dockerfile文件內容如下:


FROM scratch #基于空的基礎鏡像構建新的鏡像

# Set work directory

WORKDIR /root #為CMD、COPY和AND設置工作目錄

# Decompress the file system

ADD rootfs.tar / #解壓文件系統(tǒng)

# Copy file to image

COPY led_flash . #拷貝可執(zhí)行文件至鏡像的"/home/root/"目錄下

# Shell command executed when the container is started

# CMD ["executable","param1","param2"]

CMD ["./led_flash", "-n 1"] #容器啟動時執(zhí)行的shell命令,此處為執(zhí)行LED閃爍程序的命令

在Dockerfile文件所在的目錄下執(zhí)行如下命令,進行構建鏡像。


Host#sudo docker build -t 192.168.10.101:5000/led_flash:v1.0 .//注意命令最后含有"."

Host#sudo docker images //查看已構建的鏡像


參數說明:

192.168.10.101:Ubuntu的IP地址;

-t:指定鏡像的名字及標簽(name:tag)。

wKgZomXpM3qAVhFRAAGHSzTJUy8911.png

圖16

請執(zhí)行如下命令,將鏡像推送至本地倉庫Registry。


Host#sudo docker push 192.168.10.101:5000/led_flash:v1.0

wKgaomXpM4OAZiOdAABq14dt1TM314.png

圖17


Docker版本從1.3.X之后,與Docker Registry交互默認使用https,然而前面搭建的私有倉庫僅提供http服務,因此當與私有倉庫交互時將出現(xiàn)上面的錯誤提示??赏ㄟ^修改"/etc/docker/daemon.json"文件來解決該問題,請執(zhí)行如下命令,192.168.10.101為Ubuntu的IP。


Host#sudovi/etc/docker/daemon.json


wKgaomXpM5yAR0dZAAA5VA8_0KE764.png

圖18

請在daemon.json中添加如下配置內容:

{"insecure-registries": ["

192.168.10.101

:5000"]}

執(zhí)行如下命令,重新啟動Docker、Registry容器(通過指定ID),并重新推送鏡像至本地Registry。

Host#

sudo /etc/init.d/docker restart

Host#

sudo docker ps -a

Host#

sudo docker start

0833de1304d9

//以查詢得到的CONTAINER ID號為準

Host#

sudo docker push

192.168.10.101

:5000/led_flash:v1.0

wKgaomXpM6qADPnHAAIKSYH-xnw659.png

圖19

通過瀏覽器訪問"http://

192.168.10.101

:5000/v2/_catalog",即可看到當前倉庫里已有的鏡像。

wKgaomXpM7iATnj0AAAPVYt2WU4253.png

圖20

3 下載鏡像并運行容器


(1)請使用網線將創(chuàng)龍科技T113-i評估板ETH0(RGMII)網口連接至路由器,并確保和Ubuntu處于同一網絡下,評估板上電啟動,執(zhí)行如下命令下載鏡像并列舉出下載后的鏡像。下載鏡像過程中將會打印警告和錯誤信息,不影響功能正常使用,請忽略。


Target#docker pull 192.168.10.101:5000/led_flash:v1.0 //下載鏡像

Target#docker images //列舉已下載的鏡像


wKgaomXpM8qAWytYAAAYc_856R0703.png

圖21

若出現(xiàn)如下錯誤,請執(zhí)行如下命令,通過修改"/etc/docker/daemon.json"文件來解決此問題,修改保存后,重新啟動dockerd守護進程。

wKgaomXpM9OASrjGAAALk3Mh-ng243.png

圖22


Target#vi /etc/docker/daemon.json

wKgaomXpM-KAP0EsAAAJUA5_NSU256.png

圖23

請在daemon.json中添加如下配置內容:

{"insecure-registries": ["

192.168.10.101

:5000"]}

Target#

/etc/init.d/S60dockerd restart

wKgZomXpM_KAZQjdAAAHJFQDkw0491.png

圖24

(2)創(chuàng)建并啟動容器。由于Docker使用VFS存儲驅動程序,當創(chuàng)建容器時,需要先創(chuàng)建容器層,該容器層需要對上一層進行“深拷貝”,因此完成創(chuàng)建并啟動容器整個過程需要耗時約1min,請耐心等待。

Target#

docker run -d --name led_flash -v /sys/:/sys

2d17af57ec7e

參數說明:-d:后臺運行容器;--name:為容器指定一個名稱;-v:映射卷(將主機的目錄"/sys"映射至容器的"/sys");2d17af57ec7e:鏡像ID,以docker images命令列舉的"IMAGE ID"為準。

wKgaomXpM_mAHpACAAAwxPTSi74575.png

圖25


容器啟動完成后,評估底板的用戶可編程指示燈閃爍。


(3)容器的基本操作


執(zhí)行如下命令,查看正在運行的容器并進入容器。


Target#dockerps -a

Target#docker exec -it 2d7c23bd13c0 /bin/bash


參數說明:

-i:以交互模式運行容器,通常與-t同時使用;

-t:為容器重新分配一個偽輸入終端,通常與-i同時使用;

2d7c23bd13c0:容器ID,以實際"CONTAINER ID"為準;

/bin/bash:在容器內執(zhí)行"/bin/bash"命令。

wKgZomXpNSSAQq_vAAAPveRnyTA911.png

圖26


執(zhí)行如下命令,退出容器。


Bash#exit

wKgZomXpNTGAFgTwAAAIzW7bpLY893.png

圖27

執(zhí)行如下命令,停止容器。此時,評估底板的用戶可編程指示燈不再閃爍。


Target#docker stop 2d7c23bd13c0

wKgZomXpNUCAABHwAAAQg-SB8Nw952.png

圖28

執(zhí)行如下命令,啟動容器。此時,評估底板的用戶可編程指示燈閃爍。


Target#docker start2d7c23bd13c0


wKgaomXpNU6AHI6WAAAZq2fHsbw349.png

圖29

備注:若運行Docker時,出現(xiàn)"x509: certificate signed by unknown authority"類似警告信息(如下圖),可通過修改/etc/docker/daemon.json文件解決。該警告是由于本機沒有遠程倉庫的證書文件導致。


wKgaomXpNVSAFRbqAAAHfLmgMl8302.png

圖30


修改內容:

{

"registry-mirrors": ["https://registry-1.docker.io"],

"insecure-registries": ["https://registry-1.docker.io"]

}

wKgZomXpNWSAI9mVAAAQuwoqvS4674.png

圖31

修改完成后,重新運行Docker。


審核編輯 黃宇

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

    關注

    134

    文章

    9084

    瀏覽量

    367379
  • Docker
    +關注

    關注

    0

    文章

    457

    瀏覽量

    11846
收藏 人收藏

    評論

    相關推薦

    如何使用 Docker容器技術

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

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

    T113-i工業(yè)核心板在支持Docker后,其性價比還將進一步提升!圖2基于T113-i平臺實現(xiàn)Docker容器
    發(fā)表于 07-17 11:05

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

    性價比全志T113-i工業(yè)核心板在支持Docker后,其性價比還將進一步提升! 圖2基于T113-i平臺實現(xiàn)Docker容器
    發(fā)表于 07-25 14:36

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

    、OpenStack 集群和其他的基礎應用平臺。為了方便用戶使用和管理Docker容器,鐵威馬在TOS 4.0系統(tǒng)中為Docker 設計了一套友好的用戶界面,請參照相關幫助文件的指引
    發(fā)表于 01-03 15:58

    理解Docker容器并暢玩docker

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

    Docker容器管理命令(一)

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

    Docker容器管理命令(二)

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

    在AM335X平臺上運行ubuntu系統(tǒng)和docker容器的方法

    Docker 最初是 dotCloud 公司創(chuàng)始人 Solomon Hykes 在法國期間發(fā)起的一個公司內部項目,它是基于 dotCloud 公司多年云服務技術的一次革新,并于 2013 年 3 月
    發(fā)表于 11-11 06:12

    基于Docker容器 持續(xù)實踐交付平臺建設

    導讀:中國五礦和阿里巴巴聯(lián)手打造的鋼鐵服務專業(yè)平臺五阿哥,通過集結阿里巴巴在大數據、電商平臺和互聯(lián)網產品技術上的優(yōu)勢,為終端用戶帶來一站式采購體驗。本文是五阿哥運維技術團隊針對
    發(fā)表于 03-06 09:56 ?796次閱讀

    集成Docker容器的OpenStack云平臺性能研究

    針對OpenStack云平臺虛擬機未能較好利用宿主物理機資源的問題,結合基于組件工作的OpenStack在云平臺管理中的高效性和Docker容器虛擬化的快速部署優(yōu)勢,搭建基于
    發(fā)表于 01-26 15:32 ?0次下載
    集成<b class='flag-5'>Docker</b><b class='flag-5'>容器</b>的OpenStack云<b class='flag-5'>平臺</b>性能研究

    AM5708平臺移植ubuntu系統(tǒng)和docker容器

    AM5708平臺移植ubuntu系統(tǒng)和docker容器
    發(fā)表于 11-01 08:26 ?2次下載
    AM5708<b class='flag-5'>平臺</b>移植ubuntu系統(tǒng)和<b class='flag-5'>docker</b><b class='flag-5'>容器</b>

    docker容器刪除后數據還在嗎

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

    docker容器容器之間通信

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

    docker進入容器的方法有哪些

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

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

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