基础设施

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)

总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

  1. VPS的CPU列表(判断是否良好)

建设基础设施的有用信息

  1. 如何从CentOS切换到AlmaLinux(RHE的克隆)
  2. 如何从CentOS 7升级到CentOS 8及其优点
  3. MariaDB与MySQL与PostgreSQL: 选择最佳数据库的流程图
  4. Docker的安装和使用技巧使Docker开销降低性能基准