日韩精品电影一二区-精品久久久久久亚洲中文字幕-一区二区三区国产美女在线播放-欧美日韩在线观看你懂的-午夜精品一区二区三区的区别-久久精品娱乐亚洲领-欧美在线网站一区二区三区-在线观看91精品国产不卡-国产水滴盗摄一区二区

創(chuàng)龍首頁(yè) >關(guān)于創(chuàng)龍 > 新聞資訊 > 技術(shù)文章

聯(lián)系我們

Contact Us

公司總機(jī):020-8998-6280

技術(shù)熱線:020-3893-9734

技術(shù)郵箱:support@tronlong.com

銷售郵箱:sales@tronlong.com

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

2024/03/07

什么是Docker?

(1)Docker的架構(gòu)

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

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


 

圖1

(2)Docker的作用

 

更高效的利用系統(tǒng)資源:Docker對(duì)系統(tǒng)資源的利用率更高,無(wú)論是應(yīng)用執(zhí)行速度,內(nèi)存損耗或者文件存儲(chǔ)速度,都要比傳統(tǒng)虛擬機(jī)技術(shù)更高效。因此,相比虛擬機(jī)技術(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)核,無(wú)需啟動(dòng)完整的操作系統(tǒng),因此可以做到秒級(jí),甚至毫秒級(jí)的啟動(dòng)時(shí)間,大大的節(jié)約了開發(fā)測(cè)試,部署的時(shí)間。

 

一致的運(yùn)行環(huán)境:開發(fā)過(guò)程中常見(jiàn)的一個(gè)問(wèn)題是環(huán)境一致問(wèn)題,由于開發(fā)環(huán)境,測(cè)試環(huán)境,生產(chǎn)環(huán)境不一致,導(dǎo)致有些bug并未在開發(fā)過(guò)程中發(fā)現(xiàn)。而Docker的鏡像提供了除內(nèi)核外完整的運(yùn)行時(shí)環(huán)境,確保環(huán)境一致性,從而不會(huì)在出現(xiàn)“這段代碼在我機(jī)器上沒(méi)問(wèn)題”這類問(wèn)題。


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


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


更輕松的維護(hù)和拓展:Docker使用的分層存儲(chǔ)以及鏡像的技術(shù),使得應(yīng)用重復(fù)部分的復(fù)用更為容易,也使得應(yīng)用的維護(hù)更新更加簡(jiǎn)單,基于基礎(chǔ)鏡像進(jìn)一步擴(kuò)展鏡像也變得十分簡(jiǎn)單。此外,Docker團(tuán)隊(duì)同各個(gè)開源項(xiàng)目團(tuán)隊(duì)一起維護(hù)了一大批高質(zhì)量的官網(wǎng)鏡像,既可直接在生產(chǎn)環(huán)境使用,又可作為基礎(chǔ)進(jìn)一步定制,大大的降低了應(yīng)用服務(wù)的鏡像制作成本。


Docker容器技術(shù)應(yīng)用場(chǎng)景

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

圖2

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

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

1.1 安裝方法

(1)安裝依賴包

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

Host#

sudo apt-get update

圖3

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

 

圖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

 

圖5

 

(3)設(shè)置Docker Stable存儲(chǔ)庫(kù)

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




圖6

(4)安裝Docker

Host#

sudo apt-get update

Host#

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

 

圖7

圖8

 (5)驗(yàn)證Docker

 

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

Host#sudo docker run hello-world

 

圖9

更多參考信息,請(qǐng)查閱官方手冊(cè):https://docs.docker.com/engine/install/ubuntu

 

1.2 搭建本地鏡像倉(cāng)庫(kù)

 Docker用Registry來(lái)保存用戶構(gòu)建的鏡像。Registry分為公共和私有兩種。Docker公司運(yùn)營(yíng)的公共Registry叫做Docker Hub,用戶可在Docker Hub注冊(cè)賬號(hào),分享并保存自己的鏡像。Docker公司的公共鏡像倉(cāng)庫(kù)(https://hub.docker.com)提供了龐大的鏡像集合供用戶使用。一個(gè)

Docker Registry中可包含多個(gè)倉(cāng)庫(kù),每個(gè)倉(cāng)庫(kù)可包含多個(gè)標(biāo)簽(Tag),每個(gè)標(biāo)簽對(duì)應(yīng)一個(gè)鏡像。通常,一個(gè)倉(cāng)庫(kù)會(huì)包含同一個(gè)軟件不同版本的鏡像,而標(biāo)簽對(duì)應(yīng)該軟件的各個(gè)版本。用戶可通過(guò)“[<倉(cāng)庫(kù)名>:<標(biāo)簽>]”的格式來(lái)指定具體是某個(gè)軟件某個(gè)版本的鏡像。如未給出標(biāo)簽,將以[latest]作為默認(rèn)標(biāo)簽。本次使用的鏡像是registry:2,請(qǐng)執(zhí)行如下命令自動(dòng)下載并啟動(dòng)。

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

參數(shù)說(shuō)明:

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

圖10

請(qǐng)執(zhí)行如下命令,查看容器是否已啟動(dòng),出現(xiàn)如下內(nèi)容說(shuō)明容器已正常啟動(dòng)。


Host#

sudo docker ps

圖11


請(qǐng)通過(guò)瀏覽器訪問(wèn)"http://192.168.10.101:5000/v2/_catalog",若返回如下內(nèi)容則說(shuō)明registry已經(jīng)成功啟動(dòng),192.168.10.101為Ubuntu的IP。

 

圖12


 

因?yàn)镈ocker剛建立運(yùn)行,所以里面無(wú)任何鏡像內(nèi)容。至此,Docker環(huán)境安裝完成。


 

2 構(gòu)建鏡像

 

請(qǐng)?jiān)赨buntu上新建工作目錄"/home/tronlong/docker/dockerfile/",并將產(chǎn)品資料“4-軟件資料\Linux\Filesystem\docker\”目錄下的文件系統(tǒng)壓縮包和產(chǎn)品資料“4-軟件資料\Demo\base-demos\led_flash\bin\”目錄下的可執(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/

 

圖13

 

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


 

Host#cd /home/tronlong/docker/dockerfile

Host#gedit Dockerfile

 

圖14

圖15


 

Dockerfile文件內(nèi)容如下:

 

FROM scratch #基于空的基礎(chǔ)鏡像構(gòu)建新的鏡像

# Set work directory

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

# 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"] #容器啟動(dòng)時(shí)執(zhí)行的shell命令,此處為執(zhí)行LED閃爍程序的命令

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


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

Host#sudo docker images //查看已構(gòu)建的鏡像


參數(shù)說(shuō)明:

192.168.10.101:Ubuntu的IP地址;

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

 

圖16


請(qǐng)執(zhí)行如下命令,將鏡像推送至本地倉(cāng)庫(kù)Registry。


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

 

圖17

 

Docker版本從1.3.X之后,與Docker Registry交互默認(rèn)使用https,然而前面搭建的私有倉(cāng)庫(kù)僅提供http服務(wù),因此當(dāng)與私有倉(cāng)庫(kù)交互時(shí)將出現(xiàn)上面的錯(cuò)誤提示。可通過(guò)修改"/etc/docker/daemon.json"文件來(lái)解決該問(wèn)題,請(qǐng)執(zhí)行如下命令,192.168.10.101為Ubuntu的IP。


Host#sudo vi /etc/docker/daemon.json

圖18

請(qǐng)?jiān)赿aemon.json中添加如下配置內(nèi)容:

 {"insecure-registries": ["192.168.10.101:5000"]}

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

Host#sudo /etc/init.d/docker restart

Host#sudo docker ps -a

Host#sudo docker start 0833de1304d9//以查詢得到的CONTAINER ID號(hào)為準(zhǔn)

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


19

通過(guò)瀏覽器訪問(wèn)"http://192.168.10.101:5000/v2/_catalog",即可看到當(dāng)前倉(cāng)庫(kù)里已有的鏡像


圖20

3 下載鏡像并運(yùn)行容器


 

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


 

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

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


 

圖21

若出現(xiàn)如下錯(cuò)誤,請(qǐng)執(zhí)行如下命令,通過(guò)修改"/etc/docker/daemon.json"文件來(lái)解決此問(wèn)題,修改保存后,重新啟動(dòng)dockerd守護(hù)進(jìn)程。

 

圖22


 

Target#vi /etc/docker/daemon.json

圖23

請(qǐng)?jiān)赿aemon.json中添加如下配置內(nèi)容:

{

"insecure-registries": ["192.168.10.101:5000"]

}

Target#

/etc/init.d/S60dockerd restart

圖24

(2)創(chuàng)建并啟動(dòng)容器。由于Docker使用VFS存儲(chǔ)驅(qū)動(dòng)程序,當(dāng)創(chuàng)建容器時(shí),需要先創(chuàng)建容器層,該容器層需要對(duì)上一層進(jìn)行“深拷貝”,因此完成創(chuàng)建并啟動(dòng)容器整個(gè)過(guò)程需要耗時(shí)約1min,請(qǐng)耐心等待。

Target#docker run -d --name led_flash -v /sys/:/sys 2d17af57ec7e


參數(shù)說(shuō)明:

-d:后臺(tái)運(yùn)行容器;

--name:為容器指定一個(gè)名稱;

-v:映射卷(將主機(jī)的目錄"/sys"映射至容器的"/sys");

2d17af57ec7e:鏡像ID,以docker images命令列舉的"IMAGE ID"為準(zhǔn)。


圖25


 

容器啟動(dòng)完成后,評(píng)估底板的用戶可編程指示燈閃爍。

 

(3)容器的基本操作

 

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

 

Target#docker ps -a

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


參數(shù)說(shuō)明:

-i:以交互模式運(yùn)行容器,通常與-t同時(shí)使用;

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

2d7c23bd13c0:容器ID,以實(shí)際"CONTAINER ID"為準(zhǔn);

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

圖26


 

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


 

Bash#exit

圖27

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


 

Target# docker stop 2d7c23bd13c0

 

圖28

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


 

Target#docker start 2d7c23bd13c0


 

圖29

備注:若運(yùn)行Docker時(shí),出現(xiàn)"x509: certificate signed by unknown authority"類似警告信息(如下圖),可通過(guò)修改/etc/docker/daemon.json文件解決。該警告是由于本機(jī)沒(méi)有遠(yuǎn)程倉(cāng)庫(kù)的證書文件導(dǎo)致。


圖30


 

修改內(nèi)容:

{

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

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

}

 

圖31

修改完成后,重新運(yùn)行Docker。


如需選購(gòu),請(qǐng)登錄創(chuàng)龍科技天貓旗艦店:tronlong.tmall.com!

全志T113-i技術(shù)交流群:535860770,歡迎加入!


更多T113-i平臺(tái)產(chǎn)品資料

可長(zhǎng)按二維碼識(shí)別下載




亦可添加如下客服微信進(jìn)行咨詢



(即刻添加,馬上咨詢)

Copyright © 2013~2025 廣州創(chuàng)龍電子科技有限公司 All Rights Reserved  | 粵ICP備15055271號(hào)