我知道有很多码头专家,但我花了很多时间找出一些事实并了解Docker的运行时间性能,但不幸的是我无法得到任何具体的答案。首先让我告诉你我的系统配置:
(a)在具有48GB RAM,1TB光盘和12核CPU的机器上运行CentOS 6.5。 (b)我构建了一个大小接近6.5GB的Docker镜像
以下是有人可以为读者的利益做出回答的问题:
(a)现在使用给定的配置,问题是我可以并行运行多少个容器而不会破坏任何功能?
(b)假设我有两个图像,每个图像的大小为3.5GB,那么它是建议运行多个小尺寸图像还是我们获得了大尺寸图像的良好性能?
(c)与Docker一起使用的最佳文件系统选项是什么?
(d)实际上我试图将许多编译器放在一个容器中,并试图为用户提供在线编译语言的便利。此工具正在开发中,将取代我现有的网站compileonlone.com。事情进展顺利,我建立了两个图像,每个图像中只有很少的编译器。我能够成功运行大约250个容器,之后我开始打开太多文件。在250个容器之后,我的RAM达到40GB,CPU利用率约为50%。
我面临的主要问题是拆除旧容器。因为用户会来编译他的代码然后就会消失,所以我需要在一段时间后删除这些容器但是当我试图使用docker rm -v删除这些已停止的容器时,它会减慢主要的docker过程和它几乎挂起。我的意思是在/var/run/docker.sock上监听的docker -d守护进程。不确定是否有其他方法来清理这些容器或我有一个错误。这是Docker的细节:
# docker info
Containers: 1016
Images: 41
Storage Driver: devicemapper
Pool Name: docker-0:20-258-pool
Pool Blocksize: 64 Kb
Data file: /var/lib/docker/devicemapper/devicemapper/data
Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata
Data Space Used: 17820.7 Mb
Data Space Total: 102400.0 Mb
Metadata Space Used: 102.4 Mb
Metadata Space Total: 2048.0 Mb
Execution Driver: native-0.2
Kernel Version: 3.17.2-1.el6.elrepo.x86_64
Operating System: <unknown>
WARNING: No swap limit support
如果有人可以帮助我以最快的方式删除旧容器,那么它会很棒。简单的shell脚本都没有用。我已经尝试了
#docker rm -v $(docker ps -a |grep Exited | awk '{print $1}')
但它完全减慢了主Docker进程,并且在此删除过程正在运行时无法创建新容器。
感谢您抽出时间回答这些问题,这将有助于我和其他许多人继续使用Docker。
答案 0 :(得分:1)
a):容器就像一个过程。这个问题就像在询问&#34;我可以并行运行多少个进程&#34;。如果不了解流程正在做什么,它就无法回答。请将此信息添加到您的问题中。
b)对于Docker镜像,3.5GB和6.5GB都非常大。最佳做法是将一个应用程序放在一个容器中:如果您的应用程序的大小,那么很好。如果没有,也许您已将应用程序的数据放入图像中。这不是一个好主意,因为分层文件系统比常规文件系统慢,并且您不希望在事务数据上实现分层或快照的任何功能。
documentation on managing data解释了如何安装常规磁盘,以便可以从容器中访问它。
d)使用RAM意味着容器仍在运行。如果您的网站逻辑中有某种方式知道何时不再需要容器,您可以docker kill
,然后docker rm
删除磁盘存储。或docker rm -f
将这两项操作合二为一。
答案 1 :(得分:0)
经过大量研发并与许多专家讨论后,我找到了一种解决方案,可以快速删除容器。很简单,您可以使用dm.blkdiscard = false选项运行docker守护程序,如下所示。
docker -d --storage-opt dm.blkdiscard = false
顺便说一句,这就是我所开发的。在这里,我需要创建和删除高速容器
http://codingground.tutorialspoint.com
希望这会有助于其他许多人。