【问题标题】:Docker Slow Response Time with Laravel API calls使用 Laravel API 调用的 Docker 响应时间很慢
【发布时间】:2021-07-09 16:10:21
【问题描述】:

Docker 响应时间

有谁知道为什么使用 docker 时响应时间需要长达 1500 毫秒?

当我在本地机器上运行时,它只有 ~200 毫秒,这是合理的

我的docker-compose.yml 文件

version: "3.4"

networks:
    backend:
        driver: bridge

services:
  mysql:
    image: mysql:8.0
    container_name: mysql
    restart: unless-stopped
    ports:
      - 3307:3306
    environment:
      - MYSQL_ROOT_PASSWORD=securerootpassword
      - MYSQL_DATABASE=${DB_DATABASE}
      - MYSQL_USER=${DB_USERNAME}
      - MYSQL_PASSWORD=${DB_PASSWORD}
    networks:
      backend:
        aliases:
          - db-network

  app: 
    container_name: laravel_app
    build:
        context: .
        dockerfile: ./docker/8.0/php/Dockerfile
        args:
            WWWGROUP: '1000'
    ports:
        - '${APP_PORT:-80}:80'
    networks:
      backend:
        aliases:
          - laravel-app-network
    volumes:
        - '.:/var/www/html' # tried - '.:/var/www/html:cached' same results
    depends_on:
        - mysql

我的docker/8.0/php/Dockerfile

FROM ubuntu:21.04

USER root

ARG WWWGROUP

WORKDIR /var/www/html

ENV DEBIAN_FRONTEND noninteractive
ENV TZ=UTC

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN apt-get update && apt-get install -y \
        libpng-dev \
        zlib1g-dev \
        libxml2-dev \
        libzip-dev \
        libonig-dev \
        zip \
        curl \
        unzip \
        webp \
        gnupg \
        gosu \
        ca-certificates \
        git \
        supervisor \
        libcap2-bin \
        python3

RUN mkdir -p ~/.gnupg \
        && chmod 600 ~/.gnupg \
        && echo "disable-ipv6" >> ~/.gnupg/dirmngr.conf \
        && apt-key adv --homedir ~/.gnupg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys E5267A6C \
        && apt-key adv --homedir ~/.gnupg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C300EE8C

RUN echo "deb http://ppa.launchpad.net/ondrej/php/ubuntu hirsute main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \
       && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
       && echo "deb https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \
       && curl -sL https://deb.nodesource.com/setup_16.x | bash -

RUN apt-get update && apt-get install -y php8.0-cli php8.0-dev \
       php8.0-pgsql php8.0-sqlite3 php8.0-gd \
       php8.0-curl php8.0-memcached \
       php8.0-imap php8.0-mysql php8.0-mbstring \
       php8.0-xml php8.0-zip php8.0-bcmath php8.0-soap \
       php8.0-intl php8.0-readline php8.0-pcov \
       php8.0-msgpack php8.0-igbinary php8.0-ldap \
       php8.0-redis php8.0-swoole
       
RUN php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer

RUN apt-get install -y nodejs \
        && npm install -g npm

RUN apt-get install -y mysql-client

RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.0

RUN groupadd --force -g $WWWGROUP sail
RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail

COPY ./docker/8.0/start-container /usr/local/bin/start-container
COPY ./docker/8.0/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY ./docker/8.0/php.ini /etc/php/8.0/cli/conf.d/99-sail.ini
RUN chmod +x /usr/local/bin/start-container

EXPOSE 80

ENTRYPOINT ["start-container"]

CPU 使用率

更不用说在空闲状态下可能需要 3-4 秒

跟CPU占用有关系吗?

在 api 调用请求中,它在 1400 毫秒内高达 17-20%,然后回到 0.01%

注意它是由Laravel 提供的sail Dockerfile 修改

如果使用开箱即用,同样的问题也存在

另外,我保证 Dockerfile 中的所有依赖项都安装在我的本地计算机上,但仍然是同样的问题。

【问题讨论】:

  • 您的Dockerfile 构建了什么?这在很大程度上取决于您在那里运行的内容。你有没有在本地机器上设置但在 Docker 中设置的 PHP 插件集?
  • 我编辑了我的问题并添加了Dockerfile
  • 好吧,我不确定 Sai 是什么,我试过在它出来时使用它,但它有很多你永远不会使用的垃圾,构建图像需要很多时间......它是更好的是每个服务都有自己的docker-compose,而不是一个包含所有服务的图像......
  • 我正在使用docker-compose 构建我的容器,我尝试了一些开源库,但仍然遇到同样的问题。
  • 什么需要 1500 毫秒?

标签: php mysql laravel docker


【解决方案1】:

问题已解决:

原来是 windows/WSL 相关问题,我的开发环境是建立在运行 Ubuntu 20.04 LTS /mnt/c/Users/<username>/code-directory的 windows 上的

我将整个代码迁移到实际的 ubuntu 绝对路径 /var/www/html/code-directory,就像在生产服务器中一样,它运行良好。并相应地对Dockerfile 进行了更改。

响应时间约为 100ms,比 windows OS 的 localhost 快 200ms

【讨论】:

    猜你喜欢
    • 2021-06-25
    • 2017-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    相关资源
    最近更新 更多