前 言
本文檔從Docker安裝搭建、鏡像構建與倉庫配置、容器部署與運行等方面提供指導,旨在幫助用戶掌握容器化應用的構建流程。
開發環境
Windows開發環境:Windows7 64bit、Windows10 64bit、
Linux開發環境:VMware16.2.5、Ubuntu20.04.6 64bit
sysroot:rk3562-Tronlong-Desktop-20.04-sysroot-[版本號].tar.gz
系統版本:Tronlong-Desktop20.04(類Ubuntu)、Linux-5.10.209、U-Boot-2017.09
備注:本文基于2GByte LPDDR4X、16GByte eMMC配置單板機進行演示。
術語表
為便于閱讀,下表對文檔出現的關鍵術語進行解釋;對于廣泛認同釋義的術語,在此不做注釋。

注意事項
(1)無特殊說明情況下,本文默認從eMMC啟動系統,使用DEBUG作為調試串口,通過路由器與PC機進行網絡連接。請確保PC機、Ubuntu系統可正常訪問互聯網。
(2)請先參考《應用開發手冊》完成應用開發環境搭建并參考《系統使用手冊》安裝Docker組件。
1Docker技術概要
1.1Docker概述
Docker是一個開源的應用容器引擎,讓開發者可打包他們的應用以及依賴包至一個可移植的鏡像中,然后發布至任何流行的Linux或Windows機器上,亦可實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口。使用Docker,可像管理應用程序一樣管理基礎結構。通過利用Docker的快速發布、測試和部署代碼的方法,可顯著減少產品開發時間。
1.2Docker架構
Docker使用客戶端——服務器(C/S)體系結構。Docker客戶端與Docker守護進程進行通信,后者執行構建、運行和分發Docker容器的繁重工作。Docker客戶端和守護進程可在同一個系統上運行,亦可將Docker客戶端連接至遠程Docker守護進程。Docker客戶端和守護進程使用REST API、UNIX套接字或網絡接口進行通信。
圖 1
更多詳情請可參考Docker官網鏈接:https://docs.docker.com/get-started/overview。
2Docker安裝
2.1使用存儲庫方式安裝
(1)安裝依賴包
打開Ubuntu,確保Ubuntu可正常訪問互聯網,執行如下命令進行安裝Docker依賴包。
Host# sudo apt-get update
圖 2
Host# sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
圖 3
(2)添加Docker官方GPG密鑰
Host# curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
圖 4
(3)設置Docker Stable存儲庫
Host# echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
圖 5
(4)安裝Docker
Host# sudo apt-get update
Host# sudo apt-get install docker-ce docker-ce-cli containerd.io
圖 6
圖 7
(5)驗證Docker安裝完成
執行如下命令,輸出如下內容則表示Docker安裝成功。
Host# docker --version
圖 8
更多參考信息,請查閱官方手冊:https://docs.docker.com/engine/install/ubuntu。
2.2搭建本地鏡像倉庫
Docker用Registry來保存用戶構建的鏡像。Registry分為公共和私有兩種。Docker公司運營的公共Registry叫做Docker Hub,用戶可在Docker Hub注冊賬號,分享并保存自己的鏡像。Docker公司的公共鏡像倉庫(https://hub.docker.com)提供了龐大的鏡像集合供用戶使用。一個Docker Registry中可包含多個倉庫,每個倉庫可包含多個標簽(Tag),每個標簽對應一個鏡像。通常,一個倉庫會包含同一個軟件不同版本的鏡像,而標簽對應該軟件的各個版本。用戶可通過“[<倉庫名>:<標簽>]”的格式來指定具體是某個軟件某個版本的鏡像。如未給出標簽,將以[latest]作為默認標簽。
由于現階段無法從官方獲取Docker鏡像,因此需使用一個完整的Docker鏡像進行離線部署。請按照如下步驟移植Registry鏡像并加載Docker鏡像到本地倉庫。
執行如下命令,創建Docker工作目錄后,將產品資料“4-軟件資料Demoplatform-demosdockerimage”目錄下registry_image.tar文件拷貝至該目錄,然后導入Registry鏡像并查看該鏡像。
Host# mkdir -p /home/tronlong/docker
Host# cddocker/
Host# sudo docker load -i /home/tronlong/docker/registry_image.tar
Host# sudodocker images
圖 9
本次使用的鏡像是registry:2,請執行如下命令自動下載并啟動。
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",用于存放鏡像數據。
圖 10
請執行如下命令,查看容器是否已啟動,出現如下內容說明容器已正常啟動。
Host# sudo docker ps
圖 11
請通過瀏覽器訪問"http://192.168.13.19:5000/v2/_catalog",如返回如下內容則說明registry已經成功啟動,192.168.13.19為Ubuntu的IP。
圖 12
由于剛建立運行,故里面無任何鏡像內容。至此,Docker環境安裝完成。
3構建鏡像
3.1構建單個鏡像
請在Ubuntu上新建工作目錄"/home/tronlong/docker/dockerfile/",并將產品資料“4-軟件資料Demoplatform-demosdockerimage”目錄下的文件系統壓縮包和產品資料“4-軟件資料Demobase-demosled_flashbin”目錄下的可執行文件拷貝至Ubuntu共享目錄下,再執行如下命令拷貝至Docker工作目錄。
Host# mkdir /home/tronlong/docker/dockerfile
Host# cp /mnt/hgfs/ShareFolder/rootfs.tar /home/tronlong/docker/dockerfile/
Host# cp /mnt/hgfs/ShareFolder/led_flash /home/tronlong/docker/dockerfile/
圖 13
在"/home/tronlong/docker/dockerfile/"目錄下,創建Dockerfile文件,并編寫如下內容。
Host# cd /home/tronlong/docker/dockerfile
Host# gedit Dockerfile
圖 14
圖 15
Dockerfile文件內容如下:
FROM scratch //基于空的基礎鏡像構建新的鏡像
# Set work directory
WORKDIR /root //為CMD、COPY和AND設置工作目錄
# Decompress the file system
ADD rootfs.tar / //解壓文件系統
# Copy file to image
COPY led_flash . //拷貝可執行文件至鏡像的"/home/root/"目錄下
# Shell command executed when the container is started
# CMD ["executable","param1","param2"]
CMD ["./led_flash", "-n 1"] //容器啟動時執行的shell命令,此處為執行LED閃爍程序的命令
在Dockerfile文件所在的目錄下執行如下命令,進行構建鏡像。
Host# sudo docker build -t 192.168.13.19:5000/led_flash:v1.0 . //注意命令最后含有"."
Host# sudo docker images //查看已構建的鏡像
參數說明:
192.168.13.19:Ubuntu的IP地址;
-t:指定鏡像的名字及標簽(name:tag)。
圖 16
請執行如下命令,將鏡像推送至本地倉庫Registry。
Host# sudo docker push 192.168.13.19:5000/led_flash:v1.0
圖 17
Docker版本從1.3.X之后,與Docker Registry交互默認使用https。由于前面搭建的私有倉庫僅提供http服務,因此當與私有倉庫交互時將出現上面的錯誤提示。可通過修改"/etc/docker/daemon.json"文件來解決該問題,請執行如下命令,192.168.13.19為Ubuntu的IP。
Host# sudovi/etc/docker/daemon.json
圖 18
圖 19
請在daemon.json中添加如下配置內容:
{
"insecure-registries": ["192.168.13.19:5000"]
}
執行如下命令,重新啟動Docker、Registry容器(通過指定ID),并重新推送鏡像至本地Registry。
Host# sudo /etc/init.d/docker restart
Host# sudo docker ps -a
Host# sudo docker start 91f664c0784e //以查詢得到的CONTAINER ID號為準
Host# sudo docker push 192.168.13.19:5000/led_flash:v1.0
圖 20
通過瀏覽器訪問"http://192.168.13.19:5000/v2/_catalog",即可看到當前倉庫里已有的鏡像。
圖 21
3.2構建多個鏡像
請先參考“構建單個鏡像”章節完成單個鏡像led_flash的構建。將產品資料“4-軟件資料Demoplatform-demosdockershell”目錄下的所有腳本文件拷貝至Ubuntu共享目錄下,再執行如下命令拷貝至Docker工作目錄。
Host# cp /mnt/hgfs/ShareFolder/docker_container_1_echo.sh /home/tronlong/docker/dockerfile/
Host# cp /mnt/hgfs/ShareFolder/docker_container_2_echo.sh/home/tronlong/docker/dockerfile/
Host# cp /mnt/hgfs/ShareFolder/docker_container_3_echo.sh /home/tronlong/docker/dockerfile/
圖 22
在"/home/tronlong/docker/dockerfile/"目錄下,修改Dockerfile文件。
Host# cd /home/tronlong/docker/dockerfile
Host# gedit Dockerfile
圖 23
圖 24
修改內容如下:
COPY docker_container_1_echo.sh . //拷貝腳本文件至鏡像的"/home/root/"目錄下
# CMD ["./led_flash", "-n 1"] //添加注釋符"#"
在Dockerfile文件所在的目錄下執行如下命令,進行構建鏡像。
Host# sudo docker build -t 192.168.13.19:5000/docker_container_1_echo.sh:v1.0 . //注意命令最后含有"."
Host# sudo docker images //查看已構建的鏡像
參數說明:
192.168.13.19:Ubuntu的IP地址;
-t:指定鏡像的名字及標簽(name:tag)。
圖 25
請執行如下命令,將鏡像推送至本地倉庫Registry。
Host# sudo docker push 192.168.13.19:5000/docker_container_1_echo.sh:v1.0
備注:由于構建Docker鏡像使用的是同一個文件系統,相同的內容將會重疊,因此將會繼承第一個led_flash鏡像已經上傳的內容(文件系統)。
圖 26
通過瀏覽器訪問"http://192.168.13.19:5000/v2/_catalog",即可看到當前倉庫里已有的鏡像。
圖 27
"docker_container_2_echo.sh"、"docker_container_3_echo.sh"文件參考以上類似步驟構建鏡像。
重新通過瀏覽器訪問"http://192.168.13.19:5000/v2/_catalog",即可看到當前倉庫已包含多個鏡像。
圖 28
由于篇幅過長等原因,部分內容均不逐一展示,如需獲取完整版詳細資料,請關注Tronlong創龍科技微信公眾號或官網,或者評論區留言,感謝您的支持!
審核編輯 黃宇
-
單片機
+關注
關注
6078文章
45550瀏覽量
672761 -
Docker
+關注
關注
0文章
535瀏覽量
14367 -
RK3562
+關注
關注
0文章
107瀏覽量
737
發布評論請先 登錄
RK3562 單板機 Linux-RT 系統開發指南:內核配置、實時性優化與案例詳解
RK3562 單板機圖形用戶界面開發完全手冊:Qt Creator 配置與 LVGL 案例詳解(二)
RK3562 單板機嵌入式 ROS2 開發指南:環境搭建與工程編譯
SBC8100單板機設計及使用指南
RK3562單板機系統使用與開發手冊:基礎操作、升級部署與工具鏈配置(一)
3562 單板機 Linux 系統固化完全指南:從 SD 卡啟動到 eMMC 永久部署
RK3562 單板機系統開發完全手冊:U-Boot/Kernel/Rootfs 開發與性能優化
RK3562 單板機 Linux 應用開發實戰手冊:LED/CAN/TCP/UART 案例與 Python 開發(二)
RK3562 單板機圖形用戶界面開發完全手冊:Qt Creator 配置與 LVGL 案例詳解(一)
RK3562 單板機多媒體開發完全手冊:視頻輸入輸出與 GStreamer 案例詳解(二)
RK3562 單板機嵌入式 eMMC 健康監測開發指南:數據采集與狀態分析
RK3576 單板機系統使用手冊:配置、升級與組件安裝指南(一)
RK3576 單板機系統使用手冊:配置、升級與組件安裝指南(二)
RK3576 單板機系統使用手冊:配置、升級與組件安裝指南(三)
RK3562 單板機 Docker 開發手冊:鏡像構建、倉庫搭建與容器部署指南
評論