本文尝试在arm平台同时跑多个容器,测试性能。基于 arm 版本的 busybox。
一、镜像
1.1 版本选择尝试
1 | docker run --name busybox -itd armhf/busybox // 这个太旧了 |
测试失败。
1.2 确定版本
dockerhub 上有 armhf/busybox 和 arm32v7/busybox 以及官方的 busybox 镜像。
经测试,armhf/busybox 库版本较旧,无法运行程序。官方 busybox 和 arm32v7/busybox 较新,但缺少库。这里选择 arm32v7/busybox。
下载并运行:
1 | docker pull arm32v7/busybox |
释义:运行一个名称为 busybox 的容器。
1.3 拷贝库
将板子系统的 /lib/ 目录拷贝到容器 busybox 中。
1 | # docker cp /lib/ busybox:/ // 注:由于存在/lib/和/lib32,需要写全目录,即 /lib/ |
注:可以将 /lib/ 目录精简,删除不必要的库。
1.4 重新制作镜像
查看容器 ID:
1 | # docker ps |
将当前容器保存为镜像:
1 | # docker commit cb9a3d81a6a0 latelee/armbusybox:dev |
登陆dockerhub:
1 | # docker login // 输入账号和密码 |
提交:
1 | # docker push latelee/armbusybox:dev |
1.5 验证
删除镜像 latelee/armbusybox:dev。
1 | docker rmi latelee/armbusybox:dev |
重新下载:
1 | docker pull latelee/armbusybox:dev |
或运行:
1 | docker run --name busybox1 -itd latelee/armbusybox:dev |
二、性能分配
2.1 分配CPU
注意,这不是指分配多少个CPU的,是按百分比计量的。如单核CPU系统中,指定 0.5 CPU 表示该容器只占用 50% 的 CPU。
示例:
1 | # docker run -it --rm --cpus=0.5 lateee/busybox sh |
运行压力测试程序 test 后,在宿主机用 top 命令查询,发现程序最多只占 50% 的 CPU。
分配指定CPU:
1 | # docker run -it --rm --cpuset-cpus="0" lateee/busybox sh |
指定在 CPU 编号为 0 的CPU上。可以同时指定多个,如 --cpuset-cpus="1,3"
。如果指定的CPU不存在,提示如下错误:
1 | docker: Error response from daemon: Requested CPUs are not available - requested 1, available: 0. |
设置CPU权重。
1 | # docker run -it --rm --cpuset-cpus="0" --cpu-shares=512 lateee/busybox sh |
在相同的CPU核上运行,一为512,一为1024,两者比例为1:2。
注:cpu-shares默认为1024,可以通过设置比例对应的值达到不同权重目的。如果为0,表示默认。
再注:单核CPU最大只有100%。多核才会出现超过100%的情况。
2.2 分配内存
指定容器使用的内存为100MB:
1 | # docker run -it --rm -m 100M lateee/busybox sh |
-m 和 –memory 等效。
其它未测试的:
1 | --memory-swap :memory和swap之和(从名称可以理解) |
三、实践记录
操作硬件需要添加--privileged
和--device
,设备列表可添加多个。
1 | docker run -itd --rm --privileged --device "/dev/ttyO1 /dev/ttyO2" --name arm latelee/armbusybox:dev |