几个docker下nginx配置文件的管理
最近一直在研究阿里云的docker,主要是用来做nginx+fpm服务,踩了不少坑,记录下来,以作纪念.
我现在使用的nginx的配置文件的加载方式,一般有以下三种:
- 容器中的配置文件目录,加载母鸡的某目录,母鸡的目录中,存放配置文件. 配置更新重启文件即可
- 直接在dockerfile的同目录中存放配置文件,每次配置更新,重新build镜像,发布更新即可
- 容器只挂载一个母鸡的目录,比如"/www:/www",配置文件存放在此目录,在服务启动的时候调用shell脚本,复制到配置文件目录
我自己的blog使用的第三种方式,公司的服务器采用的第二种方式
第一种方式
我最早采用的这种方式.但是在实际使用中有比较麻烦的问题,就在于,如果我有多个不同目录的配置文件需要挂载,比如我现在需要挂nginx和phpfpm的日志,那么,我就需要外挂两个目录.但是在实际的操作中有比较麻烦的问题
缺点 阿里云的docker的volumes的挂载,存在阿里云控制台和实际docker inspect出来的结果不一致的情况,且容器的挂载修改需要删除重建(我发现是如此,可能有别的办法).我经常出现,挂载修改了,但是实际没有变化的情况.还有就是如果我有多台的话,需要每一台都去发布配置文件
优点 修改简单
第二种方式
我自己的实现方式大抵如此
在dockerfile中如下实现
RUN rm -rf /etc/nginx/* && \
rm -rf /usr/local/etc/*
COPY web_config/php/ /usr/local/etc/
COPY web_config/nginx/ /etc/nginx/
缺点 每次更新配置文件都需要去冲洗build镜像,如果dockerfile中执行了较多的业务的话,可能笑了不干保证
优点 不需要单独部署配置文件的发布,镜像更新即发布.不需要额外挂载文件夹,避免了奇奇怪怪的错误(诚然,八成由于我自己对volumes的理解不精).
第三种方式
其实和第一种区别不大,唯一的区别就是,避免了过多的加载外部目录,一个即可.也是需要单独去发布配置文件的
其实第一种和第三种还有一个办法,不需要额外的单独发布配置文件,就是使用公共网络盘实现,比如阿里云推荐的oss和nas,但是这样挂载的时候在配置挂载和加载顺序的时候有一点小小的技巧,我不需要把简单的问题复杂化,so,放弃.具体可以自己参考阿里云容器文档