跳转至

Nginx 缓存服务器(番外)定制 Docker镜像


2019-07-02 by dongnan

分层存储

Nginx 缓存服务器(下) 这篇文章中,我们讲解了如何使用ngx_cache_purge模块主动清理缓存,不过默认的 nginx镜像是不包含ngx_cache_purge模块的, 我们需要自己安装这个模块。

但是大家都知道 容器的生命周期会随着镜像更新而结束,也就是说在当前容器中安装的 ngx_cache_purge模块并不会保留在后续的镜像/容器里。

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

目标

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

操作步骤

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 缓存服务器(下)" 文章。

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 在当前目录。

使用镜像

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

结束

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

参考

回到页面顶部