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

2024-06-17 10:20

本文主要是介绍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中定义的内容!

这篇关于Dockerfile小技巧(通过变量指定程序配置文件内容)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1069174

相关文章

如何解决Pycharm编辑内容时有光标的问题

《如何解决Pycharm编辑内容时有光标的问题》文章介绍了如何在PyCharm中配置VimEmulator插件,包括检查插件是否已安装、下载插件以及安装IdeaVim插件的步骤... 目录Pycharm编辑内容时有光标1.如果Vim Emulator前面有对勾2.www.chinasem.cn如果tools工

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.

Pandas中多重索引技巧的实现

《Pandas中多重索引技巧的实现》Pandas中的多重索引功能强大,适用于处理多维数据,本文就来介绍一下多重索引技巧,具有一定的参考价值,感兴趣的可以了解一下... 目录1.多重索引概述2.多重索引的基本操作2.1 选择和切片多重索引2.2 交换层级与重设索引3.多重索引的高级操作3.1 多重索引的分组聚

使用Python合并 Excel单元格指定行列或单元格范围

《使用Python合并Excel单元格指定行列或单元格范围》合并Excel单元格是Excel数据处理和表格设计中的一项常用操作,本文将介绍如何通过Python合并Excel中的指定行列或单... 目录python Excel库安装Python合并Excel 中的指定行Python合并Excel 中的指定列P

浅析Rust多线程中如何安全的使用变量

《浅析Rust多线程中如何安全的使用变量》这篇文章主要为大家详细介绍了Rust如何在线程的闭包中安全的使用变量,包括共享变量和修改变量,文中的示例代码讲解详细,有需要的小伙伴可以参考下... 目录1. 向线程传递变量2. 多线程共享变量引用3. 多线程中修改变量4. 总结在Rust语言中,一个既引人入胜又可

Redis多种内存淘汰策略及配置技巧分享

《Redis多种内存淘汰策略及配置技巧分享》本文介绍了Redis内存满时的淘汰机制,包括内存淘汰机制的概念,Redis提供的8种淘汰策略(如noeviction、volatile-lru等)及其适用场... 目录前言一、什么是 Redis 的内存淘汰机制?二、Redis 内存淘汰策略1. pythonnoe

Python将大量遥感数据的值缩放指定倍数的方法(推荐)

《Python将大量遥感数据的值缩放指定倍数的方法(推荐)》本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像... 本文介绍基于python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

怎么关闭Ubuntu无人值守升级? Ubuntu禁止自动更新的技巧

《怎么关闭Ubuntu无人值守升级?Ubuntu禁止自动更新的技巧》UbuntuLinux系统禁止自动更新的时候,提示“无人值守升级在关机期间,请不要关闭计算机进程”,该怎么解决这个问题?详细请看... 本教程教你如何处理无人值守的升级,即 Ubuntu linux 的自动系统更新。来源:https://