我怎样才能加快:docker run
和docker exec
命令的速度?
运行命令需要 0.02 秒的用户时间、0.02 秒的系统时间(在我的情况下这是可以的),但每次大约需要 0.5 秒的实际时间(不可接受)。
例如:
$ time sudo docker run --cap-add SYS_ADMIN -i -t --memory=100000k --memory-swap=100000k -d -w /tmp -v /home/asd:/tmp my_image
187d****5037
sudo docker run --cap-add SYS_ADMIN -i -t --memory=100000k -d -w /tmp -v 0,02s user 0,02s system 6% cpu 0,496 total
我是否可以以某种方式加快容器运行的进程,或者至少了解为什么浪费了这段时间?
my_image
是从创建的ubuntu
,构建的图像大约需要 800 MB。但据我检查,这并不会有太大影响 - 将图像大小减小到 200 MB 不会改变上述命令的执行时间。
答案1
开销时间最有可能花在创建和删除命名空间上。要找出时间花在哪里,您可以以不同的方式运行容器。
首先,删除 sudo 命令。以 root 身份登录,sudo -s
然后从那里运行命令。
接下来尝试将运行拆分为单独的创建和启动步骤。这将让您知道时间是花在创建容器上还是运行容器上:
$ time docker create --cap-add SYS_ADMIN -itd \
--memory=100000k --memory-swap=100000k \
-w /tmp -v /home/asd:/tmp my_image
$ time docker start -ai $(docker ps -ql)
由于您以分离方式运行容器,请考虑是否可以删除 tty 分配,如果需要配置 stdin,请删除-it
:
$ time sudo docker run --cap-add SYS_ADMIN -d \
--memory=100000k --memory-swap=100000k \
-w /tmp -v /home/asd:/tmp my_image
之后,您可以开始查看通过将它们设置为现有主机命名空间来禁用它们,从而为网络和 pid 等内容创建每个命名空间需要花费多少时间:
$ time sudo docker run --cap-add SYS_ADMIN -itd \
--net=host --pid=host --uts=host \
--memory=100000k --memory-swap=100000k \
-w /tmp -v /home/asd:/tmp my_image
从 docker,您可以查看正在执行的操作docker events
并检查每个操作的时间戳。
最后,请记住,docker 是一个客户端/服务器应用程序,实际时间的一部分可能是客户端和服务器之间的套接字/网络通信。