随着Docker的不断成熟,愈来愈多的站长以及运维人员选择Docker构建程序运行环境,另外因为国内的云服务厂商一般在新购主机时会给较大的优惠,而续费则优惠不多,本着尽可能节省成本的原则,借助Docker自动构建运行环境,成为一个比较好的选择。本文针对的场景是一台云主机上运行多个版本的PHP的状况,LNMP架构。php
这里把运行Docker服务的服务器叫宿主机,目前Docker对于宿主机的系统是有要求的,简单来讲,Centos 须要7以上,Ubuntu须要16以上。因此在购买或者升级云主机的系统时,须要注意系统的版本,一般选最新的版本是没错的,除非有特殊的需求。接下去以Centos为例,安装Docker的步骤以下:html
sudo yum remove docker \ docker-common \ docker-selinux \ docker-engine
sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2
sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce
sudo systemctl start docker
sudo docker run hello-world
这个命令将拉去hello-world镜像并运行,将输出hello world消息 7. 让Docker随系统启动linux
sudo systemctl enable docker
sudo curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["您的专属加速地址"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
至此,宿主机算配置完毕啦。nginx
docker composer 适合单主机的状况下进行多容器编排,代码已经所有放到马云了。 地址:https://gitee.com/linwx/Docker-LNMPgit
不一样版本的PHP,用不一样的服务名来标志,如php-fpm,和php54-fpm. 而后在nginx里链接的时候,指定相应的名字:github
links: - php-fpm:fpm - php54-fpm:fpm54
在相应的配置文件中,如site1站点是运行在PHP7版本的,对应的fastcgi_pass参数是fpm:9000:docker
location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass fpm:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors off; fastcgi_buffer_size 16k; fastcgi_buffers 4 16k; }
site2站点是运行在PHP5.4版本上的,对应的fastcgi_pass参数是fpm54:9000:json
location ~ \.php$ { root /var/www/html/bbs; fastcgi_pass fpm54:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; fastcgi_read_timeout 600; }
涉及到时间和日期的操做,须要关注容器的默认时区,好比nginx的日志输出的时间,php的计划任务运行的时间,所以须要在容器编译的时候,就指定好默认的时区,在nginx和cron的dockerfile里能够看到对应的命令:centos
RUN ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
本着每一个容器运行一个服务的原则,本文把cron服务也单独成一个容器,为了让cron容器正常运行,须要注意2点,一是容器的时区,上文已经提过;二是计划任务的列表,须要让在编译的时候写入,相应的dockerfile以下:服务器
ADD crontab /etc/cron.d/cron RUN chmod 0644 /etc/cron.d/cron RUN crontab /etc/cron.d/cron CMD ["cron", "-f"]
使用cron -f 命令,让cron保持在前台运行
若是不想了解那么多细节,能够在配置完宿主机后,直接git clone https://gitee.com/linwx/Docker-LNMP.git 而后配置相应的站点nginx配置文件,就可使用docker-compose up -d --build启动全部服务啦。