PHP 应用容器化以及部署方法
2018-02-12 09:16
2799 查看
PHP 是世界上最好的语言。
经典的 LNMP(linux + nginx + php + mysql)环境有很多现成的部署脚本,但是在 Docker 盛行的今天,依然有很多同学在如何部署上有一些列问题,所以这篇简单介绍一下如何使用 Docker 以及 docker-compose 在服务器上部署 php 应用。
首先我们回顾一下过去的 nginx 里 php 配置:
location ~ \.php$ { try_files $uri =404; include fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }
所有 php 文件使用 php 引擎来解析,php 运行在本地的 9000 端口(可以通过 ip/unix domain sockets 访问),既然可以是本地,当然也可以通过 远程服务 来解析了。
故而我们的 nginx 服务如下配置:
server { listen 80; charset utf-8; # access_log /var/log/nginx/nginx.access.log main; # error_log /var/log/nginx/error.log; root /var/www/html; index index.php index.html; add_header X-Cache $upstream_cache_status; location ~ \.php$ { try_files $uri =404; include fastcgi_params; fastcgi_pass php-fpm:9000; fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }
于此同时,有个比较棘手的问题是,php 代码在nginx 和 php 引擎都需要存在,不然解析不了,但这都不是事啊,docker 的 volume 天然支持!
直接看下面的 docker-compose.yml 配置:
version: '2' services: nginx: image: nginx:stable-alpine ports: - 80:80 volumes: - ./conf/nginx/conf.d:/etc/nginx/conf.d volumes_from: - php-fpm restart: always php-fpm: image: php:7.1-fpm-alpine volumes: - ./code:/var/www/html restart: always
注意点:
php-fpm 挂载了本地目录 code 到 /var/www/html
nginx conf 中使用了 service_name 来访问 php-fpm
nginx 通过 volumes_from 指令共享了 php-fpm 的 /var/www/html
在 code 目录下 index.php 里写一下:
<?php echo phpinfo();
然后运行:
# bash docker-compose up
打开浏览器可以看到熟悉的 phpinfo 了:
那么问题来了,有小伙伴要问了,依赖怎么办?好的,这就是我要继续说的。
在你的项目里放一个 Dockerfile:
FROM php:7.1-fpm-alpine RUN docker-php-install pdo pdo-mysql COPY src /var/www/html
构建的话可以选择阿里云镜像服务构建功能或者是 Docker 提供的自动构建,然后更新一下之前的 docker-compose.yml 即可:
version: '2' services: nginx: image: nginx:stable-alpine ports: - 8000:80 volumes: - ./conf/nginx/conf.d:/etc/nginx/conf.d volumes_from: - php-fpm restart: always php-fpm: image: {YOUR_PHP_IMAGE_NAME}:{TAG} restart: always
本示例代码:
您可能感兴趣的文章:
相关文章推荐
- 基于PHP的加载类操作以及其他两种魔术方法的应用实例
- Kubernetes 集群的两种部署过程(daemon部署和容器化部署)以及glusterfs的应用!
- tomcat部署web应用的4种方法以及部署多个应用
- DataGrid的应用以及常用方法(Vb.Net版)
- 一种动态部署JBoss应用的简单方法
- javascript中apply方法和call方法的作用以及prototype.js中的应用
- Tomcat 部署web应用方法总结
- Sping+Struts+Hibernate开发的应用部署在weblogic下时出现的“ClassNotFoundException: org.hibernate.hql.ast.HqlToken”错误的解决方法
- ZF开发的PHP应用与传统PHP应用集成的方法
- php判断字符以及字符串的包含方法属性
- javascript中apply方法和call方法的作用以及prototype.js中的应用
- Tomcat 部署web应用方法总结
- 数据库缓存技术在web上的应用以及出现错误的解决方法
- 正则表达式的常用方法和属性以及应用举例
- 详解加密技术概念、加密方法以及应用(2)
- 详解加密技术概念、加密方法以及应用(3)
- PHP截取汉字乱码问题解决方法mb_substr函数的应用
- 详解加密技术概念、加密方法以及应用(1)