在docker容器中如何自動生成配置文件(以nginx配置為例)


  應用場景類似於多個域名要起多個容器,有些參數有些域名需要,有些域名不需要,或者參數的值不太一樣,需要去對應的配置文件修改,不太靈活,如果通過變量的方式直接定義在Dockerfile文件中,需要哪些參數,不需要哪些參數,哪些參數需要修改對應的值,直接在Dockerfile中修改豈不美哉?下面的方法僅僅起到拋磚引玉的作用,具體業務還需要寫對應的腳本和Dockerfile;

方法一
1、通過shell腳本的方式,生成所需的配置文件;
vim nginx-web.sh
#!/bin/bash
PORT=$1
SERVER_NAME=$2
echo "server {
  listen ${PORT};
  server_name ${SERVER_NAME};
  root /data/yum;
  charset UTF-8;
  autoindex on;
  autoindex_exact_size off;
  autoindex_localtime on;

  location / {
    if (\$request_filename ~* ^.*?\.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx)$){
      return 200;
    }
  }
}" > /etc/nginx/conf.d/web.conf
/usr/sbin/nginx -g "daemon off;"
2、編輯dockerfile文件
  FROM centos:7
  MAINTAINER "1072051214@qq.com"
  COPY CentOS-Base.repo epel.repo /etc/yum.repos.d/
  RUN yum install nginx -y && \
    yum clean all
  COPY ["nginx.conf","/etc/nginx/"]
  COPY ["nginx-web.sh","/tmp"]
  RUN chmod +x /tmp/nginx-web.sh
  EXPOSE 80/tcp
3、構建鏡像
  docker build -t zhang/nginx:v0.9 ./
4、運行鏡像測試
  docker run --rm zhang/nginx:v0.9 /tmp/nginx-web.sh 80 www.123.com
  通過docker exec -it ID /bin/bash進入容器查看驗證
方法二
通過envsubst命令來實現
1、編輯模版文件nginx-web.tpl
server {
  listen ${PORT};
  server_name ${DOMAIN};
  root /data/yum;
  charset UTF-8;
  autoindex on;
  autoindex_exact_size off;
  autoindex_localtime on;

  location / {
    if ($request_filename ~* ^.*?\.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx)$){
      return 200;
    }
  }
}
2、編輯Dockerfile文件
  FROM centos:7
  MAINTAINER "1072051214@qq.com"
  COPY CentOS-Base.repo epel.repo /etc/yum.repos.d/
  RUN yum install nginx gettext -y && \      #envsubst命令在容器中默認沒有,需要安裝gettext包;
    yum clean all

  ENV PORT="80"
  ENV DOMAIN="www.123.com"

  COPY ["nginx-web.tpl","/etc/nginx/conf.d/nginx-web.tpl"]
  CMD envsubst '$PORT $DOMAIN' </etc/nginx/conf.d/nginx-web.tpl> /etc/nginx/conf.d/web.conf && nginx -g "daemon off;"
  EXPOSE 80/tcp
3、構建鏡像
  docker build -t zhang/nginx:v1.2 ./
4、運行鏡像測試
  docker run --rm zhang/nginx:v1.2
  通過docker exec -it ID /bin/bash進入容器查看驗證


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM