在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进入容器查看验证
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南