WordPress slow的Docker

WordPress slow的Docker,wordpress,docker,docker-compose,Wordpress,Docker,Docker Compose,问题: 我对WordPress&Docker有一个问题,因为我的网站加载速度慢(+-7秒)。我不知道为什么会发生这种情况,但我认为这与外部数据库或共享卷有关 设置: 我有一个自定义Dockerfile,它是用XDebug和Mailhog在WordPress上构建的。此docker文件包含在my docker-compose.yml中,docker compose包含的其他服务包括WP-CLI和Mailhog。我的数据库托管在Amazon RDS上,因此我可以与同事共享 代码: 我的Dockerf

问题

我对WordPress&Docker有一个问题,因为我的网站加载速度慢(+-7秒)。我不知道为什么会发生这种情况,但我认为这与外部数据库或共享卷有关

设置:

我有一个自定义Dockerfile,它是用XDebug和Mailhog在WordPress上构建的。此docker文件包含在my docker-compose.yml中,docker compose包含的其他服务包括WP-CLI和Mailhog。我的数据库托管在Amazon RDS上,因此我可以与同事共享

代码:

我的Dockerfile如下所示:

FROM wordpress:latest

# Plugins & Media
RUN mkdir -p /var/www/html/wp-content/plugins
RUN mkdir -p /var/www/html/wp-content/uploads

RUN chown -R www-data:www-data /var/www

RUN find /var/www/ -type d -exec chmod 0755 {} \;
RUN find /var/www/ -type f -exec chmod 644 {} \;

# Mailhog
RUN curl --location --output /usr/local/bin/mhsendmail https://github.com/mailhog/mhsendmail/releases/download/v0.2.0/mhsendmail_linux_amd64 && \
    chmod +x /usr/local/bin/mhsendmail

RUN echo 'sendmail_path="/usr/local/bin/mhsendmail --smtp-addr=mailhog:1025 --from=noreply@examle.com"' > /usr/local/etc/php/conf.d/mailhog.ini

# Xdebug
ENV XDEBUG_PORT 9000

RUN yes | pecl install xdebug \
    && echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "xdebug.remote_enable=1" >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "xdebug.remote_autostart=1" >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "xdebug.profiler_enable=1" >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "xdebug.profiler_output_name=cachegrind.out.%t" >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "xdebug.profiler_output_dir=/tmp" >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "max_input_vars=2000" >> /usr/local/etc/php/conf.d/custom.ini \
    && rm -rf /usr/local/etc/php/conf.d/opcache-recommended.ini

EXPOSE 9000
version: "3.7"
services:
    wordpress:
        container_name: "${PROJECT_NAME}_wordpress"
        restart: always
        build:
            context: ./
            dockerfile: ./Dockerfile
        ports:
            - "8888:80"
            - "443:443"
        environment:
            WORDPRESS_DB_NAME: "${PROJECT_NAME}"
            WORDPRESS_DB_HOST: "${MYSQL_HOST}"
            WORDPRESS_DB_USER: "${MYSQL_USER}"
            WORDPRESS_DB_PASSWORD: "${MYSQL_PASSWORD}"
            WORDPRESS_DEBUG: 1
            XDEBUG_CONFIG: remote_host=host.docker.internal
            WORDPRESS_CONFIG_EXTRA: |
                define('FS_METHOD', 'direct');
        volumes:
            - "wordpress:/var/www/html"
            - "./build/uploads:/var/www/html/wp-content/uploads:cached"
            - "./build/plugins:/var/www/html/wp-content/plugins:cached"
            - "./build/themes:/var/www/html/wp-content/themes:cached"
    cli:
        container_name: "${PROJECT_NAME}_cli"
        image: "wordpress:cli"
        volumes:
            - "wordpress:/var/www/html"
            - "./build/plugins:/var/www/html/wp-content/plugins:cached"
        depends_on:
            - wordpress
    mailhog:
        container_name: "${PROJECT_NAME}_mailhog"
        image: mailhog/mailhog
        depends_on:
            - wordpress
        ports:
            - "1025:1025"
            - "8025:8025"
volumes:
    wordpress: null
我的Docker-compose.yml如下所示:

FROM wordpress:latest

# Plugins & Media
RUN mkdir -p /var/www/html/wp-content/plugins
RUN mkdir -p /var/www/html/wp-content/uploads

RUN chown -R www-data:www-data /var/www

RUN find /var/www/ -type d -exec chmod 0755 {} \;
RUN find /var/www/ -type f -exec chmod 644 {} \;

# Mailhog
RUN curl --location --output /usr/local/bin/mhsendmail https://github.com/mailhog/mhsendmail/releases/download/v0.2.0/mhsendmail_linux_amd64 && \
    chmod +x /usr/local/bin/mhsendmail

RUN echo 'sendmail_path="/usr/local/bin/mhsendmail --smtp-addr=mailhog:1025 --from=noreply@examle.com"' > /usr/local/etc/php/conf.d/mailhog.ini

# Xdebug
ENV XDEBUG_PORT 9000

RUN yes | pecl install xdebug \
    && echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "xdebug.remote_enable=1" >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "xdebug.remote_autostart=1" >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "xdebug.profiler_enable=1" >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "xdebug.profiler_output_name=cachegrind.out.%t" >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "xdebug.profiler_output_dir=/tmp" >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "max_input_vars=2000" >> /usr/local/etc/php/conf.d/custom.ini \
    && rm -rf /usr/local/etc/php/conf.d/opcache-recommended.ini

EXPOSE 9000
version: "3.7"
services:
    wordpress:
        container_name: "${PROJECT_NAME}_wordpress"
        restart: always
        build:
            context: ./
            dockerfile: ./Dockerfile
        ports:
            - "8888:80"
            - "443:443"
        environment:
            WORDPRESS_DB_NAME: "${PROJECT_NAME}"
            WORDPRESS_DB_HOST: "${MYSQL_HOST}"
            WORDPRESS_DB_USER: "${MYSQL_USER}"
            WORDPRESS_DB_PASSWORD: "${MYSQL_PASSWORD}"
            WORDPRESS_DEBUG: 1
            XDEBUG_CONFIG: remote_host=host.docker.internal
            WORDPRESS_CONFIG_EXTRA: |
                define('FS_METHOD', 'direct');
        volumes:
            - "wordpress:/var/www/html"
            - "./build/uploads:/var/www/html/wp-content/uploads:cached"
            - "./build/plugins:/var/www/html/wp-content/plugins:cached"
            - "./build/themes:/var/www/html/wp-content/themes:cached"
    cli:
        container_name: "${PROJECT_NAME}_cli"
        image: "wordpress:cli"
        volumes:
            - "wordpress:/var/www/html"
            - "./build/plugins:/var/www/html/wp-content/plugins:cached"
        depends_on:
            - wordpress
    mailhog:
        container_name: "${PROJECT_NAME}_mailhog"
        image: mailhog/mailhog
        depends_on:
            - wordpress
        ports:
            - "1025:1025"
            - "8025:8025"
volumes:
    wordpress: null
但我不明白为什么它这么慢;我得到了Docker Desktop的2.1.09.3版,并在快速Mac或Windows上工作

有人能帮我或给我指出正确的方向吗

编辑

  • 如果我查看docker统计数据,我的CPU大约为0.01%,内存大约为2.73%,所以这不会是问题所在
  • 发现最大的问题是连接到外部数据库。如果移到本地数据库,加载时间会快得多(+-1秒)

  • Mac和Windows卷性能存在一些问题

    链接了解更多详细信息:


    Mac和Windows有一些我们应该考虑的。

    我更改了我的
    docker compose.yml

    注意,因为我改变了

    此符号允许添加一致性选项

    我添加了
    wp content
    php conf
    (以获取php.ini),因为它们是每次在浏览器中加载Wordpress页面时最常调用的文件目录

    服务:
    wordpress:
    ...
    卷数:
    -/数据:/data
    -/脚本:/docker entrypoint initwp.d
    #-/wp内容:/app/wp内容
    -类型:绑定
    来源:./wp内容
    目标:/app/wp内容
    一致性:缓存
    #-/php-conf:/usr/local/etc/php
    -类型:绑定
    来源:./php-conf
    目标:/usr/local/etc/php
    一致性:缓存
    
    同样的问题,您解决了吗?类似的问题:@Yanick当您使用docker开发时,是否使用Mac或Windows?这是否回答了您的问题?虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-@克里斯,谢谢你的评论。我想补充信息是个好主意。我这样做是因为我注意到这个问题可能是重复的,我不知道假设在哪里是重复的问题。现在我注意到关闭选项。