zoukankan      html  css  js  c++  java
  • 在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进入容器查看验证

  • 相关阅读:
    nginx 负载均衡配置
    nginx 配置优化详解
    duilib -- Label控件的bug(转载)
    Duilib实现GroupBox控件
    Duilib动画按钮实现(转载)
    Duilib中Webbrowser事件完善使其支持判断页面加载完毕
    Duilib实现圆形头像控件
    duilibutilsutils.h(251) : error C2504: “VARIANT”: 未定义基类
    软件项目版本号的命名规则及格式
    c++中char*wchar_t*stringwstring之间的相互转换
  • 原文地址:https://www.cnblogs.com/zhangzhide/p/13998019.html
Copyright © 2011-2022 走看看