事情是这样子的:
之前做一个项目,手上有2台做事器。一台运行着内测版的系统,供开拓职员开拓和测试利用,里面的数据均是无意义的测试数据;另一台则是运行着正式版的系统,供用户利用,里面的数据均是真实用户发布的一些真实数据,不应该也不许可和测试数据混在一块。第一台做事器由于是开拓测试利用,本身就均匀只有不到5个在线用户,以是弄一台做事器来专门利用确实有点摧残浪费蹂躏。第二台做事器由于正式版系统没怎么推广起来,用户量也不大,以是每天CPU和内存也都是空闲着,其实摧残浪费蹂躏。
本着节约和学习的态度,前段韶光学习了Docker,然后把这两台做事器整合到了一台做事器上了,事理正如标题所说那样,前端利用Nginx做代理转发流量,然后后真个多个Docker容器做事器来吸收要求,处理并返回处理结果。下面说说大概做了什么事情:
1、去阿里云租了个CentOS 7,根本镜像,里面除了CentOS自带的做事,没其他多余的程序。以是首先安装了Docker,详细看这里http://www.cenyol.com/?p=328,里面先容了如何安装Docker,以及如何制作第一个镜像。这么一来,就有了我们自己定制的Docker镜像了,比如我制作了一个要用的是lnmp镜像,软件配置:CentOS 7+Nginx+MySQL 5.6+PHP 7,外加一个ssh做事,用于之后利用ssh客户端登录容器进行远程操作。我们叫它lnmp:v1.0,v1.0是标签,可自定义,这里用个版本号来表示。
2、经由这段韶光的实践,我知道了这样做更好:docker run -d –name server_debug -p 50080:80 -p 50081:81 -p 50306:3306 -p 50022:22 cenyol/lnmp:v1.0 /usr/sbin/sshd -D ,解释:–name参数表明将该容器的名称设置为其之后的字符串,即该容器叫做server_debug;-p是端口映射的参数配置,大概便是宿主机的50080端口映射到容器的80端口,之后三个-p都是类似。运行完这个命令,系统的Docker做事就创建了一个Docker容器,并且在后台启动了它。我们可以通过ssh客户端来登录,进入里面做该做的事情,这里大略说:我进去之后,利用git将前面说的测试版本系统拉下来,进行了支配,在里面启动Nginx,php-fpm,和mysql做事。并将之前测试做事器上的数据库也搬了过来,这样这个server_debug的容器就拥有了和之前的测试做事器一摸一样的功能了,实在,它便是用来替代测试做事器的浸染,由于为了省钱,我们往后一会在租用测试做事器的,而是利用server_debug来做开拓测试,嗯,还不错。
设:
宿主机的IP=1.1.1.1,则当我们要访问server_debug的80端口,则,访问地址为:1.1.1.1:50080,其他三个类似。
3、我们在宿主机上的架构是利用Nginx反向代理做前真个“流量转发角色”,将来自不同域名要求的流量转到不同的容器做事器中去处理。不过,目前为止,我们只有测试做事器server_debug,正式版的做事器还没建起来。按照上面的规则,把命令端口改一下,做事器名改一下,用这个命令吧:docker run -d –name server_release -p 51080:80 -p 51081:81 -p 51306:3306 -p 51022:22 cenyol/lnmp:v1.0 /usr/sbin/sshd -D。可以看到,正式版的容器名称叫做server_release,宿主机方面的映射端口因此51开头的前缀。然后也是通过ssh登录进去,用git拉一下源码,把数据库也迁移一下,把全体项目支配起来。这样我们就可以通过1.1.1.1:51080来访问正式版系统了。
4、到目前为止,宿主机上的两个小Docker群搞好了,虽然只有两个,但也是复数,称它们为Docker集群该当可以的。我们之后,域名解析设置只能做到域名-ip的级别,并不能做到域名-ip:port的映射,好在无论是Apache还是Nginx之类的web做事器都是可以通过不同域名,将流量转发到不同的web系统的,而且Nginx还能做反向代理,这个事理自己去谷歌。咱们这里用一用就好了。要实现的功能大概是这样:
设:
我有一个域名是cenyol.com。现在做如下的对应:
www.cenyol.com->1.1.1.1:51080
admin.cenyol.com->1.1.1.1:51081
www-dev.cenyol.com->1.1.1.1:50080
admin-dev.cenyol.com->1.1.1.1:50081
从以上的域名设置和端口对应分配大概可以看出,-dev后缀的是测试系统,而且它对应的宿主机端口确实便是50开头的两个端口,在前面可以看到50开头的端口都是属于server_debug容器的,嗯,这样子就没错啦。如果可以在dns那边做这样的解析,辣么,到这里该当算是把做事器整合完毕,没有宿主机上的Nginx什么事儿了,也没必要在宿主机上安装Nginx了。正如前面所说的dns的域名解析设置只能做到域名-ip的级别。以是我们只能在我们的域名解析设置页面做这样的设置:
www.cenyol.com->1.1.1.1
admin.cenyol.com->1.1.1.1
www-dev.cenyol.com->1.1.1.1
admin-dev.cenyol.com->1.1.1.1
没错,四个域名都是指向同一个ip,即我们的宿主机ip。我们知道,Nginx可以根据不同的域名进行不同的转发。大概的事理便是,我们可以在Nginx里面设置,使得来自www.cenyol.com的流量,被Nginx转发到了127.0.0.1:51080。嗯,既然后真个Docker们都搞好了,现在就剩下前端安装一下Nginx,然后配置一下反向代理了,详细看这里:http://www.ttlsa.com/nginx/use-nginx-proxy
5、在浏览器访问上面配置的四个域名,嗯,没错的话该当是可以了的。