300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > docker多个容器一起打包_如何实现多个docker容器同时执行一条命令?

docker多个容器一起打包_如何实现多个docker容器同时执行一条命令?

时间:2020-09-15 19:20:41

相关推荐

docker多个容器一起打包_如何实现多个docker容器同时执行一条命令?

我需要实现一个功能:同时创建多个docker容器,并且在这些容器内同时执行一条命令。

我的方法是使用pssh(一个python编写可以在多台服务器上并行执行命令的工具)来连接多个容器,实现同时执行。像这样:

pssh -h ip.txt -P uptime

ip.txt包含了服务器的ip列表,也就是容器的ip列表。uptime是需要在容器内同时执行的命令。

为了验证是否是同时执行,在执行具体命令(如uptime)之前我使用date命令打印当前系统时间(毫秒),我发现第1个容器和第10个容器相差了50ms左右:

这意味着,如果我需要在命令执行前后分别执行一次date命令来计算命令执行时间,那么在具体命令执行时,第1个容器和第10个容器就差了50ms,如果具体命令执行时间只有几ms,那就无法实现同时执行。

而当我清理缓存后,再执行,只差了3mm:

cache_clear的内容如下:

sudo sync

sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"

看上去date命令似乎会受缓存的影响?

将磁盘换成ssd(cpu,内存,系统,内核都一样),做了相同的测试,发现,在清不清缓存时,第1个容器和最后一个容器都差了40+ms:

总结起来就是,只有在case2时,能够满足我的需求:

如果pssh本身无法实现几ms以内的同时执行(也就是说,第1个容器的date命令本身就比第10个容器的命令先50ms执行),那么在case2时,即使清了缓存,也不应该只差3ms。所以我猜测pssh本身是能实现几ms内的并行的(也就是说,date开始执行的时间最多只差了几ms)。但是在date执行过程中完成时间不同,因此得到的系统时间就相差了几十ms。

由于我需要测命令执行的时间,因此不得不在命令执行前后执行date,这就导致除了case2以外,其它3中情况下测出的时间并不是所有容器真正并行执行命令的时间。

当然,我还试过使用time直接计算命令执行时间,但是结果和date计算出的时间没有本质区别。而且使用time也无法验证是否所有容器都是同时(只差几ms)执行命令(如uptime)的。虽然不使用date或者time,具体命令(如uptime),应该是同时执行的,但是现在我需要测试命令执行的时间,所以无法避开这两个命令。

现在我希望能在SSD下能够排除这种影响,但是又不知道date或time在实现过程中为什么会产生这种影响,是否存在其它计时的命令?或者其它实现docker多容器命令并发执行的方法?如果我的猜想是错的,也就是说,pssh并不能保证几ms内的同时执行,那么case2为什么又只差了3ms?希望前辈们给一些指导或者建议。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。