Docker 是世界领先的软件容器平台。 开发者可以通过 Docker 解决协作时环境不一致的问题。 运维人员可以使用 Docker 在容器中运行和管理应用程序,以获得更好的计算密度。 企业可以使用 Docker 构建敏捷软件持续交付流程,更快,更安全,更可靠地为 Linux 和 Windows Server 上的应用程序提供新功能。本文总结了在CentOS环境下,如何通过docker搭建php开发环境。
生产环境要求
生产环境在腾讯云的云服务器CVM上,操作系统是CentOS 7.2
环境需求:
- CentOS 7.2
- php及相关扩展
- nginx
服务器环境
项目 | 版本 | 说明 |
---|---|---|
CentOS | 7.2.1511 | 操作系统 |
docker | 17.03.1-ce | |
yum-utils |
容器环境
项目 | 版本 | 说明 |
---|---|---|
CentOS | 7.2.1511 | 操作系统 |
wget | ||
gcc | ||
gcc-c++ | ||
make | ||
openssl-devel | ||
zlib-devel | ||
pcre-devel | Perl库,包括 perl 兼容的正则表达式库 nginx rewrite伪静态匹配规则用到正则 |
|
curl | ||
tar | ||
passwd | ||
php | 7.0.19 | |
php mcrypt扩展 | ||
php redis扩展 | ||
php thrift扩展 | 0.10.0 | 用于访问Thrift服务 |
nginx | 1.10.2 |
docker安装
安装docker
安装完毕,查看当前的docker版本为1.12.6
目前最新的版本是17,通过yum安装的版本比较旧,下面先卸载老版本docker
安装新版本
安装yum-utils
添加yum源
更新yum的包索引
安装docker
可以看到当前的版本是17.03.1-ce
可以通过下面的命令列出可用的docker版本
启动docker服务,并将其设置为开机自动运行
对于CentOS 7
以上版本可以采用systemd
语法
可以通过如下命令查看docker运行状态和信息
准备生产镜像
拉取CentOS镜像
启动docker容器
|
|
docker exec -i -t server /bin/bash
更新国内yum源(暂不执行)
更新前先备份原有CentOS-Base.repo文件
阿里云的yum源
更新yum
安装epel-release扩展包更新包
|
|
安装常用命令
|
|
passwd
|
|
sshd
|
|
wget
|
|
curl
|
|
tar
|
|
修改时区
|
|
PHP
计划安装php7.0.19版本
通过上面的命令,可以看到默认源上php的版本比较旧,需要添加新的源,这里添加webtatic的源
需要先安装epel-release
添加webtatic源
安装php
安装完成后查看php版本
下载php源码
源代码方式安装php,源代码放在/usr/local/src
从php.net下载速度太慢,改为从国内镜像网站下载
解压缩源码
安装php的依赖包
|
|
配置编译安装php
|
|
php配置文件初始化
初始化php.ini
、php-fpm.conf
、www.conf
文件
修改php.ini
修改将php.ini
文件中的配置项 cgi.fix_pathinfo 设置为 0
修改原因:如果文件不存在,则阻止 Nginx 将请求发送到后端的 PHP-FPM 模块,以避免遭受恶意脚本注入的攻击。
|
|
php.ini
修改php-fpm.conf
设置/usr/local/php/etc/php-fpm.conf
配置文件
php-fpm.conf
修改www.conf
设置连接池配置文件,设置/usr/local/etc/php-fpm.d/php-fpm.d
目录下www.conf
配置文件
www.conf
创建 fpm 运行用户
|
|
创建 log 目录
如果未打开日志记录,则不需要
安装redis扩展
|
|
|
|
执行成功后,会在扩展目录下生成redis.so
,路径如下
在生效的 php.ini 文件中加入一行
安装thrift扩展
Thrift是Apache的一个开源的跨语言服务开发框架,它提供了一个代码生成引擎来构建服务,支持C++,Java,Python,PHP,Ruby,Erlang,Perl,Haskell,C#,Cocoa,JavaScript,Node.js,Smalltalk,OCaml,Delphi等多种编程语言。
下载Thrift的软件包,并解压缩
配置、编译、安装Thrift
报错:
Python.h: No such file or directory
yum install python-devel
安装thrift protocol
cd /usr/local/src/thrift-0.10.0/lib/php/src/ext/thrift_protocol
/usr/local/php/bin/phpize
./configure –with-php-config=/usr/local/php/bin/php-config –enable-thrift_protocol
make && make install
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20151012/
修改php.ini,在最后添加一句extension=thrift_protocol.so
在生效的 php.ini 文件中加入一行
重启php服务
安装mcrypt扩展
|
|
修改php.ini,在最后添加一句extension=mcrypt.so
在生效的 php.ini 文件中加入一行
重启php服务
php-fpm运行设置
|
|
nginx
下载nginx源码
|
|
解压缩源码
tar xf nginx-1.10.2.tar.gz
rm -f nginx-1.10.2.tar.gz
编译安装nginx
创建nginx用户
|
|
-s /sbin/nologin
不允许用户登录
编译安装nginx
|
|
提交镜像
提交容器
其中277757b6a7a1
为容器id
Docker Compose
Docker Compose是一个用来定义和运行复杂应用的Docker工具。使用Compose,你可以在一个文件中定义一个多容器应用,然后使用一条命令来启动你的应用,完成一切准备工作。
Docker Registry
官方仓库(Public Repositories)
私有仓库(Private Repositories)
https://github.com/dotcloud/docker-registry
|
|
latest
的版本是2.6.1
启动registry
查看仓库中的镜像
浏览器访问
http://localhost:5000/v2/_catalog
或者
docker pull busybox
docker run -d busybox
docker ps
|
|
例如
docker commit 容器id localhost:5000/busybox
docker push localhost:5000/busybox
从 docker v1.12 开始,docker 就不支持从 HTTP 仓库下载镜像,建立私有仓库必须走 HTTPs 加密协议
由于http改为https,push时提示如下内容
需要修改,然后重启docker
/usr/lib/systemd/system/docker.service
重启docker服务
参考
Thrift相关
- Apache Thrift
- php 安装 thrift