Windows上痛苦的缓慢docker PHP设置



我运行带有Hyper-V,4核和8GB RAM的Windows版Docker,但我的PHP项目的页面加载量约为每页40秒。

我的设置使用自签名证书,但我认为问题与其他问题有关。

在我的 docker 构建过程中,我收到以下警告:

---> 在 46329f96a79f 中运行 重新启动 Apache httpd Web 服务器:apache2[周一 6 月 11 日 09:17:26.151516 2018] [ssl:warn] [pid 23] AH01906:localhost:443:0 服务器证书是 CA 证书(基本约束:CA == TRUE !?( [周一6月11日 09:17:26.151605 2018][SSL:警告][第23页]AH01909:本地主机:443:0 服务器证书不包含与服务器名称匹配的 ID

由于非https页面加载速度也很慢,我认为这是另一回事。

我的码头工人文件如下

FROM php:5.6-apache
COPY server.crt /etc/apache2/ssl/server.crt
COPY server.key /etc/apache2/ssl/server.key
RUN docker-php-ext-install pdo pdo_mysql mysqli
RUN apt-get update &&
apt-get install --no-install-recommends --assume-yes --quiet ca-certificates 
curl git &&
rm -rf /var/lib/apt/lists/*
RUN curl -Lsf 'https://storage.googleapis.com/golang/go1.8.3.linux- 
amd64.tar.gz' | tar -C '/usr/local' -xvzf -
ENV PATH /usr/local/go/bin:$PATH
RUN go get github.com/mailhog/mhsendmail
RUN cp /root/go/bin/mhsendmail /usr/bin/mhsendmail
RUN echo 'sendmail_path = /usr/bin/mhsendmail --smtp-addr mailhog:1025' > 
/usr/local/etc/php/php.ini
COPY ./ /var/www/html/
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf
RUN a2enmod rewrite
RUN a2enmod ssl
COPY dev.conf /etc/apache2/sites-enabled/dev.conf
RUN service apache2 restart
EXPOSE 80
EXPOSE 443

当我单击链接时,它显示正在等待...在 de 浏览器栏中 ~40 秒,但显示页面内容本身非常快

可能是 DNS 问题吗?

我将使用 PHP + Redis + MySQL + Nginx 与您分享我的 docker 设置,看看它是否对您有用!

我的 Dockerfile

FROM php:7.1-fpm
RUN apt-get update
RUN apt-get install -y zlib1g-dev 
libjpeg-dev 
libpng-dev 
libfreetype6-dev
# Add Microsoft repo for Microsoft ODBC Driver 13 for Linux
RUN apt-get update && apt-get install -y 
apt-transport-https 
&& curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - 
&& curl https://packages.microsoft.com/config/debian/8/prod.list > /etc/apt/sources.list.d/mssql-release.list 
&& apt-get update
# Install Dependencies
RUN ACCEPT_EULA=Y apt-get install -y 
unixodbc 
unixodbc-dev 
libgss3 
odbcinst 
msodbcsql 
locales 
&& echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && locale-gen
RUN pecl install pdo_sqlsrv-4.1.8preview sqlsrv-4.1.8preview 
&& docker-php-ext-enable pdo_sqlsrv sqlsrv
RUN ln -s /usr/lib/x86_64-linux-gnu/libsybdb.a /usr/lib/
RUN docker-php-ext-install pdo_mysql
RUN docker-php-ext-install zip
RUN mkdir -p /code
ENV HOME=/code
WORKDIR $HOME
USER root
COPY ./ $HOME

在这个 docker 文件中也有一个 SQLServer 连接插件(我有很多项目已经与它集成(。

现在我的码头工人-compose.yml

web:
container_name: your_web_container_name
image: nginx
ports:
- "80:80"
volumes:
- ./:/code
- ./host.conf:/etc/nginx/conf.d/default.conf
links:
- php:php
redis:
container_name: your_redis_container_name
image: redis
php:
container_name: your_php_container_name
build: ./
dockerfile: ./Dockerfile
volumes:
- ./:/code
links:
- db
- redis
db:
container_name: your_database_container_name
image: mysql:5.6
volumes:
- /var/lib/mysql
ports:
- "3306:3306"
environment:
- MYSQL_USER=docker
- MYSQL_DATABASE=docker
- MYSQL_ROOT_PASSWORD=docker
- MYSQL_PASSWORD=docker

nginx 的默认 conf

server {
listen 80 default_server;
root /var/www/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.html index.htm index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt  { access_log off; log_not_found off; }
location ~ .php$ {
fastcgi_pass 127.0.0.1:9001;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /.(?!well-known).* {
deny all;
}
}

我希望它对您有所帮助。

最新更新