本文章将记录本站的建立过程,不方便透露的信息将直接使用中文表示。
准备工作:
服务器:ECS、RDS各一台(选择阿里云原因:便宜、好用)、域名一枚
基础环境:Linux(ECS_Centos7.2)+Nginx(Docker)+MySQL(RDS)+PHP(Docker)
选择Docker的原因:
1、简化配置;
2、隔离应用(可部署多个站点);
3、监控方便(基于Rancher);
4、快速部署(在制作好镜像的情况下,5分钟内便可完成部署);
Nginx与PHP的镜像使用:
1、Nginx为官方提供的镜像、PHP镜像为自制的。为什么要这样操作?
本身对nginx的版本要求并不高,官方提供的镜像大小只有107.4 MB,既能发挥所有功能了,而本人经过多次尝试之后发现自制镜像大小都大于200MB,所以最终选择了官方提供的镜像。
许多程序对PHP的版本都有一定的依赖性,且官方提供的镜像大小为 369.7 MB(单一版本);而自己基于centos:7.2镜像、且自定义php版本和模块后的镜像大小为346.6 MB。所以最终选择自制的镜像
2、为什么不将nginx与php放置同一容器中,依据什么?
1、依据官方的使用原则,一个容器跑一个程序(官方建议,也是容器的一个设计理念)。
2、nginx与php各自易扩展,一般处理瓶颈不会出现在nginx上,要提升的一般为php的处理能力,而此时如果nginx与php放置于同一个容器内的话,每拉起一台容器时都将浪费nginx的资源。
3、为什么MySQL不使用Docker?
原因:本人对MySQL到底适不适合用于Docker技术现在还未有一个明确的概念,总觉得没必要,且多次尝试的效果都未体现其优势,所以此本身暂时还为使用Docker。
下面链接为近期一篇关于MySQL使用Docker的文章。
http://www.360doc.com/content/17/0803/12/16619343_676322878.shtml
Nginx与PHP的镜像制作:
#docker pull nginx 获取nginx镜像
#docker pull centos:7.2.1511 获取centos7.2镜像用于制作php镜像
以下为dockerfile内容(可根据需要更改php版本:如将全部php更换为php53w或php71w)
FROM docker.io/centos:7.2.1511
MAINTAINER Huangqihuan <[email protected]>
LABEL name="CentOS Base Image"
LABEL vendor="CentOS"
LABEL license=GPLv2
ADD run.sh /run.sh
RUN rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm && rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
RUN yum -y install php-gd php-mysql php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-snmp php-soap php-tidy php-common php-devel php-fpm && yum clean all && chmod 777 /run.sh
RUN useradd nginx && mkdir /www
ENTRYPOINT "/run.sh"
以下为run.sh内容
#!/bin/bash
/usr/sbin/php-fpm -c /etc/php-fpm.d/www.conf && /bin/bash
生成自制的php镜像
#sudo docker build -y centos7.2_php53:v1 .
创建容器
创建前先在本地完成如下准备:
/www/wordpress #存储wordpress代码路径
/www/nginx/nginx.conf #挂载nginx主配置文件
/www/nginx/conf.d #挂载nginx子配置文件目录
/www/nginx/log #挂载nginx日志目录
/www/php/www.conf #挂载php配置文件
1、创建php容器
sudo docker run -d --name "phpfpm" -P -v /www/wordpress:/www -v /www/php/www.conf:/etc/php-fpm.d/www.conf centos7.2_php53:v1 /run.sh
2、创建nginx容器
sudo docker run --name nginx_php -d -p 80:80 --link phpfpm:phpfpm -v /www/wordpress:/www -v /www/nginx/nginx.conf:/etc/nginx/nginx.conf -v /www/nginx/conf.d:/etc/nginx/conf.d -v /www/nginx/log:/var/log/nginx docker.io/nginx nginx -g "daemon off;"
3、nginx.conf配置信息(以下贴出来的配置信息为初始信息,并为经过调优,目的只为实现部署)
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
}
4、wordpress.conf配置信息
server {
listen 80;
server_name 更改为域名;
location / {
root /www;
index index.php index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /www;
}
location ~ \.php$ {
root /www;
fastcgi_pass phpfpm:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /www$fastcgi_script_name;
include fastcgi_params;
}
}
5、www.conf配置文件(注释信息已去除)
[www]
listen = 9000
user = nginx
group = nginx
pm = dynamic
pm.max_children = 80
pm.start_servers = 15
pm.min_spare_servers = 5
pm.max_spare_servers = 50
slowlog = /var/log/php-fpm/www-slow.log
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session