有没有办法消除 docker exec 的开销?例如,当我打电话时docker exec ls
在已经运行的容器上,需要0.15秒才能返回结果。
root@min:/# time docker exec 6f ls
bin
boot
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
real 0m0.159s
user 0m0.028s
sys 0m0.028s
但是,如果我启动附加的容器,并且ls
从容器的命令行,只需要几毫秒。
root@min:/# docker start -ai 6f
[root@6f384443d3a6 /]# time ls
bin boot dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
real 0m0.004s
user 0m0.003s
sys 0m0.000s
容器的创建方式如下:
$ docker create -t -i fedora bash
6f8af538ec541dd581ebc2a24153a28329acb5268abe5ef868c1f1a261221752
$ docker start 6f
开销是多少docker exec
,有没有办法减少呢? (我正在尝试创建一个服务来托管正在运行的容器并在其上调用可执行文件并返回结果。但如果每次调用需要 150 毫秒,那就不好了)。
Docker 被实现为基于 HTTP 的服务,通常通过 Unix 套接字调用。例如,您可以看到“创建一个执行实例” https://docs.docker.com/engine/api/v1.40/#operation/ContainerExecDocker API 文档中的请求。运行一次至少需要两次往返docker exec
命令,加上启动主机端的开销docker
过程。在本机 Linux 上,HTTP 调用将通过 Unix 套接字进行;在其他平台上,根据您的设置,它可能需要跨越虚拟机边界甚至通过 TCP。
单次 150 毫秒docker exec
直觉上我感觉调用有点慢,但并没有超出合理范围。你无能为力来加快速度,因为所有这些机制都在docker
客户端工具和服务器守护程序。
典型的 Docker 设置将让容器运行长时间运行的服务器进程(而不是裸露的服务器进程)fedora
容器,而不是bash
shell作为主要容器进程)。您应该能够向容器发出网络请求,这可能会比docker exec
(并且不需要管理员权限)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)