Docker 启动时间

Kar*_*ski 5 performance 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
Run Code Online (Sandbox Code Playgroud)

我能否以某种方式加快运行容器的过程,或者至少了解为什么浪费了这段时间?

my_image是从创建的,ubuntu构建的图像大约需要 800 MB。但是从我检查的情况来看,这并不重要 - 将大小图像减小到 200 MB 不会改变上述命令的执行时间。

BMi*_*tch 8

开销时间很可能用于创建和删除命名空间。要确定时间花在哪里,您可以以不同的方式运行容器。

首先,删除 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)
Run Code Online (Sandbox Code Playgroud)

由于您分离运行容器,请考虑是否可以删除 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
Run Code Online (Sandbox Code Playgroud)

之后,您可以通过将它们设置为现有的主机命名空间来禁用它们,开始查看为网络和 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
Run Code Online (Sandbox Code Playgroud)

从 docker 中,您可以查看正在执行的操作docker events并检查每个操作的时间戳。

最后,请记住 docker 是一个客户端/服务器应用程序,一些实际时间可能是客户端和服务器之间的套接字/网络通信。