Docker的安装和使用技巧使Docker开销降低性能基准
什么是Docker及其用法
Docker是一个像流浪者一样的虚拟环境,但是存在以下差异。
-底层内核在运行中的容器(=虚拟环境)之间共享,并且其开销远远小于Vagrant,后者对于每个虚拟环境和必需的资源都需要操作系统
-通过在文件中描述系统设置,可以确保同一系统的可重复性
-已经创建,共享和分发了许多应用程序的许多docker映像,就像编程语言库一样
您必须谨慎地将Docker用于生产环境,但它绝对适合定义和共享开发与测试环境的目的。
由于Docker开销而导致性能下降的基准
尽管docker被认为比无业游民的开销要小,但它无法避免开销(使用额外的资源)。
问题是性能下降多少?
这是基准测试的结果。
[基准条件]
使用的服务器: Linode 专用实例,2CPU(AMD EPYC 7501 32 -Core Processor)+内存4GB
基准:Unixbench(什么是Unixbench? )
比较目标:
1)没有码头工人
2)码头工人
3)带有选项的Docker可以降低性能的安全性(–security-opt seccomp = unconfined)
测量 | 没有Docker | Docker | Docker(安全性关闭) |
---|---|---|---|
总CPU得分 | 1735 | 1255(-28%) | 1331(-23%) |
1 CPU得分 | 1124 | 822(-27%) | 895(-20%) |
Dhrystone 2使用寄存器变量 | 3536 | 3485 | 3542 |
双精度磨刀石 | 1646 | 1633 | 1647 |
Execl吞吐量 | 1332 | 1300 | 1324 |
文件复制1024个bufsize 2000个maxblocks | 2503 | 1329 | 1369 |
文件复制256个bufsize 500个maxblocks | 1646 | 841 | 863 |
文件复制4096个bufsize 8000个maxblocks | 4091 | 2530 | 2810 |
管道吞吐量 | 1243 | 1162 | 1249 |
基于管道的上下文切换 | 750 | 594 | 625 |
流程创建 | 1291 | 633 | 1016 |
Shell脚本(并发1个) | 2007 | 1113 | 1142 |
Shell脚本(并发8个) | 1953 | 1039 | 1071 |
系统调用开销 | 1201 | 893 | 1197 |
因此,如果您使应用程序在docker上运行而不是在没有docker的情况下运行,则必须期望性能下降约25%。
特别
–文件IO
–执行Shell脚本,通常代表CPU和OS的性能
性能下降更多。
看到结果后,如果我们关闭Docker的安全性,则可以期待一定程度的性能改进,而并不是说进程创建可以带来更多的改进。
而且,如果您使用Docker,则必须注意Docker容器和映像使用了多少磁盘空间。
如何安装Docker
如果您要安装最新版本的官方docker,而不是Linux发行商的最新版本,则可以这样做。
对于CentOS 8或更高版本
sudo dnf remove docker docker-common docker-selinux docker-engine; sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo; sudo dnf install docker-ce;
如果您遇到这样的错误消息,
您应该从下载最新的containerd.io
https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.13-3.2.el7.x86_64.rpm; dnf remove containerd.io; dnf install -y containerd.io-1.2.13-3.2.el7.x86_64.rpm; dnf install -y docker-ce docker-ce-cli;
对于CentOS 7或更早的版本
sudo yum remove docker docker-common docker-selinux docker-engine sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install docker-ce
运行Docker Daemon
sudo systemctl enable docker.service; sudo systemctl start docker.service
运行hello world docker并检查操作
docker run hello-world
如果您具有root用户特权,则可以使其运行,但是如果您是一般用户,则可能会遇到以下错误消息。
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/create: dial unix/var/run/docker.sock: connect: permission denied.
在这种情况下,只能由属于docker组的用户执行docker。
将用户添加到Docker组以解决问题。
sudo gpasswd -a $USERID docker;
请注意,即使将用户添加到组中,您也必须注销并重新登录。
然后输入
docker run hello-world
并检查结果是否正确显示。
Docker常用的命令
从Dockerfile创建Docker映像
docker build --rm -t $IMAGENAME;
列出正在运行的Docker进程
docker ps;
在指定的Docker容器中执行命令
docker exec -i -t $container id $something $command
停止所有正在运行的Docker进程
docker kill $(docker ps -q);
删除Docker映像
docker rmi $IMAGE;
删除所有Docker映像
docker images -aq | xargs docker rmi;
删除所有停止的Docker容器
docker rm $(docker ps -a -q);
将docker-compose作为守护程序运行(=始终运行进程)
docker-compose up -d
停止docker-compose启动的进程
docker-compose stop
什么是VPS
建设基础设施的有用信息