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