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