Docker 下的 OpenResty 三部曲之二:细说开发
欢迎访问我的 GitHub
这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos
本篇概览
本文是《Docker 下的 OpenResty 三部曲》的第二章,在前文《Docker下的OpenResty三部曲之一:极速体验》我们简单的体验了 Nginx+Lua 提供的 web 服务,但是并没有深入开发细节,今天就来一起实战这个镜像的制作过程;
实战环境
操作系统:Ubuntu16;
Docker 版本:17.03.2-ce;
步骤列举
此镜像的准备工作如下:
提前下载必要的资源:ngx_openresty、ngx_cache_purge、nginx_upstream_check_module;
定制 nginx.conf;
开发用于 demo 演示的配置文件和 lua 脚本;
镜像的 Dockerfile 脚本中要做以下事情:
源镜像为 Ubuntu 16;
准备两个目录:nginx 工作目录/usr/servers ,lua 脚本的存放目录/usr/local/work ;
apt 换源,用阿里云的源;
apt 更新;
安装必要的应用,如 gcc、libreadline-dev 等;
安装 ngx_cache_purge、nginx_upstream_check_module、ngx_openresty;
将定制好的 nginx.conf 放入镜像;
将用于 demo 演示的配置文件和 lua 脚本放入镜像;
暴露 80 端口;
配置容器启动命令,启动 nginx;
准备材料
本次构建镜像所需的材料我已准备齐全,您可以在 github 下载到:
这个 git 项目中有多个目录,本次所需的资源放在 nginx_lua_docker_image_files,如下图红框所示:
Dockerfile 文件
下载了上述所有材料后,我们就可以进行构建了,Dockerfile 也在上述材料中,内容如下,将我们前面列举的工作逐个完成:
以上脚本都有注释,就不再赘述太多了,有几个关键点需要注意:
Nginx 和 OpenResty 等安装在/usr/servers 目录,而我们实战的时候配置的 conf 文件以及编写的 lua 脚本都存放在/usr/local/work 目录;
记得安装 make、gcc 等工具,否则无法编译构建 Nginx;
虽然/usr/servers/nginx/sbin/nginx 可以启动 nginx,但是会在后台运行,在 docker 容器中如果最后一个启动的进程不再占有终端,docker 服务就会停止该容器,所以需要添加"-g daemon off"参数,使得 nginx 进程不要以后台服务的方式运行,这样容器就不会退出了;
定制的 nginx.conf
从 Dockerfile 中我们看见原有的 nginx.conf 被我们定制的同名文件替换了,新的 nginx.conf 相比而言做了以下改动:
添加自定义模块所在目录:
添加自定义配置文件:
自定义配置文件 boling_cavalry.conf
我们将 lua 相关实战的配置都放在 boling_cavalry.conf,避免频繁修改 nginx.conf:
如上所示,定义了两个二级域名的入口逻辑:lua_request 和 lua_sequare,lua_request 用 content_by_lua_file 命令委托 test_request.lua 生成页面内容,lua_sequare 用 set_by_lua_file 给 num 变量赋值;
脚本 test_request.lua
这个脚本里是一些常用的 OpenResty 的 API 示例,来自开涛大神的文章《第二章 OpenResty(Nginx+Lua)开发入门》;
脚本 get_sequare.lua
这个脚本演示了如何使用自定义 module,有个根据长和宽计算长方形面积的 module:sequare.lua,如下所示:
square 可以接收长和宽两个参数,然后返回计算结果,调用该 module 的代码在 get_sequare.lua,如下:
如上所示,接收 boling_cavalry.conf 中的配置传来的长和宽两个参数,调用 sequare 计算,返回结果;
构建镜像
将上述材料全部准备完毕后,在 Dockerfile 文件所在目录执行以下命令即可构建 Docker 镜像:
输出信息如下:
实战 OpenResty
镜像构建成功后,就可以像上一章那样运行和体验 Nginx+Lua 服务了,您也可以在容器中自己去修改或者添加 Lua 脚本,实现更多的功能,修改完毕 conf 或者 Lua 脚本后,记得执行以下两个命令:
测试 Nginx 配置:/usr/servers/nginx/sbin/nginx -t
Nginx 重新加载配置:/usr/servers/nginx/sbin/nginx -c /usr/servers/nginx/conf/nginx.conf -s reload
至此,整个镜像的制作过程就完成了,接下来的章节,我们去 kubernetes 实战,搭建 Nginx+Lua+Tomcat 的综合服务;
欢迎关注 InfoQ:程序员欣宸
版权声明: 本文为 InfoQ 作者【程序员欣宸】的原创文章。
原文链接:【http://xie.infoq.cn/article/7bd1a3c093b4f8b5482eebcde】。文章转载请联系作者。
评论