前 言
本指导文档适用开发环境:
Windows开发环境:Windows 7 64bit、Windows 10 64bit
Linux开发环境:VMware16.2.5、Ubuntu20.04.6 64bit
U-Boot:U-Boot-2017.09
Kernel:Linux-5.10.160
Debian:Debian11
LinuxSDK:LinuxSDK-[版本号](基于rk3588_linux_release_v1.2.1_20230720)
Docker是一个开源的应用容器引擎,让开发者可打包他们的应用以及依赖包至一个可移植的镜像中,然后发布至任何流行的Linux或Windows机器上,亦可实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。使用Docker,可像管理应用程序一样管理基础结构。通过利用Docker的快速发布、测试和部署代码的方法,可显著减少产品开发时间。
Docker架构
Docker使用客户端——服务器(C/S)体系结构。Docker客户端与Docker守护进程进行通信,后者执行构建、运行和分发Docker容器的繁重工作。Docker客户端和守护进程可在同一个系统上运行,亦可将Docker客户端连接至远程Docker守护进程。Docker客户端和守护进程使用REST API、UNIX套接字或网络接口进行通信。
图 1
更多详情请可参考Docker官网链接:https://docs.docker.com/get-started/overview。
Docker安装
安装方法
(1)安装依赖包
打开Ubuntu,确保Ubuntu可正常访问互联网,执行如下命令进行安装Docker依赖包。
Host# sudo apt-get update
图 2
Host# sudo apt-get install ca-certificates curl gnupg lsb-release
图 3
(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
图 4
(3)设置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 /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自带的hello-world镜像来验证是否已安装成功。程序运行后,输出如下内容则表示Docker安装成功。
Host# sudo docker run hello-world
图 8
更多参考信息,请查阅官方手册:https://docs.docker.com/engine/install/ubuntu。
搭建本地镜像仓库
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",用于存放镜像数据。
图 9
请执行如下命令,查看容器是否已启动,出现如下内容说明容器已正常启动。
Host# sudo docker ps
图 10
请通过浏览器访问"http://192.168.13.51:5000/v2/_catalog",如返回如下内容则说明registry已经成功启动,192.168.13.51为Ubuntu的IP。
图 11
因为Docker刚建立运行,所以里面无任何镜像内容。至此,Docker环境安装完成。
构建镜像
构建单个镜像
请在Ubuntu上新建工作目录"/home/tronlong/docker/dockerfile/",并将产品资料“4-软件资料DebianFilesystemdocker”目录下的文件系统压缩包和产品资料“4-软件资料Demobase-demosled_flashbin”目录下的可执行文件拷贝至Ubuntu共享目录下,再执行如下命令拷贝至Docker工作目录。
Host# mkdir /home/tronlong/docker/dockerfile
Host# cp /mnt/hgfs/SharedFolders/led_flash /home/tronlong/docker/dockerfile/
Host# cp /mnt/hgfs/SharedFolders/rootfs-v1.1-gc740ad9.tar/home/tronlong/docker/dockerfile/
图 12
在"/home/tronlong/docker/dockerfile/"目录下,创建Dockerfile文件,并编写如下内容。
Host# cd /home/tronlong/docker/dockerfile
Host# gedit Dockerfile
图 13
图 14
Dockerfile文件内容如下:
FROM scratch #基于空的基础镜像构建新的镜像
# Set work directory
WORKDIR /root #为CMD、COPY和AND设置工作目录
# Decompress the file system
ADD rootfs-v1.1-gc740ad9.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 2"] #容器启动时执行的shell命令,此处为执行LED闪烁程序的命令
在Dockerfile文件所在的目录下执行如下命令,进行构建镜像。
Host# sudo docker build -t 192.168.13.51:5000/led_flash:v1.0 . //注意命令最后含有"."
Host# sudo docker images //查看已构建的镜像
参数说明:
192.168.13.51:Ubuntu的IP地址;
-t:指定镜像的名字及标签(name:tag)。
图 15
请执行如下命令,将镜像推送至本地仓库Registry。
Host# sudo docker push 192.168.13.51:5000/led_flash:v1.0
图 16
Docker版本从1.3.X之后,与Docker Registry交互默认使用https。由于前面搭建的私有仓库仅提供http服务,因此当与私有仓库交互时将出现上面的错误提示。可通过修改"/etc/docker/daemon.json"文件来解决该问题,请执行如下命令,192.168.13.51为Ubuntu的IP。
Host# sudovi/etc/docker/daemon.json
图 17
图 18
请在daemon.json中添加如下配置内容:
{
"insecure-registries": ["192.168.13.51:5000"]
}
执行如下命令,重新启动Docker、Registry容器(通过指定ID),并重新推送镜像至本地Registry。
Host# sudo /etc/init.d/docker restart
Host# sudo docker ps -a
Host# sudo docker start 6d50923c01bd //以查询得到的CONTAINER ID号为准
Host# sudo docker push 192.168.13.51:5000/led_flash:v1.0
图 19
通过浏览器访问"http://192.168.13.51:5000/v2/_catalog",即可看到当前仓库里已有的镜像。
图 20
构建多个镜像
请先参考“构建单个镜像”小节完成单个镜像led_flash的构建。将产品资料“4-软件资料DebianFilesystemdocker”目录下的所有脚本文件拷贝至Ubuntu共享目录下,再执行如下命令拷贝至Docker工作目录。
Host# cp /mnt/hgfs/SharedFolders/docker_container_1_echo.sh /home/tronlong/docker/dockerfile/
Host# cp /mnt/hgfs/SharedFolders/docker_container_2_echo.sh/home/tronlong/docker/dockerfile/
Host# cp /mnt/hgfs/SharedFolders/docker_container_3_echo.sh /home/tronlong/docker/dockerfile/
图 21
图 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 2"] #添加注释符"#"
在Dockerfile文件所在的目录下执行如下命令,进行构建镜像。
Host# sudo docker build -t 192.168.13.51:5000/docker_container_1_echo.sh:v1.0 . //注意命令最后含有"."
Host# sudo docker images //查看已构建的镜像
参数说明:
192.168.13.51:Ubuntu的IP地址;
-t:指定镜像的名字及标签(name:tag)。
图 25
请执行如下命令,将镜像推送至本地仓库Registry。
Host# sudo docker push 192.168.13.51:5000/docker_container_1_echo.sh:v1.0
备注:由于构建Docker镜像使用的是同一个文件系统,相同的内容将会重叠,因此将会继承第一个led_flash镜像已经上传的内容(文件系统)。
图 26
通过浏览器访问"http://192.168.13.51:5000/v2/_catalog",即可看到当前仓库里已有的镜像。
图 27
"docker_container_2_echo.sh"、"docker_container_3_echo.sh"文件参考以上类似步骤构建镜像。
重新通过浏览器访问"http://192.168.13.51:5000/v2/_catalog",即可看到当前仓库里已有多个镜像。
图 28
审核编辑 黄宇
-
开发板
+关注
关注
26文章
6476浏览量
121275 -
RK3588
+关注
关注
8文章
600浏览量
7646
发布评论请先 登录
创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—ROS2系统使用说明
创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—ISP图像处理开发案例
创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—视频图像处理框架
创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—物联网模块开发案例
创龙 瑞芯微 RK3562 国产 2GHz 四核A53 工业开发板—Docker容器部署方法说明
创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—Docker容器部署方法说明
评论