使用 docker 容器部署 PHPHub 论坛
一、从 Laravel 框架说起
从了解 Laravel 框架的第一刻开始,就被这一框架的优雅和简洁所吸引住了,根据一些网络上的统计数据,这一框架在国外 PHP 界的使用率达到了百分之七十以上,Laravel 框架的火热程度可见一斑,在国内为数不多的 Laravel 推广社区中, PHPhub 是一个个人认为比较好的论坛,论坛地址:https://phphub.org/ ,十分让人赞叹的是 PHPHub 论坛的源代码已经开源在 github,项目地址:https://github.com/summerblue/phphub5,由 summblue 大神维护的这个论坛项目十分强大,相比一些山寨的 discuz 论坛,phphub 的 UI 显得十分优雅简洁,还支持 markdown 书写内容,功能十分强大,不禁让人产生了亲自部署一个实例的冲动,于是义无反顾地踏上了了漫长的折腾之路~
二、为什么选择 docker
用一句话来解释:方便而且没有“副作用”。docker 容器技术在最近再互联网上的火热程度不言而喻,考虑尝试一下 docker 的一个重要原因是容器技术相比于虚拟机的便捷和小巧,部署完成之后基本可以当成虚拟机来使用,但使用开销却十分低廉,这一点对于资源十分紧俏的开发机器来说,相当重要。
三、docker 环境准备
1、安装 docker
查看本机系统信息
$ lsb_release -a
Distributor ID: Ubuntu
Description: Ubuntu 14.04.4 LTS
Release: 14.04
Codename: trusty
说明当前系统是 Ubuntu 14.04(trusty)发行版,于是从 docker 官网上翻到 ubuntu 系统的安装说明:https://docs.docker.com/engine/installation/linux/ubuntulinux/
检查内核版本:
$ uname -r
3.13.0-86-generic
准备一些 http 和 CA 证书:
$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates
安装 GPG 密钥:
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
添加 docker 软件源:
$ sudo vim /etc/apt/sources.list.d/docker.list
添加内容:
deb https://apt.dockerproject.org/repo ubuntu-precise main
保存退出,更新软件源:
准备使用远程安装 docker:
$ sudo apt-get purge lxc-docker
$ apt-cache policy docker-engine
$ sudo apt-get update
$ sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
执行远程安装命令:
$ sudo apt-get install docker-engine
完成以后,启动 docker 服务:
$ sudo service docker start
如果查看到 docker 版本信息,说明 docker 已经安装成功:
$ sudo service docker start
Docker version 1.12.1, build 23cf638
2、拉取 ubuntu 系统镜像
由于众所周知的原因,国内环境使用 docker 官方提供的镜像源接近与龟速,良心的是,国内创业公司 daocloud 提供了免费的 docker 镜像加速工具,按照提供的文档部署 docker 加速器:
$ sudo curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://26e1616d.m.daocloud.io
phphub 项目文档要求的部署环境要求是:
PHP 5.6+
Mysql 5.7+
Nginx 1.8+
Memcached 1.4+
Redis 3.0+
以上环境要求中,最为重要的就是 PHP 和 Mysql 的版本,事实上,ubuntu 主流软件源只提供 php 5.5 和 mysql 5.6 的 debian 安装包,为了尽可能减少折腾中可能遇到的麻烦,打算直接拉取一个已经部署了类似环境的 docker 镜像,使用搜索命令:
$ docker serarch php5.6
最终挑选一个认为合适的镜像,拉取之:
$ docker pull andreisusanu/nginx-php5.6
漫长等待~~~完成之后,查看已经拉取到的镜像:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
andreisusanu/nginx-php5.6 latest ad0d31c29b44 4 months ago 271.1 MB
可以看到一个已经集成了 php5.6 和 nginx 环境的docker镜像也就200多MB!相比于虚拟机动辄十几GB大小镜像文件,docker 十分精致小巧。既然已经下载准备好了镜像文件,那么下一步就可以再此镜像基础上运行容器环境了,不过,由于篇幅有限,关于在镜像中配置部署环境的折腾过程留到后文来说明。