前言:Docker是一个开源应用程序容器引擎,允许开发人员将他们的应用程序和依赖包打包成可移植的镜像,然后发布到任何流行的Linux或Windows机器上,还可以实现虚拟化。容器完全使用沙箱机制,相互之间不会有任何接口。使用Docker,您可以像管理应用程序一样管理您的基础设施。通过利用Docker 快速发布、测试和部署代码的方法,可以显着缩短产品开发时间。
Docker容器适用于TI AM335x、AM437x、AM570x、AM5728等平台。本文讲解基于TI AM3352/54/59平台的Docker的安装和运行测试。
点击图片/备注查看产品信息
图1
01
Docker架构
Docker 采用客户端-服务器(C/S)架构。 Docker 客户端与Docker 守护进程进行通信,后者负责构建、运行和分发Docker 容器的繁重工作。 Docker 客户端和守护进程可以在同一系统上运行,或者Docker 客户端可以连接到远程Docker 守护进程。 Docker 客户端和守护进程使用REST API、UNIX 套接字或网络接口进行通信。
图2
更多详情请参考Docker官网链接:https://docs.docker.com/get-started/overview。
02
Docker安装
2.1 安装方法
(1)安装依赖包
打开Ubuntu,确保Ubuntu可以正常上网,执行以下命令安装Docker依赖包。
主机# sudo apt-get update
图3
主机# sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
图4
(2)添加Docker官方GPG密钥
主机#curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
图5
(3) 设置Docker Stable仓库
主机# echo 'deb [arch=amd64 签名者=/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
主机# sudo apt-get update
主机# sudo apt-get install docker-ce
图7
图8
(5) 验证Docker
执行以下命令,通过运行Docker自带的hello-world镜像来验证安装是否成功。程序运行后出现以下输出,表示Docker安装成功。
主机# sudo docker run hello-world
图9
更多参考信息请查阅官方手册:https://docs.docker.com/engine/install/ubuntu。
2.2 搭建本地镜像仓库
Docker使用Registry来保存用户构建的镜像。登记处分为两种类型:公共和私人。 Docker 运营的公共注册表称为Docker Hub。用户可以在Docker Hub中注册账户来共享和保存自己的镜像。 Docker的公共镜像仓库(https://hub.docker.com)提供了大量的镜像供用户使用。一个DockerRegistry可以包含多个仓库,每个仓库可以包含多个标签,每个标签对应一个镜像。通常,一个仓库会包含同一软件的不同版本的镜像,并且标签对应于该软件的每个版本。用户可以通过“[仓库名称:标签]”的格式指定某个软件的某个版本的镜像。如果没有给出标签,[latest] 将用作默认标签。
这次使用的镜像是registry:2。请执行以下命令自动下载并启动。
主机# mkdir -p /home/tronlong/docker/myregistry
主机# sudo docker run -d -p 5000:5000 -v/home/tronlong/docker/myregistry:/var/lib/registryregistry:2
参数说明:
-d:在后台启动容器。
-p:将容器的5000端口映射到Ubuntu的5000端口(5000是注册表服务端口)。
-v:将容器“/var/lib/registry”目录映射到Ubuntu的“/home/tronlong/docker/myregistry”,用于存储镜像数据。
图10
请执行以下命令检查容器是否已启动。如果出现以下内容,说明容器已正常启动。
主机# sudo docker ps
图11
请通过浏览器访问“http://192.168.0.84:5000/v2/_catalog”。如果返回以下内容,则说明注册表启动成功。 192.168.0.84是Ubuntu的IP。
图12
由于它刚刚创建并运行,所以里面没有图像内容。至此,Docker环境安装完成。
03
打造形象
请在Ubuntu上新建工作目录“/home/tronlong/docker/dockerfile/”,并在产品信息“4-Software Information\Linux\Filesystem\”中添加文件系统压缩包rootfs-processor-sdk-04.03.00.05将“目录-54428dd3-v2.1-docker.tar.gz以及产品信息“4-Software Information\Demo\tl-linux-application\base-demos\tl_led_flash\bin\”目录中的可执行文件复制到Ubuntu共享目录,然后执行以下命令复制到工作目录。
主机# mkdir /home/tronlong/docker/dockerfile
主机# cp /mnt/hgfs/SharedFolders/tl_led_flash /home/tronlong/docker/dockerfile/
主机# 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 文件。
主机# gedit Dockerfile
图14
图15
Dockerfile文件内容如下:
从头开始#基于空基础镜像构建新镜像
# 设置工作目录
WORKDIR /home/root#设置CMD、COPY和AND的工作目录
# 解压文件系统
ADD rootfs-processor-sdk-04.03.00.05-54428dd3-v2.1-docker.tar.gz /#解压文件系统
#将文件复制到图像
COPY tl_led_flash .#将可执行文件复制到镜像的'/home/root/'目录下
# 容器启动时执行的Shell命令
# CMD ['可执行文件','param1','param2']
CMD ['./tl_led_flash', '-n 3']# 容器启动时执行的Shell命令。这是执行LED 闪烁程序的命令。
在Dockerfile文件所在目录执行以下命令构建镜像。
Host# sudo docker build -t192.168.0.84:5000/tl_led_flash:v1.0 .//注意命令中带“.”在最后
Host# sudo docker images//查看构建好的镜像
参数说明:
192.168.0.84:Ubuntu的IP地址;
-t:指定镜像的名称和标签(name:tag)。
图16
请执行以下命令将镜像推送到本地存储库Registry。
主机# sudo docker push 192.168.0.84:5000/tl_led_flash:v1.0
图17
从Docker 版本1.3 开始。这个问题可以通过修改“/etc/docker/daemon.json”文件来解决。请执行以下命令。 192.168.0.84是Ubuntu的IP。
主机# sudovi/etc/docker/daemon.json
图18
请在daemon.json中添加以下配置内容:
{
'不安全注册表': ['192.168.0.84:5000']
}
执行以下命令重启Docker和Registry容器(通过指定ID),并将镜像重新推送到本地Registry。
主机# sudo /etc/init.d/docker restart
主机# sudo docker ps -a
Host# sudo docker start 4b0a821ec816//以查询得到的ID号为准
主机# 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
04
下载镜像并运行容器
(1) 下载镜像。
请使用网线将评估板的网口连接至路由器,并确保与Ubuntu处于同一网络。打开评估板电源并执行以下命令来下载镜像。
目标# docker pull 192.168.0.84:5000/tl_led_flash:v1.0
目标# docker 镜像
图22
如果出现如下错误,可以通过修改“/etc/docker/daemon.json”文件来解决。请执行以下命令。
图23
目标# vi /etc/docker/daemon.json
Target# systemctl restart docker.socket //重启Docker服务
图24
请在daemon.json中添加以下配置内容:
{
'不安全注册表': ['192.168.0.84:5000']
}
(2) 创建并启动容器。
目标# docker run -d --name tl_led_flash -v /sys/:/sys0a4ece7276bb
参数说明:
-d: 在后台运行容器;
--name: 指定容器的名称;
-v: 映射卷(将主机的目录'/sys'映射到容器的'/sys');
0a4ece7276bb:图片ID,以实际'IMAGE ID'为准。
图25
容器启动后,评估基板上的三个用户LED灯同时闪烁。
注意:如果出现如下错误,需要先创建“/etc/resolv.conf”文件,然后再创建容器。
图26
(3)容器的基本操作
执行以下命令查看正在运行的容器并进入容器。
目标# dockerps -a
目标# docker exec -it085b59f6c76e/bin/bash
参数说明:
-i:以交互方式运行容器,通常与-t一起使用;
-t:给容器重新分配一个伪输入终端,通常与-i一起使用;
085b59f6c76e:容器ID,以实际“CONTAINER ID”为准;
/bin/bash:在容器内执行“/bin/bash”命令。
图27
执行以下命令退出容器。
重击#exit
图28
执行以下命令来停止容器。此时,评估板上的三个用户LED灯不再闪烁。
目标# docker stop 085b59f6c76e
图29
执行以下命令启动容器。此时,评估底板上的三个用户LED灯同时闪烁。
目标# docker start085b59f6c76e
图30