与在容器外运行相比,在 Docker 容器中运行的应用程序的性能是否显着降低?

问题描述 投票:0回答:1

在 Docker 容器中运行的应用程序的性能确实比在容器外运行的应用程序性能要慢很多吗?

我使用以下方法测试了新安装的 Laravel 应用程序:

ab -t 10 -c 10 -v 2 "http://url.ur"

以下是 RPS(每秒请求数)结果:

没有 Docker:

ab -t 10 -c 10 -v 2 "http://test.site/ab"
2723.24 [#/sec] (mean)
2744.14 [#/sec] (mean)
2739.20 [#/sec] (mean)

使用 Docker 容器:

ab -t 10 -c 10 -v 2 "http://localhost:8000/ab"
83.67 [#/sec] (mean)
88.92 [#/sec] (mean)
87.36 [#/sec] (mean)

为什么会有如此显着的性能差异?这是使用 Docker 时的已知问题,还是由于特定的配置问题?

操作系统和硬件规格:

OS: Ubuntu 24.04
CPU: Intel(R) Core(TM) i7-9700K CPU @ 3.60GHz
RAM: 32 GB
Disk: 457 GB total, 42 GB used, 392 GB available

这是我的 docker-compose.yml:

version: '3.8'

services:
    app:
        image: php:8.3-fpm
        container_name: laravel_app
        restart: unless-stopped
        working_dir: /var/www
        volumes:
            - ./:/var/www
            - ./docker/php/php.ini:/usr/local/etc/php/php.ini
        networks:
            - laravel_network

    webserver:
        image: nginx:latest
        container_name: laravel_nginx
        restart: unless-stopped
        ports:
            - "8000:80"
        volumes:
            - ./:/var/www
            - ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
        depends_on:
            - app
        networks:
            - laravel_network

networks:
    laravel_network:
        driver: bridge

我使用 ab 测试了 Laravel 应用程序,以比较主机上与 Docker 中的 RPS。我原本预计会有类似的性能,但 Docker 的 RPS 大幅降低(大约 85 vs 2700)。

php laravel docker performance docker-compose
1个回答
0
投票

通常,在 Docker 容器内运行的应用程序与本地运行的应用程序之间的性能差异很小,特别是对于大多数用例而言。 Docker 容器被设计为轻量级并共享主机的操作系统内核,这使得它们比需要自己的操作系统层的传统虚拟机更快。但是,在某些情况下,有一些因素可能会影响性能:

I/O 和文件系统访问:Docker 容器中的磁盘 I/O 可能会变慢,特别是在使用某些存储驱动程序或使用绑定安装来访问主机文件系统时。对于执行大量文件读/写的应用程序来说,这可能会导致明显的性能差异。

网络开销:Docker 增加了一些网络开销,因为它经常使用虚拟化网络。与本机运行相比,这可能会导致网络操作速度变慢,尽管差异通常很小。

资源限制:容器共享主机的资源,CPU、内存或 I/O 的错误配置限制可能会造成瓶颈。正确设置资源限制或使用专用资源可以缓解这种情况。

存储驱动程序选择:不同的存储驱动程序(例如overlay2、aufs或btrfs)具有不同的性能配置文件。选择正确的存储驱动程序可以产生很大的影响,特别是对于文件 I/O 较多的应用程序。

与主机系统的兼容性:在某些系统(例如 macOS)上,Docker 需要虚拟机才能运行,这确实会带来性能影响。然而,在 Linux 上,Docker 原生运行,因此影响通常可以忽略不计。

总体而言,对于大多数应用程序来说,性能差异很小。高性能应用程序或具有特定需求的应用程序可能需要微调或本机执行,但 Docker 通常适合大多数工作负载。

© www.soinside.com 2019 - 2024. All rights reserved.