Docker 启动时间

Docker 启动时间

我怎样才能加快:docker rundocker 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 是一个客户端/服务器应用程序,实际时间的一部分可能是客户端和服务器之间的套接字/网络通信。

相关内容