什么是Docker?
Docker是一個(gè)開源的應(yīng)用容器引擎。其主要應(yīng)用于開發(fā)、部署和運(yùn)行應(yīng)用程序。它利用容器化技術(shù),將應(yīng)用程序及其所有依賴的項(xiàng)打包到一個(gè)稱為容器的、獨(dú)立的運(yùn)行環(huán)境中。這使得我們的應(yīng)用程序在不同的環(huán)境中能夠以一致的方式運(yùn)行。無(wú)論是在開發(fā)人員的電腦、測(cè)試環(huán)境還是生產(chǎn)服務(wù)器上。
通過使用Docker,開發(fā)人員可以更容易地構(gòu)建、交付和運(yùn)行應(yīng)用程序,同時(shí)確保應(yīng)用程序的一致性及可移植性。它也使得應(yīng)用程序的部署更加靈活、高效,因?yàn)樗梢钥焖俚貑?dòng)、停止和擴(kuò)展容器,而不會(huì)影響其他容器或主機(jī)系統(tǒng)。
Docker容器技術(shù)應(yīng)用場(chǎng)景
Docker容器技術(shù)可應(yīng)用于工業(yè)網(wǎng)關(guān)、儲(chǔ)能EMS、通訊管理機(jī)、電力RTU、電力錄波器、汽車充電樁等場(chǎng)景。
?
基于T113-i平臺(tái)實(shí)現(xiàn)Docker容器技術(shù)
下面,我們將基于全志T113-i工業(yè)平臺(tái),演示Docker的安裝、構(gòu)建鏡像、下載鏡像、運(yùn)行容器。
1 Docker安裝
1.1 安裝方法
步驟一:安裝依賴包
在確保Ubuntu可正常訪問互聯(lián)網(wǎng)的情況下,執(zhí)行如下命令安裝Docker依賴包:
sudo?apt-get?update sudo?apt-get?install?ca-certificates?curl?gnupg?lsb-release
?
步驟二:添加Docker官方GPG密鑰
執(zhí)行如下命令:
sudo?mkdir?-m?0755?-p?/etc/apt/keyrings curl?-fsSL?https://download.docker.com/linux/ubuntu/gpg?|?sudo?gpg?--dearmor?-o?/etc/apt/keyrings/docker.gpg
步驟三:設(shè)置Docker Stable存儲(chǔ)庫(kù)
執(zhí)行如下命令:
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
步驟四:安裝Docker
執(zhí)行如下命令:
sudo?apt-get?update sudo?apt-get?install?docker-ce?docker-ce-cli?containerd.io
?
步驟五:驗(yàn)證Docker
執(zhí)行如下命令:
sudo?docker?run?hello-world
運(yùn)行Docker自帶的hello-world鏡像來驗(yàn)證是否已安裝成功。程序運(yùn)行之后,如果輸出如下內(nèi)容則表示Docker安裝成功。
關(guān)于docker更多參考資料,請(qǐng)查閱官方的手冊(cè):
https://docs.docker.com/engine/install/ubuntu
1.2 搭建本地鏡像倉(cāng)庫(kù)
Docker用Registry來保存用戶構(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è)版本。用戶可通過“[<倉(cāng)庫(kù)名>:<標(biāo)簽>]”的格式來指定具體是某個(gè)軟件某個(gè)版本的鏡像。如未給出標(biāo)簽,將以[latest]作為默認(rèn)標(biāo)簽。
本次使用的鏡像是registry:2,執(zhí)行如下命令自動(dòng)下載并啟動(dòng):
mkdir?-p?/home/tronlong/docker/myregistry sudo?docker?run?-d?-p?5000:5000?-v?/home/tronlong/docker/myregistry:/var/lib/registry?registry:2
參數(shù)說明:
-d:后臺(tái)啟動(dòng)容器。
-p:將容器的5000端口映射至Ubuntu的5000端口(5000是registry服務(wù)端口)。
-v:將容器"/var/lib/registry"目錄映射至Ubuntu的"/home/tronlong/docker/myregistry",用于存放鏡像數(shù)據(jù)。
執(zhí)行如下命令查看容器是否已啟動(dòng):
sudo?docker?ps
出現(xiàn)如下內(nèi)容說明容器已正常啟動(dòng):
通過瀏覽器訪問"http://192.168.10.101:5000/v2/_catalog"。
若返回如下內(nèi)容則說明registry已經(jīng)成功啟動(dòng):
192.168.10.101為Ubuntu的IP
因?yàn)镈ocker剛建立運(yùn)行,所以里面無(wú)任何鏡像內(nèi)容。至此,Docker環(huán)境已經(jīng)安裝完成。
2 構(gòu)建鏡像
在Ubuntu上新建工作目錄如**/home/tronlong/docker/dockerfile/**,并將產(chǎn)品資料“4-軟件資料LinuxFilesystemdocker”目錄下的文件系統(tǒng)壓縮包和產(chǎn)品資料“4-軟件資料Demoase-demosled_flashin”目錄下的可執(zhí)行文件拷貝至Ubuntu共享目錄下,再執(zhí)行如下命令拷貝至Docker工作目錄。
mkdir?/home/tronlong/docker/dockerfile cp?/mnt/hgfs/SharedFolders/led_flash?/home/tronlong/docker/dockerfile/ cp?/mnt/hgfs/SharedFolders/rootfs.tar?/home/tronlong/docker/dockerfile/
在"/home/tronlong/docker/dockerfile/"目錄下,創(chuàng)建Dockerfile文件:
cd?/home/tronlong/docker/dockerfile gedit?Dockerfile
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í)行如下命令來構(gòu)建鏡像。
sudo?docker?build?-t?192.168.10.101:5000/led_flash:v1.0?.//注意命令最后含有"." sudo?docker?images?//查看已構(gòu)建的鏡像
參數(shù)說明:
192.168.10.101:Ubuntu的IP地址;
-t:指定鏡像的名字及標(biāo)簽(name:tag)。
請(qǐng)執(zhí)行如下命令,將鏡像推送至本地倉(cāng)庫(kù)Registry。
sudo?docker?push?192.168.10.101:5000/led_flash:v1.0
Docker版本從1.3.X之后,與Docker Registry交互默認(rèn)使用https,然而前面搭建的私有倉(cāng)庫(kù)僅提供http服務(wù),因此當(dāng)與私有倉(cāng)庫(kù)交互時(shí)將出現(xiàn)上面的錯(cuò)誤提示??赏ㄟ^修改"/etc/docker/daemon.json"文件來解決該問題,請(qǐng)執(zhí)行如下命令修改daemon.json文件:
sudo?vi?/etc/docker/daemon.json
192.168.10.101為Ubuntu的IP。
{ "insecure-registries":?["192.168.10.101:5000"] }
執(zhí)行如下命令,重新啟動(dòng)Docker、Registry容器(通過指定ID),并重新推送鏡像至本地Registry。
sudo?/etc/init.d/docker?restart sudo?docker?ps?-a sudo?docker?start?0833de1304d9//以查詢得到的CONTAINER?ID號(hào)為準(zhǔn) sudo?docker?push?192.168.10.101:5000/led_flash:v1.0
使用瀏覽器訪問"http://192.168.10.101:5000/v2/_catalog",正常情況下可看到當(dāng)前倉(cāng)庫(kù)里已有的鏡像。
3 下載鏡像并運(yùn)行容器
(1)使用網(wǎng)線將創(chuàng)龍科技T113-i評(píng)估板ETH0(RGMII)網(wǎng)口連接至路由器,并確保和Ubuntu處于同一網(wǎng)絡(luò)下,評(píng)估板上電啟動(dòng),執(zhí)行如下命令下載鏡像并列舉出下載后的鏡像。
下載鏡像過程中將會(huì)打印警告和錯(cuò)誤信息,不影響功能正常使用,請(qǐng)忽略。
docker?pull?192.168.10.101:5000/led_flash:v1.0?//下載鏡像 docker?images?//列舉已下載的鏡像
若出現(xiàn)如下錯(cuò)誤,請(qǐng)執(zhí)行如下命令,通過修改"/etc/docker/daemon.json"文件來解決此問題,修改保存后,重新啟動(dòng)dockerd守護(hù)進(jìn)程。
?
vi?/etc/docker/daemon.json
請(qǐng)?jiān)赿aemon.json中添加如下內(nèi)容:
{ "insecure-registries":?["192.168.10.101:5000"] }
/etc/init.d/S60dockerd?restart
?
?
(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è)過程需要耗時(shí)約1min,請(qǐng)耐心等待。
docker?run?-d?--name?led_flash?-v?/sys/:/sys?2d17af57ec7e
參數(shù)說明:
-d:后臺(tái)運(yùn)行容器;
--name:為容器指定一個(gè)名稱;
-v:映射卷(將主機(jī)的目錄"/sys"映射至容器的"/sys");
2d17af57ec7e:鏡像ID,以docker images命令列舉的"IMAGE ID"為準(zhǔn)。
容器啟動(dòng)完成后,評(píng)估底板的用戶可編程指示燈閃爍。
(3)容器的基本操作
執(zhí)行如下命令,查看正在運(yùn)行的容器并進(jìn)入容器。
docker?ps?-a docker?exec?-it?2d7c23bd13c0?/bin/bash
參數(shù)說明:
-i:以交互模式運(yùn)行容器,通常與-t同時(shí)使用;
-t:為容器重新分配一個(gè)偽輸入終端,通常與-i同時(shí)使用;
2d7c23bd13c0:容器ID,以實(shí)際"CONTAINER ID"為準(zhǔn);
/bin/bash:在容器內(nèi)執(zhí)行"/bin/bash"命令。
執(zhí)行如下命令,退出容器。
exit
執(zhí)行如下命令,停止容器。此時(shí),評(píng)估底板的用戶可編程指示燈不再閃爍。
docker?stop?2d7c23bd13c0
執(zhí)行如下命令,啟動(dòng)容器。此時(shí),評(píng)估底板的用戶可編程指示燈閃爍。
docker?start?2d7c23bd13c0
備注:若運(yùn)行Docker時(shí),出現(xiàn)"x509: certificate signed by unknown authority"類似警告信息(如下圖),可通過修改/etc/docker/daemon.json文件解決。該警告是由于本機(jī)沒有遠(yuǎn)程倉(cāng)庫(kù)的證書文件導(dǎo)致。
修改的內(nèi)容:
{ "registry-mirrors":?["https://registry-1.docker.io"], "insecure-registries":?["https://registry-1.docker.io"] }
修改完成后,重新運(yùn)行Docker。
審核編輯:發(fā)貨
?
評(píng)論
查看更多