4.下载镜像并运行容器
下载镜像前,需要先开启Docker相关服务,并确保存储驱动配置正确。
(1)配置Docker存储驱动
不同系统环境可能导致Docker默认存储驱动(overlayfs/overlay2)不一致,执行以下命令,显式指定Docker默认存储驱动为overlay2,以保证一致性。
**Target#**vi /etc/docker/daemon.json //编辑Docker工具配置文件

图 29
请在daemon.json中添加如下配置内容:
{
"storage-driver": "overlay2"
}

图 30
(2)开启Docker相关服务
**Target#**systemctl enable docker //开启docker服务
**Target#**systemctl enable containerd //开启containerd服务(docker容器)

图 31

图 32
4.1下载单个镜像并运行容器
(1)请使用网线将单板机任意LAN网口连接至路由器,并确保和Ubuntu处于同一网络下,单板机上电启动,执行如下命令下载镜像并列举出下载后的镜像。
**Target#**docker pull 192.168.12.69:5000/led_flash:v1.0 //下载镜像
**Target#**docker images //列举已下载的镜像

图 33
若出现如下错误,请执行如下命令,通过修改"/etc/docker/daemon.json"文件来解决此问题,修改保存后,重新启动dockerd守护进程。

图 34
**Target#**vi /etc/docker/daemon.json

图 35
请在daemon.json中添加如下配置内容:
{
"insecure-registries": "192.168.12.69:5000"
}

图 36
**Target#**systemctl restart docker

图 37
(2)修改标签名称。
**Target#**docker tag 192.168.12.69:5000/led_flash:v1.0 led_flash

图 38
(3)删除旧标签名称。
**Target#**docker rmi 192.168.12.69:5000/led_flash:v1.0

图 39
(4)创建并启动容器。
**Target#**docker run -itd --name led_flash --platform linux/arm/v8 -v /sys/:/sys led_flash
参数说明:
-itd:以交互模式运行容器,并将容器的标准输入连接到交互终端,以守护进程模式运行容器;
--platform:指定容器运行的平台;
--name:为容器指定一个名称;
-v:映射卷(将主机的目录"/sys"映射至容器的"/sys");
led_flash:镜像名字。

图 40
容器启动完成后,单板机用户LED1、LED2灯闪烁。执行如下命令,可查看当前容器占用资源情况。"MEM USAGE"表示容器占用内存;"LIMIT"表示容器可使用的最大内存。
**Target#**docker stats

图 41

图 42
(5)容器的基本操作。
执行如下命令,查看正在运行的容器并进入容器。
**Target#**docker ps
**Target#**docker exec -it led_flash /bin/bash
参数说明:
-i:以交互模式运行容器,通常与-t同时使用;
-t:为容器重新分配一个伪输入终端,通常与-i同时使用;
led_flash:容器名称,以实际"NAMES"为准;
/bin/bash:在容器内执行"/bin/bash"命令。

图 43
执行如下命令,退出容器。
**Bash#**exit

图 44
执行如下命令,停止容器。此时,单板机用户LED1、LED2灯不再闪烁。
**Target#**docker stop led_flash

图 45
执行如下命令,启动容器。此时,单板机用户LED1、LED2灯闪烁。
**Target#**docker start led_flash

图 46
4.2下载多个镜像并运行容器
(1)请使用网线将单板机任意LAN网口连接至路由器,并确保和Ubuntu处于同一网络下,单板机上电启动,执行如下命令下载镜像并列举出下载后的镜像。
**Target#**docker pull 192.168.12.69:5000/docker_container_1_echo.sh:v1.0 //下载镜像,192.168.13.36为Ubuntu的IP地址
**Target#**docker pull 192.168.12.69:5000/docker_container_2_echo.sh:v1.0
**Target#**docker pull 192.168.12.69:5000/docker_container_3_echo.sh:v1.0
**Target#**docker images //列举已下载的镜像
备注:由于led_flash镜像已在"下载单个镜像并运行容器"章节中下载、创建并启动容器,因此本章节不再演示。

图 47
(2)修改标签名称。
**Target#**docker tag 192.168.12.69:5000/docker_container_1_echo.sh:v1.0 container_1_echo
**Target#**docker tag 192.168.12.69:5000/docker_container_2_echo.sh:v1.0 container_2_echo
**Target#**docker tag 192.168.12.69:5000/docker_container_3_echo.sh:v1.0 container_3_echo

图 48
(3)删除旧标签名称。
**Target#**docker rmi 192.168.12.69:5000/docker_container_1_echo.sh:v1.0
**Target#**docker rmi 192.168.12.69:5000/docker_container_2_echo.sh:v1.0
**Target#**docker rmi 192.168.12.69:5000/docker_container_3_echo.sh:v1.0

图 49
(4)执行如下命令,创建并启动容器。
**Target#**docker run -itd --platform linux/arm/v8 --name docker_container_1_echo container_1_echo /bin/bash
**Target#**docker run -itd --platform linux/arm/v8 --name docker_container_2_echo container_2_echo /bin/bash
**Target#**docker run -itd --platform linux/arm/v8 --name docker_container_3_echo container_3_echo /bin/bash
参数说明:
-itd:以交互模式运行容器,并将容器的标准输入连接到交互终端,以守护进程模式运行容器;
--platform:指定容器运行的平台;
--name:为容器指定一个名称;
container_1_echo、container_2_echo、container_3_echo:镜像名称。
/bin/bash:执行/bin/bash命令阻塞docker容器,防止容器自动退出,以便能进入容器运行脚本。

图 50
容器启动完成后,可执行如下命令查看当前容器占用资源情况。
**Target#**docker stats

图 51

图 52
(5)容器的基本操作
执行如下命令,查看正在运行的容器,并进入"docker_container_2_echo"容器。
备注:"docker_container_1_echo"、"docker_container_3_echo"容器可参考该操作进行测试。
**Target#**docker ps
**Target#**docker exec -it docker_container_2_echo /bin/bash
参数说明:
-i:以交互模式运行容器,通常与-t同时使用;
-t:为容器重新分配一个伪输入终端,通常与-i同时使用;
docker_container_2_echo:容器ID,以实际"NAMES"为准;
/bin/bash:在容器内执行"/bin/bash"命令。

图 53
执行如下命令,可查看脚本打印信息。
Target#./docker_container_2_echo.sh

图 54
执行如下命令,退出该容器。
**Bash#**exit

图 55
附录:磁盘空间占用说明
本附录主要说明安装Docker镜像前后对单板机系统磁盘空间资源占用情况以及内存占用情况。
1.未下载Docker镜像
进入单板机系统,执行如下命令,查看当前系统未下载Docker镜像时的磁盘使用情况。
**Target#**df -h

图 56
2.已下载Docker镜像
执行如下命令,查看系统已下载4个Docker镜像时的磁盘使用情况以及Docker磁盘空间使用情况。
**Target#**df -h
**Target#**docker system df //查看Docker磁盘空间使用情况

图 57

图 58
可以查看到4个Docker镜像与容器占用内存的总大小约为1.22GByte。由于构建Docker镜像的文件系统是同一个,而Docker镜像中相同的内容会重叠在一起,不需重新占用内存,因此4个Docker镜像和容器占用的内存总大小约为1.22GByte。