1 Docker 架構(gòu)
Docker 使用客戶端——服務(wù)器(C/S)體系結(jié)構(gòu)。Docker 客戶端與 Docker 守護(hù)進(jìn)程進(jìn)行
通信,后者執(zhí)行構(gòu)建、運行和分發(fā) Docker 容器的繁重工作。Docker 客戶端和守護(hù)進(jìn)程可
在同一個系統(tǒng)上運行,亦可將 Docker 客戶端連接至遠(yuǎn)程 Docker 守護(hù)進(jìn)程。Docker 客戶
端和守護(hù)進(jìn)程使用 REST API、UNIX 套接字或網(wǎng)絡(luò)接口進(jìn)行通信。
更多詳情請可參考 Docker 官網(wǎng)鏈接:https://docs.docker.com/get-started/overview。
2 Docker 安裝
2.1 安裝方法
(1) 安裝依賴包
打開 Ubuntu,確保 Ubuntu 可正常訪問互聯(lián)網(wǎng),執(zhí)行如下命令進(jìn)行安裝 Docker 依賴
包。
Host# sudo apt-get update
Host# sudo apt-get install ca-certificates curl gnupg lsb-release
(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
(3) 設(shè)置 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 /e
tc/apt/sources.list.d/docker.list > /dev/null
(4) 安裝 Docker
Host# sudo apt-get update
Host# sudo apt-get install docker-ce docker-ce-cli containerd.io
(5) 驗證 Docker
執(zhí)行如下命令,通過運行 Docker 自帶的 hello-world 鏡像來驗證是否已安裝成功。程
序運行后,輸出如下內(nèi)容則表示 Docker 安裝成功。
Host# sudo docker run hello-world
更多參考信息,請查閱官方手冊:https://docs.docker.com/engine/install/ubuntu。
2.2 搭建本地鏡像倉庫
Docker 用 Registry 來保存用戶構(gòu)建的鏡像。Registry 分為公共和私有兩種。Docker 公
司運營的公共 Registry 叫做 Docker Hub,用戶可在 Docker Hub 注冊賬號,分享并保存自
己的鏡像。Docker 公司的公共鏡像倉庫(https://hub.docker.com)提供了龐大的鏡像集合供
用戶使用。一個 Docker Registry 中可包含多個倉庫,每個倉庫可包含多個標(biāo)簽(Tag),每
個標(biāo)簽對應(yīng)一個鏡像。通常,一個倉庫會包含同一個軟件不同版本的鏡像,而標(biāo)簽對應(yīng)
該軟件的各個版本。用戶可通過“[<倉庫名>:<標(biāo)簽>]”的格式來指定具體是某個軟件某
個版本的鏡像。如未給出標(biāo)簽,將以[latest]作為默認(rèn)標(biāo)簽。
本次使用的鏡像是 registry:2,請執(zhí)行如下命令自動下載并啟動。
Host# mkdir -p /home/tronlong/docker/registry
Host# sudo docker run -d -p 5000:5000 -v /home/tronlong/docker/registry/:/var/lib/re
gistry registry:2
參數(shù)說明:
-d:后臺啟動容器。
-p:將容器的 5000 端口映射至 Ubuntu 的 5000 端口(5000 是 registry 服務(wù)端口)。
-v:將容器"/var/lib/registry"目錄映射至 Ubuntu 的"/home/tronlong/docker/registry",用于
存放鏡像數(shù)據(jù)。
請執(zhí)行如下命令,查看容器是否已啟動,出現(xiàn)如下內(nèi)容說明容器已正常啟動。
Host# sudo docker ps
請通過瀏覽器訪問"http://192.168.31.32:5000/v2/_catalog",如返回如下內(nèi)容則說明 r
egistry 已經(jīng)成功啟動,192.168.31.32 為 Ubuntu 的 IP。
由于剛建立運行,故里面無任何鏡像內(nèi)容。至此,Docker 環(huán)境安裝完成。
3 構(gòu)建鏡像
請在 Ubuntu 上新建工作目錄"/home/tronlong/docker/dockerfile/",并將產(chǎn)品資料“4
-軟件資料LinuxFilesystemdocker”目錄下的文件系統(tǒng)壓縮包和產(chǎn)品資料“4-軟件資料
Demobase-demosled_flashbin”目錄下的可執(zhí)行文件拷貝至 Ubuntu 共享目錄下,再執(zhí)
行如下命令拷貝至 Docker 工作目錄。
Host# mkdir -p /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/
在"/home/tronlong/docker/dockerfile/"目錄下,創(chuàng)建 Dockerfile 文件,并編寫如下內(nèi)容。
Host# cd /home/tronlong/docker/dockerfile
Host# 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 2"]
#容器啟動時執(zhí)行的 shell 命令,此處為執(zhí)行 LED 閃爍程序的命令
在 Dockerfile 文件所在的目錄下執(zhí)行如下命令,進(jìn)行構(gòu)建鏡像。
Host# sudo docker build -t 192.168.31.32:5000/led_flash:v1.0 .//注意命令最后含有"."
Host# sudo docker images
//查看已構(gòu)建的鏡像
參數(shù)說明:
192.168.31.32:Ubuntu 的 IP 地址;
-t:指定鏡像的名字及標(biāo)簽(name:tag)。
請執(zhí)行如下命令,將鏡像推送至本地倉庫 Registry。
Host# sudo docker push 192.168.31.32:5000/led_flash:v1.0
Docker 版本從 1.3.X 之后,與 Docker Registry 交互默認(rèn)使用 https,然而前面搭建的
私有倉庫僅提供 http 服務(wù),因此當(dāng)與私有倉庫交互時將出現(xiàn)上面的錯誤提示。可通過修
改"/etc/docker/daemon.json"文件來解決該問題,請執(zhí)行如下命令,192.168.31.32 為 Ubu
ntu 的 IP。
Host# sudo vi /etc/docker/daemon.json
圖 18
請在 daemon.json 中添加如下配置內(nèi)容:
{
"insecure-registries": ["192.168.31.32:5000"]
}
執(zhí)行如下命令,重新啟動 Docker、Registry 容器(通過指定 ID),并重新推送鏡像至
本地 Registry。
Host# sudo /etc/init.d/docker restart
Host# sudo docker ps -a
Host# sudo docker start d671bd37669f
//以查詢得到的 CONTAINER ID 號為準(zhǔn)
Host# sudo docker push 192.168.31.32:5000/led_flash:v1.0
通過瀏覽器訪問"http://192.168.31.32:5000/v2/_catalog",即可看到當(dāng)前倉庫里已有的
鏡像。
4 下載鏡像并運行容器
(1) 請使用網(wǎng)線將評估板 ETH0 RGMII 網(wǎng)口連接至路由器,并確保和 Ubuntu 處于同一
網(wǎng)絡(luò)下,評估板上電啟動,執(zhí)行如下命令下載鏡像并列舉出下載后的鏡像。
Target#
docker pull 192.168.31.32:5000/led_flash:v1.0
//下載鏡像
Target#
docker images
//列舉已下載的鏡像
若出現(xiàn)如下錯誤,請執(zhí)行如下命令,通過修改"/etc/docker/daemon.json"文件來解決
此問題,修改保存后,重新啟動 docker。
Target#
vi /etc/docker/daemon.json
請在 daemon.json 中添加如下配置內(nèi)容:
{
"insecure-registries": ["192.168.31.32:5000"]
}
Target#
/etc/init.d/S60dockerd restart
//重新啟動 docker
(2) 創(chuàng)建并啟動容器。由于 Docker 使用 VFS 存儲驅(qū)動程序,當(dāng)創(chuàng)建容器時,需要先
創(chuàng)建容器層,該容器層需要對上一層進(jìn)行“深拷貝”,因此完成創(chuàng)建并啟動容器整個
過程需要耗時約 1min,請耐心等待。
Target#
docker run -d --name led_flash -v /sys/:/sys 99024551b31b
參數(shù)說明:
-d:后臺運行容器;
--name:為容器指定一個名稱;
-v:映射卷(將主機的目錄"/sys"映射至容器的"/sys");
99024551b31b:鏡像 ID,以 docker images 命令列舉的"IMAGE ID"為準(zhǔn)。
容器啟動完成后,評估底板的 2 個用戶可編程指示燈同時閃爍。
(3) 容器的基本操作
執(zhí)行如下命令,查看正在運行的容器并進(jìn)入容器。
Target#
docker ps -a
Target#
docker exec -it 39e1f65efff8 /bin/bash
參數(shù)說明:
-i:以交互模式運行容器,通常與-t 同時使用;
-t:為容器重新分配一個偽輸入終端,通常與-i 同時使用;
39e1f65efff8:容器 ID,以實際"CONTAINER ID"為準(zhǔn);
/bin/bash:在容器內(nèi)執(zhí)行"/bin/bash"命令。
執(zhí)行如下命令,退出容器。
Bash# exit
執(zhí)行如下命令,停止容器。此時,評估底板的 2 個用戶可編程指示燈不再閃爍。
Target#
docker stop 39e1f65efff8
執(zhí)行如下命令,啟動容器。此時,評估底板的 2 個用戶可編程指示燈同時閃爍。
Target#
docker start 39e1f65efff8
.
審核編輯 黃宇
審核編輯 黃宇
-
Docker
+關(guān)注
關(guān)注
0文章
458瀏覽量
11856
發(fā)布評論請先 登錄
相關(guān)推薦
評論