創龍首頁 >關于創龍 > 新聞資訊 > 技術文章

聯系我們

Contact Us

公司總機:020-8998-6280

技術熱線:020-3893-9734

技術郵箱:support@tronlong.com

銷售郵箱:sales@tronlong.com

Docker容器部署-以TI AM335x平臺為例

2021/12/20

前言:Docker是一個開源的應用容器引擎,讓開發者可打包他們的應用以及依賴包到一個可移植的鏡像中,然后發布到任何流行的Linux或Windows機器上,亦可實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口。使用Docker,可像管理應用程序一樣管理基礎結構。通過利用Docker的快速發布、測試和部署代碼的方法,可顯著減少產品開發時間。

Docker容器適用于TI AM335x、AM437x、AM570x、AM5728等平臺,本文基于TI AM3352/54/59平臺為您講解Docker的安裝及運行測試。


點擊圖片/圖注即可查看該產品資料↓↓↓



圖 1

產品資料(用戶手冊、核心板硬件資料、產品規格書)

請點擊鏈接或掃描長按識別下方二維碼獲取:http://site.tronlong.com/pfdownload





1、Docker架構

Docker使用客戶端——服務器(C/S)體系結構。Docker客戶端與Docker守護進程進行通信,后者執行構建、運行和分發Docker容器的繁重工作。Docker客戶端和守護進程可在同一個系統上運行,亦可將Docker客戶端連接至遠程Docker守護進程。Docker客戶端和守護進程使用REST API、UNIX套接字或網絡接口進行通信。





圖 2


更多詳情請可參考Docker官網鏈接:https://docs.docker.com/get-started/overview。


2、Docker安裝

2.1 安裝方法

(1) 安裝依賴包

打開Ubuntu,確保Ubuntu可正常訪問互聯網,執行如下命令進行安裝Docker依賴包。

Host#  sudo apt-get update




圖 3


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


圖 4


(2) 添加Docker官方GPG密鑰

Host#  curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg


 圖 5


(3) 設置Docker Stable存儲庫

Host#  echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.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



 圖 7



圖 8

(5) 驗證Docker

執行如下命令,通過運行Docker自帶的hello-world鏡像來驗證是否已安裝成功。程序運行后,輸出如下內容則表示Docker安裝成功。

Host#  sudo docker run hello-world


圖 9



更多參考信息,請查閱官方手冊: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]作為默認標簽。

本次使用的鏡像是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.0.84:5000/v2/_catalog”,如返回如下內容則說明registry已經成功啟動,192.168.0.84為Ubuntu的IP。


圖 12


由于剛建立運行,故里面無任何鏡像內容。至此,Docker環境安裝完成。


3、構建鏡像

請在Ubuntu上新建工作目錄“/home/tronlong/docker/dockerfile/”,并將產品資料“4-軟件資料\Linux\Filesystem\”目錄下的文件系統壓縮包rootfs-processor-sdk-04.03.00.05-54428dd3-v2.1-docker.tar.gz和產品資料“4-軟件資料\Demo\tl-linux-application\base-demos\tl_led_flash\bin\”目錄下的可執行文件拷貝至Ubuntu共享目錄下,再執行如下命令拷貝至工作目錄。

Host#  mkdir /home/tronlong/docker/dockerfile

Host#  cp /mnt/hgfs/SharedFolders/tl_led_flash /home/tronlong/docker/dockerfile/

Host#  cp /mnt/hgfs/SharedFolders/rootfs-processor-sdk-04.03.00.05-54428dd3-v2.1-docker.tar.gz /home/tronlong/docker/dockerfile/

圖 13



在工作目錄“/home/tronlong/docker/dockerfile/”下,新建Dockerfile文件。

Host#  gedit Dockerfile


圖 14



圖 15

Dockerfile文件內容如下:

FROM scratch#基于空的基礎鏡像構建新的鏡像

# Set work directory

WORKDIR /home/root#為CMD、COPY和AND設置工作目錄

# Decompress the file system

ADD rootfs-processor-sdk-04.03.00.05-54428dd3-v2.1-docker.tar.gz /#解壓文件系統

# Copy file to image

COPY tl_led_flash .#拷貝可執行文件至鏡像的"/home/root/"目錄下

# Shell command executed when the container is started

# CMD ["executable","param1","param2"]

CMD ["./tl_led_flash", "-n 3"]#容器啟動時執行的shell命令,此處為執行LED閃爍程序的命令




在Dockerfile文件所在的目錄下執行如下命令,進行構建鏡像。

Host#  sudo docker build -t 192.168.0.84:5000/tl_led_flash:v1.0 .//注意命令最后含有“.”

Host#  sudo docker images//查看已構建的鏡像

參數說明:

192.168.0.84:Ubuntu的IP地址;

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


圖 16


請執行如下命令,將鏡像推送至本地倉庫Registry。

Host#  sudo docker push 192.168.0.84:5000/tl_led_flash:v1.0


圖 17


Docker版本從1.3.X之后,與Docker Registry交互默認使用https,然而前面搭建的私有倉庫僅提供http服務,因此當與私有倉庫交互時將出現上面的錯誤提示??赏ㄟ^修改“/etc/docker/daemon.json”文件來解決該問題,請執行如下命令,192.168.0.84為Ubuntu的IP。

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


圖 18


請在daemon.json中添加如下配置內容:

{

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

}

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

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

Host#  sudo docker ps -a

Host#  sudo docker start 4b0a821ec816//以查詢得到的ID號為準

Host#  sudo docker push 192.168.0.84:5000/tl_led_flash:v1.0

 圖 19



備注:若出現如下錯誤,可執行"sudo service docker restart"重啟Docker。


圖 20


通過瀏覽器訪問“http://192.168.0.84:5000/v2/_catalog”,即可看到當前倉庫里已有的鏡像。


圖 21


4、下載鏡像并運行容器

(1) 下載鏡像。

請使用網線將評估板網口連接至路由器,并確保和Ubuntu處于同一網絡下,評估板上電啟動,執行如下命令下載鏡像。

Target#  docker pull 192.168.0.84:5000/tl_led_flash:v1.0

Target#  docker images


 圖 22

 
若出現如下錯誤,可通過修改“/etc/docker/daemon.json”文件來解決此問題,請執行如下命令。


圖 23


Target#  vi /etc/docker/daemon.json

Target#  systemctl restart docker.socket//重啟Docker服務



圖 24


請在daemon.json中添加如下配置內容:

{

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

}

(2) 創建并啟動容器。

Target#  docker run -d --name tl_led_flash -v /sys/:/sys 0a4ece7276bb

參數說明:

-d: 后臺運行容器;

--name: 為容器指定一個名稱;

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

0a4ece7276bb:鏡像ID,以實際"IMAGE ID"為準。

 

圖 25


容器啟動完成后,評估底板的3個用戶LED燈同時閃爍。

備注:若出現如下錯誤,需先創建“/etc/resolv.conf”文件,再進行創建容器操作。


圖 26


(3) 容器的基本操作

執行如下命令,查看正在運行的容器并進入容器。

Target#  docker ps -a

Target#  docker exec -it 085b59f6c76e /bin/bash

參數說明:

-i:以交互模式運行容器,通常與-t同時使用;

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

085b59f6c76e:容器ID,以實際“CONTAINER ID”為準;

/bin/bash:在容器內執行“/bin/bash”命令。


 圖 27


執行如下命令,退出容器。

Bash#  exit

圖 28



執行如下命令,停止容器。此時,評估底板的3個用戶LED燈不再閃爍。

Target#   docker stop 085b59f6c76e

 

圖 29


執行如下命令,啟動容器。此時,評估底板的3個用戶LED燈同時閃爍。

Target#  docker start 085b59f6c76e


 圖 30



創龍官方微信公眾號

Copyright © 2013~2025 廣州創龍電子科技有限公司 All Rights Reserved  | 粵ICP備15055271號