Dockerfile小技巧(通过变量指定程序配置文件内容)

思路:Dockerfile中定义变量,程序配置文件中使用占位符暂时代替变量内容,最后使用变量值替换占位符实现,这样就可以实现通过定义变量来定义程序启动时的一些参数了。

1、我以构建Nginx镜像为例,作为演示,Dockerfile文件如下:

FROM centos:7# 定义默认变量
ENV NGINX_CONTEXT=/logs \NGINX_POR=4090 \USER=hyadmin \PASSWD=1qaz!QAZ. COPY . /usr/local/
RUN ln /usr/local/nginx/sbin/nginx /bin/nginx \&& yum install -y httpd-tools \&& rm -rf /var/cache/yum# 健康检查
HEALTHCHECK --interval=10s --timeout=3s --start-period=10s \CMD curl -s -o /dev/null -w "%{http_code}" http://localhost:${NGINX_PORT}/docker || exit 1CMD ["/bin/sh", "/usr/local/env"]

2、上面CMD指定了env脚本,在启动容器时执行env脚本,来替换占位符,内容如下:

#!/bin/sh
# 替换占位符内容
sed -i 's/<%= NGINX_PORT %>/'"$NGINX_PORT"'/g' /usr/local/nginx/conf/nginx.conf
sed -i 's#<%= NGINX_CONTEXT %>#'"$NGINX_CONTEXT"'#g' /usr/local/nginx/conf/nginx.conf# 判断是否第一次启动
if ! [[ -x /usr/local/nginx/conf/htpasswd ]];thenhtpasswd  -b /usr/local/nginx/conf/htpasswd $USER $PASSWDchmod -x /usr/local/nginx/conf/htpasswd
fi
if ! [[ -d /usr/local/nginx/html/$NGINX_CONTEXT ]];thenmkdir -p /usr/local/nginx/html/$NGINX_CONTEXT
finginx -g 'daemon off;'

3、nginx配置文件内容如下:

events {worker_connections  10240;
}http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;server {#  <%= NGINX_PORT %> 是 NGINX_PORT变量的占位符listen       <%= NGINX_PORT %>;server_name  localhost;charset utf-8;#  <%= NGINX_CONTEXT %> 是 NGINX_CONTEXT 变量的占位符location <%= NGINX_CONTEXT %> {root   /usr/local/nginx/html/;fancyindex on;fancyindex_localtime on;fancyindex_exact_size off;fancyindex_header "/Nginx-Fancyindex-Theme-light/header.html";fancyindex_footer "/Nginx-Fancyindex-Theme-light/footer.html";fancyindex_ignore "examplefile.html";fancyindex_ignore "Nginx-Fancyindex-Theme-light";fancyindex_ignore "Nginx-Fancyindex-Theme-dark";autoindex on;autoindex_localtime on;autoindex_exact_size on;autoindex_format html;auth_basic 'please input your auth';auth_basic_user_file htpasswd;}# docker探测使用location /docker {return 200;}}
}

4、运行容器

docker run -itd \--name file-nginx \--restart always \--net host \-e USER=hyadmin \-e PASSWD='1qaz!QAZ.' \-e NGINX_PORT=9096 \-e NGINX_CONTEST=/logs \-v /usr/local/package:/usr/local/nginx/html/logs \  # 最后位置和NGINX_CONTEST变量对应上file-nginx:1.18.0

PS: -e 可以覆盖变量值,如果不覆盖默认变量则是Dockerfile中定义的内容!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/28063.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TCP及UDP协议

tcp是点到点的&#xff0c;只有一条路径&#xff0c;到达顺序和发送顺序是相同的 回复的确认号是序发送端的序列号加上data的长度 1910 发送端的序列号也是那么算的 ack和下一个seq一样 那就没问题 三次握手四次挥手&#xff1a; 为啥是三次呢&#xff1f; 假如一次&#xf…

关于Linux ping 不通外网

网关为第三段为137那么子网ip第三段必须为137且IPaddr必须为137 将主机虚拟适配器连接到此网络必须勾上&#xff0c;不然vmnet适配器在windows将找不到 ping www.baidu.com不行的话试着勾上桥接模式应该是不行在勾上取消勾上桥接模式最后勾上nat模式

Spring框架的原理及应用详解(四)

本系列文章简介&#xff1a; 在当今的软件开发世界中&#xff0c;随着应用复杂性的不断增加和技术的快速发展&#xff0c;传统的编程方式已经难以满足快速迭代、高可扩展性和易于维护的需求。为此&#xff0c;开发者们一直在寻求更加高效、灵活且易于管理的开发框架&#xff0c…

【2024亲测无坑】在Centos.7虚拟机上安装Oracle 19C

目录 一、安装环境准备 1、linux虚拟机安装 2、虚拟机快照 3、空间检查&软件上传 二、Oracle软件安装 1.preinstall安装及其他配置准备 2.oracle安装 三、数据库实例的安装 1.netca——网络配置助手 2.dbca——数据库配置助手 四、ORACLE 19C 在linux centos 7上…

Linux rm命令由于要删的文件太多报-bash: /usr/bin/rm:参数列表过长,无法删除的解决办法

银河麒麟系统&#xff0c;在使用rm命令删除文件时报了如下错误&#xff0c;删不掉&#xff1a; 查了一下&#xff0c;原因就是要删除的文件太多了&#xff0c;例如我当前要删的文件共有这么多&#xff1a; 查到了解决办法&#xff0c;记录在此。需要使用xargs命令来解决参数列表…

Vue3 和 Vue2 对比分析及示例代码解析(初级)

Vue3 和 Vue2 的主要区别在于 Vue3 引入了 Composition API&#xff0c;这是一种新的组织和复用代码的方式。而 Vue2 主要依赖于 Options API。 先来看一个 Vue2 的示例&#xff1a; // Vue 2 export default {data() {return {count: 0}},methods: {increment() {this.count…

誉天教育近期开班计划(6月15日更新)

云计算HCIP 周末班 2024/6/15 田老师 售前IP-L3 周末班 2024/6/15 陈老师 RHCA442 晚班 2024/6/17邹老师 数通HCIE 晚班 2024/6/24阮老师 云计算HCIE直通车晚班 2024/6/25 曾老师 售前IT-L3 周末班 2024/6/29 伍老师 数通HCIP 晚班 2024/7/1杨老师 存储直通车 晚班 2024/7/1 高…

C# OpenCvSharp 逻辑运算-bitwise_and、bitwise_or、bitwise_not、bitwise_xor

bitwise_and 函数 🤝 作用或原理: 将两幅图像进行与运算,通过逻辑与运算可以单独提取图像中的某些感兴趣区域。如果有掩码参数,则只计算掩码覆盖的图像区域。 示例: 在实际应用中,可以用 bitwise_and 来提取图像中的某些部分。例如,我们可以从图像中提取出一个特定的颜…

【NoSQL数据库】Redis Cluster集群(含redis集群扩容脚本)

Redis Cluster集群 Redis ClusterRedis 分布式扩展之 Redis Cluster 方案功能数据如何进行存储 redis 集群架构集群伸缩向集群中添加一个新的master节点&#xff0c;并向其中存储 num10 .脚本对redis集群扩容缩容&#xff0c;脚本参数为redis集群&#xff0c;固定从6001移动200…

了解统计学中不同类型的分布

目录 一、说明 二、均匀分布&#xff1a; 三、机器学习和数据科学中的均匀分布示例&#xff1a; 3.1 对数正态分布&#xff1a; 3.2 机器学习和数据科学中的对数正态分布示例&#xff1a; 四、 帕累托分布 4.1 什么是幂律&#xff1f; 4.2 机器学习和数据科学中的帕累托分布示例…

如何清除anaconda3缓存?

如果长期使用anaconda不清理缓存&#xff0c;会导致anaconda占用磁盘空间越来越多&#xff0c;甚至系统磁盘撑爆。 清除包缓存&#xff1a; 打开 Anaconda Prompt 或者命令行窗口。运行以下命令清除包缓存&#xff1a;conda clean --all这会清除所有的包缓存&#xff0c;释放磁…

docker下载ridis

1、执行 docker pull redis:4.0.1 命令&#xff0c;下载 redis 镜像 &#xff08;需确保装有并启动bocker&#xff09; 通过docker启动redis 分配端口和端口映射 密码等 rootiZf8z985hmyc9bkejcfmqrZ:~# docker run --rm -d --name redis6379 -p 6379:6379 redis:4.0.1 --req…

网站开发常规安全规范(持续更新)

针对网站开发中常见的安全问题&#xff0c;整理一些常见开发规范。&#xff08;持续更新&#xff09; &#xff11;&#xff09; SQL注入 必须使用占位符生成所有SQL语句。 通过串联构建SQL语句时&#xff0c;请使用数据库引擎提供的特殊API来执行转义&#xff0c;并正确地组…

1.个人博客系统项目

一、项目介绍 个人博客系统 相关技术&#xff1a; SpringBootSpringMvcMybatisMysqlRedis项目简介&#xff1a;本项目为一个功能完善的个人博客系统&#xff0c;支持文章的编辑、修改、删除和发布&#xff0c;以及作者个人信息的展示等功能。项目描述&#xff1a; 采用前后端…

利用钉钉机器人和PHP开发一款免费的网站可用性检测工具,单节点版

前言 手里有几套系统正在运维&#xff0c;需要保障正常运行&#xff0c;所以可用性检测就必不可少啦&#xff0c; 以前本来是用的阿里官方的云监控&#xff0c;但现在价格感觉太贵了&#xff0c;不划算 那就自己手搓一个简易版的监控吧。 成品效果展示 代码展示 <?php …

微信小程序毕业设计-实验室管理系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

centos环境上:k8s 简单安装教程

本次演示安装3节点k8s环境&#xff0c;无需多言&#xff0c;直接上操作步骤&#xff1a; 1、环境准备 k8s部署前&#xff0c;首先需要准备好环境&#xff0c;除了1.4 步骤&#xff0c;其他步骤在所有&#xff08;3个&#xff09;节点上都要执行&#xff1a; 1.1 关闭防火墙 s…

【工具】新手如何正确使用Pycharm?

1. 什么是JetBrains Toolbox JetBrains Toolbox是一个管理工具&#xff0c;用于安装、更新和管理JetBrains开发工具的所有版本。它可以简化多个IDE的管理&#xff0c;并确保你总是使用最新版本的软件。 2. 安装JetBrains Toolbox 步骤1&#xff1a;下载Toolbox 访问JetBrai…

非关系型数据库NoSQL数据层解决方案 之 redis springboot整合与读写操作 2024详解以及window版redis5.0.14下载百度网盘

redis下载安装以及基本使用 下载地址 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;0410 一个名对应一个数值 内存级 在内存里进行操作 准备启动 我们现在就有一个redis客户端的服务器了 我们再启动一个cmd 操作redis数据库 redis里面的基本数据类型有五种 …

PythonSQL应用随笔4——PySpark创建SQL临时表

零、前言 Python中直接跑SQL&#xff0c;可以很好的解决数据导过来导过去的问题&#xff0c;本文方法主要针对大运算量时&#xff0c;如何更好地让Python和SQL打好配合。 工具&#xff1a;Zeppelin 语法&#xff1a;PySpark&#xff08;Apache Spark的Python API&#xff09;…