自从认识到Docker这个工具,很多服务都希望通过Docker来搭建,毕竟不会把我的服务器环境弄得乱七八糟的,所以nginx的部署自然也琢磨着怎么用Docker来搭建。(在此声明,本人的docker和nginx的技术水平,就是简单的入门,只会根据实际需要去进一步了解。)
1 Docker的安装
1.1 docker安装
Docker的安装网上有很多教程,我常用的操作系统是CentOs7.x,推荐参考这个教程。
1.2 docker-compose安装
有些教程推荐安装docker-compose,好像是更易于打包docker镜像,可直接参考这个教程,非常简单,执行下面几条命令即可:
$ curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
实际安装的时候,直接下载最新版即可,也就是上面命令中的版本号。
2 php环境的部署
php环境的部署,也是通过docker部署,因为本系列大部分是部署php模板网站,所以需要用到这个环境。
很简单,请直接按照下面的命令运行就是了(PS:对于php版本,可根据自己的需求指定不同版本)
$ docker pull bitnami/php-fpm:7.0 --这个7.0就是指php版本
$ docker run -d -p 9000:9000 \ ##-d指定后台运行,-p指定系统9000端口映射到nginx容器默认的9000端口
> -v /data/nginx/www:/usr/share/nginx/html \ ##将我们自建的网站文件夹路径,替换成nginx默认的路径
> --name m_phpfpm bitnami/php-fpm:7.0 ##起一个别名m_phpfpm,这个别名我们后面会用得到
3 Nginx的部署
3.1 拉镜像和运行
我直接拉取最新的镜像,如果有特殊版本需求的话,请自行指定。执行下面的命令就行了:
$ docker pull nginx
$ docker run -d -p 80:80 --name m_nginx nginx
## --- -d:表示后台运行
## --- -p:指定端口号,nginx默认是80,前一个80是指把当前系统的80端口映射到nginx容器的80端口上,你也可以根据需求选择其他端口
## --- -name:起一个别名
## 最后一个nginx就是镜像的名称,如果你系统中不止一个nginx镜像的话,要指定具体哪一个nginx
3.2 创建资源文件夹
因为一般不会直接用容器内部的文件夹来存放东西,并且有时候Nginx的配置文件也希望能灵活修改,所以我们会在系统内新建一些文件夹,用来挂载到不同的容器,结合我们将会用到的Nginx的文件,我设计了下面的文件夹:
~ #系统根目录
--/data ##自建文件夹
----/nginx ##nginx相关的文件夹
------/www ##网站文件夹,对应nginx的/usr/share/nginx/html文件夹
------/logs ##nginx日志文件夹,对应nginx的/var/log/nginx文件夹
------/conf.d ##自定义配置文件夹,对应nginx的/etc/nginx/conf.d
------/conf ##配置文件夹,对应nginx的/etc/nginx/conf
3.3 从Nginx容器拷贝文件
我们主要是拷贝nginx.conf和default.conf两个文件,分别存储到我们能前面建立的文件夹里,命令如下:
$ docker cp ID:/etc/nginx/nginx.conf /data/nginx/conf
$ docker cp ID:/etc/nginx/conf.d/default.conf /data/nginx/conf.d
## ID就是通过docker ps命令查看得到的
3.4 停止并删除容器
文件拷贝后,接下来我们会以挂载的方式重新运行nginx,所以需要把已经运行起来的容器进行删除,执行下面的命令:
$ docker stop ID ##必须先停止容器,才能删除
$ docker rm ID
##--注:如果想要删除镜像,执行过上面两步后,再执行“docker rmi nginx”,nginx是镜像名称,可以通过docker images查看得到
3.5 挂载运行Nginx
挂载运行Nginx就是为了把我们自定义的配置文件、网站文件、日志文件,替换Nginx本身对应的文件,便于我们做各种处理。执行下列命令即可:
$ docker run \
> -d \
> -p 80:80 \
> -v /data/nginx/www:/usr/share/nginx/html \
> -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro \
> -v /data/nginx/conf.d:/etc/nginx/conf.d \
> -v /data/nginx/logs:/var/log/nginx \
> --link m_phpfpm:phpfpm \ ##link是指与另一个容器建立联系,这样的话,上面的配置文件里,才可以用m_phpfpm
> --name m_nginx nginx
4 Mysql的部署
Mysql基本上是所有PHP模板网站所使用的数据库了,所以必须要安装,而且依据我的经验,建议安装5.6版本,也是目前能找到的docker镜像的最低版本,安装建议看这个教程。
Mysql镜像的运行建议按照下面的命令执行(当然最好参考Mysql在docker hub上的官方说明,有时候一些文件位置可能会不同版本不一样)
$ docker run -p 3306:3306 --name mymysql \
> -v $PWD/conf/my.cnf:/etc/mysql/my.cnf \ ###默认配置文件,可选
> -v $PWD/conf/custom:/etc/mysql/conf.d \ ###自定义配置文件所在的文件夹
> -v $PWD/logs:/logs
> -v $PWD/data:/var/lib/mysql \
> -e MYSQL_ROOT_PASSWORD=123456 \
> --security-opt seccomp:unconfined \
> -d mysql:5.6
到这里nginx、MySql、php环境都已经部署了,后续搭建php模板网站就在此基础上进行,每次部署php网站可能都需要重启nginx,如果有条件建议直接购买云服务商的数据库服务,数据丢了真的很疼,本来钱就少买不了那么多服务器做数据备份。