dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2198
  • 铜币13939枚
  • 威望6046点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 喜欢达人
  • 原创写手
阅读:107回复:0

nginx 缓存服务器(番外)定制docker镜像

楼主#
更多 发布于:2019-07-02 17:23
分层存储
在 "nginx 缓存服务器(下)" 这篇文章中,我们讲解了如何使用 ngx_cache_purge模块主动清理缓存,不过默认的 nginx镜像是不包含 ngx_cache_purge模块的,我们需要自己安装这个模块,但是大家都知道 容器的生命周期会随着镜像更新而结束,也就是说在当前容器中安装的 ngx_cache_purge模块并不会保留在后续的镜像/容器里。

这是因为 Docker存储机制,Docker镜像使用的是分层存储,容器也是如此。每一个容器运行时是以镜像为基础层,并在其上创建一个当前容器的存储层,容器存储层的生存周期和容器一样,容器消亡时容器存储层也随之消亡,因此任何保存于容器存储层的数据都会随容器删除而丢失。


目标
在了解 Docker存储机制后,我们的目标也明确了,那就是将 ngx_cache_purge模块添加到自定义的 Nginx镜像中,避免每次创建容器后再次安装模块。


操作步骤
1. Dockerfile
cat Dockerfile

# nginx with ngx_cache_purge
FROM nginx:1.14-alpine
MAINTAINER dongnan

# env
ENV TZ=Asia/Shanghai \
    LANG=en_US.UTF-8

# nginx
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
    apk add --no-cache nginx-mod-http-cache-purge && \
    sed -i '1 i \load_module /usr/lib/nginx/modules/ngx_http_cache_purge_module.so;' /etc/nginx/nginx.conf

COPY conf/nginx.conf /etc/nginx/nginx.conf
COPY conf/default.conf /etc/nginx/conf.d/default.conf

这个 Dockerfile 就是根据 "nginx 缓存服务器(下)" 添加 ngx_cache_purge 模块步骤设计的。
FROM 表示使用那个基础镜像。
MAINTAINER 表示 Dockerfile的维护人。
ENV 表示容器环境变量,这里是TZ时区与LANG语言。
RUN 表示运行的命令,这里也就是添加模块的命令。
COPY 表示拷贝文件,这里是拷贝 nginx的配置文件。
注意,这里为了减少镜像的存储层数(每一个命令就是一层,这个Dockerfile 定义了6层),使用&&操作符将多个命令组合在一个 RUN中。配置文件conf/nginx.conf 与 conf/default.conf,可以参考 "nginx 缓存服务器(下)" 文章。

2. build 镜像
docker build -t nginx:cache-purge .
Sending build context to Docker daemon   7.68kB
Step 1/6 : FROM nginx:1.14-alpine
 ---> 8a2fb25a19f5
...省略
 ---> 9bd78cf61a45
Successfully built 9bd78cf61a45
Successfully tagged nginx:cache-purge
注意,那个它代表 Dockerfile 在当前目录。

3. 使用镜像
创建好的镜像如果没有错误提示,就是可以使用啦,例如在 rancher 中升级 nginx cache 服务。

图片:nginx-docker-mod.png




结束
至此,我们完成了带有ngx_cache_purge模块的自定义Nginx镜像,可以按照"nginx 缓存服务器(下)" 文章,尝试清理缓存数据。本期就到这里,下期再见。

公众号
欢迎关注微信公众号: 运维录

图片:wxgzh.png



参考
https://hub.docker.com/_/nginx
https://mirrors.aliyun.com/alpine/
https://stackoverflow.com/questions/47366214/how-do-i-add-the-lua-module-for-nginx-on-alpine-linux
https://github.com/FRiCKLE/ngx_cache_purge
#
欢迎关注微信公众号: 运维录
游客

返回顶部