Dockerfiles ENV和ARG的应用

停止编写 Dockerfiles 并使用 docker init docker init 是一个命令行应用程序,可帮助初始化项目中的 Docker 资源。它根据项目的要求创建 Dockerfiles、docker-compose 文件和 .dockerignore 文件。这简化了为项目配置 Docker 的过程,节省时间并降低复杂性。最新版本的 docker init 支持 Go、Python、Node.js、Rust、ASP.NET、PHP 和 Java。 阅读详情

https://vsupalov.com/docker-arg-env-variable-guide/#arg-and-env-availability

在写Dockerfile时, ENV和ARG,包括.env都是很容易弄混的概念。让我们对其进行区分。

.env文件

和docker-compose.yml配合使用。并不和Dockerfile一起使用

env_file

在Dockerfile中使用,当环境变量很多,可食用该参数,指定对应的变量文件。

ARG

在Dockerfile中使用,仅仅在build docker image的过程中(包括CMD和ENTRYPOINT)有效,在image被创建和container启动之后,无效。

 如果你在Dockerfile中使用了ARG但并未给定初始值,则在运行docker build的时候未指定该ARG变量,则会失败。

虽然其在container启动后不再生效,但是使用‘docker history’可以查看到。所以,敏感数据不建议使用ARG.

设置ARG和使用ARG编译image, 实例如下:

# In the Dockerfile
ARG some_variable_name
# or with a hard-coded default:
#ARG some_variable_name=default_value

RUN echo "Oh dang look at that $some_variable_name"

# In the shell command
docker build --build-arg some_variable_name=a_value

# Then you will get
Oh dang look at that a_value

ENV

在Dockerfile中使用,在build docker imag的过程中有效,在image被创建和container启动后作为环境变量依旧也有效,并且可以重写覆盖。printenv可查看其值。

设置ENV和使用env,实例如下

# no default value
ENV hey
# a default value
ENV foo /bar
# or ENV foo=/bar

# ENV values can be used during the build
ADD . $foo
# or ADD . ${foo}
# translates to: ADD . /bar

# Use the following docker commands to set env

docker run -e "env_var_name=another_value" alpine env
docker run -e env_var_name alpine env
docker run --env-file=env_file_name alpine env

有时候,ARG和ENV一起使用,实例如下图:

# expect a build-time variable
ARG A_VARIABLE
# use the value to set the ENV var default
ENV an_env_var=$A_VARIABLE
# if not overridden, that value of an_env_var will be available to your containers!

 

 

docker init:自动化生成Dockerfile与compose.yaml的工程实践指南 Docker容器化是现代应用交付的基础能力,其核心在于Dockerfile构建规范与docker-compose编排逻辑。理解镜像分层、多阶段构建、非root用户安全模型及.dockerignore机制,是保障应用可重现、可移植、可运维的技术前提。docker init作为Docker CLI官方内置工具,通过项目语义分析(如requirements.txt/ package.json识别)、交互式风险前置审查(端口校验、启动命令推荐)和最佳实践注入(缓存挂载、环境变量设置),将重复性配置工作标准化。它不替 阅读详情

相关推荐

45-Dockerfile-ARG/ENV指令

Dockerfile-ARG/ENV指令

小白的博客 2997

Dockerfile中ARG和ENV指令详解

Dockerfile中ARG和ENV指令详解

Leon_Jinhai_Sun的博客 1416

简述Docker中arg和env的区别是什么?

Docker中ARG和ENV的区别: 📌 作用阶段: ARG仅用于构建阶段(docker build) ENV同时作用于构建和运行时 📌 作用域: ARG局部有效,跨阶段需重新声明 ENV全局有效,可被容器进程继承 📌 典型用途: ARG控制构建行为(如下载指定版本) ENV配置运行时环境(如数据库地址) 🔧 注意: 两者都不适合存储敏感信息 可通过ARG向ENV传值实现灵活配置 合理选用可提升镜像灵活性与安全性。

weixin_39291964的博客 278

Docker的ARG、ENV和.env配置完整指南

本文将帮助您自信地使用 Docker ARG、ENV、env_file 和 .env 文件。您将了解如何使用 Docker 构建时变量、环境变量和 docker-compose 模板轻松配置 Docker 映像和 dockerized 应用程序。常见的误解 .env 文件仅在使用docker-compose.yml 文件时的预处理步骤中使用。美元符号变量(如 $HI)被替换为同一目录中名为“.env”的文件中包含的值。 ARG仅在构建 Docker 映像(RUN ...

极道Jdon的技术博客 1万+

请立刻停止编写 Dockerfiles 并使用 docker init

如果您想在 Flask 应用程序中使用数据库,请从 docker-compose 文件中取消注释 db 服务配置,创建一个包含机密的本地文件,然后运行该应用程序。选择模板后,docker init 会要求您提供一些特定于项目的信息,自动为您的项目生成必要的 Docker 资源。接下来要做的就是选择应用程序平台,在我们的示例中,我们使用 python。

wjianwei666的专栏 498

从配置文件加载顺序揭秘:为什么你的logback.xml读不到application.yml?

本文深入解析了Spring Boot中logback.xml无法读取application.yml配置的原因,揭示了Spring Boot配置加载机制与日志系统初始化的时序问题。通过对比logback.xml与logback-spring.xml的差异,提供了使用springProperty标签和系统属性传递等解决方案,帮助开发者有效解决日志配置问题。

weixin_29214335的博客 363

Docker的env、env-file及模拟k8s的configmap

一.env、env-file cat > /tmp/envfile.txt <<EOF content='Hello,this is chinoukin 's evnfile' EOF docker run -i --rm \ -e superman=chinoukin --env cn=china \ --env-file /tmp/envfile.txt \ -v /...

chinoukin的博客 1万+

车窗标定工作流程

标定简单来说就是修改防夹参数来适配对应的车型,所有的防夹的参数在vers_userdef.h文件中定义。#标定内容。

qq_21274991的博客 4269

Dockerfiles 的 Top 10 常见 DevOps/SRE 面试问题及答案

概述了针对 DevOps/SRE 角色的 Dockerfile 面试问题和答案,涵盖从基本命令到优化 Docker 镜像的最佳实践等主题。

鸵鸟爸爸的博客 1168

从零开始:PLUMED与GROMACS整合安装全攻略

本文详细介绍了如何从零开始整合安装PLUMED与GROMACS,包括系统环境检查、MPI配置、PLUMED编译安装、GROMACS补丁应用及常见问题解决方案。通过本教程,研究人员可以快速完成分子动力学模拟工具的整合安装,实现增强采样和自由能计算功能。

weixin_42520796的博客 292

告别Nginx原始日志!VictoriaLogs+Grafana构建企业级应用日志分析平台实战

描述:做为一个合格的运维工程师,在面对企业安全运维管理中,日志审计是一项非常重要的工作。授人以鱼不如授人以渔,各位运友们可参照作者的方案设计,在自己的项目中根据实际情况调整落地,例如,不在仅仅采集 NGINX 应用日志,而是采集 Apache、Tomcat、SpringBoot 等多种应用服务器的日志,又如,不再仅仅采集网络设备、安全审计审计日志,而是 Windows、Linux 等多种操作系统的审计日志等,大家可充分发挥想象、实践能力,也欢迎大家在知识星球中分享自己的方案设计,一起交流学习。

全栈工程师修炼指南-IT知识分享 2475

DockerFiles命令及Demo例子附代码

❖CMD(cmd)设置容器创建是执行的默认命令。❖ENV(env)指定容器启动时的环境变量(注意,只有在容器启动时,启动脚本能读取到,如果希望其他用户登录到容器也生效的话,需要写入.bashrc)。Dockerfile是由⼀系列指令和参数构成的脚本,⼀个Dockerfile⾥⾯包含了构建整个镜像的完整命令。❖FROM(from)基础镜像,FROM命令必须是Dockerfile的⾸个命令。❖USER(user)指定运⾏容器时的⽤户名或UID,后续RUN也会使⽤指定⽤户。......

weixin_43217531的博客 470

氮化镓GaN电机驱动实战:从器件原理到EPC驱动中心

电机驱动是工业自动化和电动交通的核心,功率器件的选择直接决定系统效率与可靠性。传统硅基IGBT和MOSFET在开关速度、损耗方面存在瓶颈,而氮化镓(GaN)作为宽禁带半导体,凭借高电子迁移率、低栅极电荷和近乎为零的反向恢复电荷,正成为电机驱动领域的热门选择。EPC建立电机驱动中心,提供完整的评估平台,覆盖从低压家电到中压伺服的应用场景。文章从GaN器件原理出发,对比传统硅器件,详解三相BLDC/PMSM驱动系统的搭建、栅极驱动与Layout设计、死区时间设置及参数计算实例,并分享测试中遇到的振铃、EMI等高

weixin_29168675的博客 321

放弃使用Dockerfiles 平替 docker init

几天前,Docker 推出了 docker init 的通用版本。我已经尝试过,发现它非常有用,迫不及待地想在日常生活中使用它。docker init 是一个命令行应用程序,可帮助初始化项目中的 Docker 资源。它根据项目的要求创建 Dockerfiles、docker-compose 文件和 .dockerignore 文件。这简化了为项目配置 Docker 的过程,节省时间并降低复杂性。

朱雀随云记的博客 1095

从NASA官网到分析图:MOD09A1地表反射率数据的完整处理流程(含QC筛选)

本文详细介绍了MOD09A1地表反射率数据的完整处理流程,从NASA官网数据下载到QC筛选,再到NDVI图生成。特别强调了质量控制(QC)信息在筛选可靠像元中的关键作用,帮助研究人员获取高质量遥感数据。

weixin_42542669的博客 109

RK3588开发笔记-MIPI-CSI接口视频解码芯片XS9922B调试

Rockchip RK3588 是一款高性能的处理器,支持多种摄像头接口,包括 MIPI(Mobile Industry Processor Interface)接口。MIPI是一种用于移动设备和嵌入式系统中的摄像头、显示器和其他传感器设备的串行接口标准。MIPI是MIPI联盟发起的为移动应用处理器制定的开放标准。CSI-2(Camera Serial Interface 2)是MIPI 联盟定义的另一种高速接口,主要用于摄像模组和处理器之间的连接。

flypig has a dream! 6860

编写Dockerfiles

指令 docker build通过Dockerfile制作镜像 docker build [PATH] [-f Dockerfile] 其中PATH不写,默认执行指令的当前目录,不要用 /,这样将导致整个操作系统复制到镜像中 ENV 定义环境变量 ENV abc=hello ENV abc=bye def=$abc ENV ghi=$ab 使用环境变量 WORKDIR ${foo} # W...

weixin_30547797的博客 113

Camera HAL Camx — DRQ总结

Camera HAL — DRQ(延迟请求队列)总结 DRQ是CAMX核心层的依赖驱动延迟执行调度器,解决Node处理请求时依赖未就绪的问题。其主要特点包括: 核心功能:当Node处理请求时缺少必要输入(property/metadata/fence),DRQ将其挂起并在依赖满足后重新调度,避免阻塞流水线或丢帧。 系统架构:Session持有主DRQ实例,管理该Session下所有Pipeline Node的依赖;CHI context另有独立DRQ实例专门处理Chi fence同步。 关键数据结构: De

DU_YULIN的博客 74

Dockerfiles介绍与编写实例

基础镜像可以用于创建Docker容器。镜像可以非常基础,仅仅包含操作系统;也可以非常丰富,包含灵巧的应用栈,随时可以发 布。当你在使用Docker构建镜像的时候,每一个命令都会在前一个命令的基础上形成一个新层。这些基础镜像可以用于创建新的容器。本篇文章将手把手教您 如何从基础镜像,一步一步,一...

chupeian4569的博客 186

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Sunshine 游戏串流实战:3 个阶段、零订阅费,把书房 PC 的游戏搬上客厅电视

游戏跑在书房的 PC 上,画面却出现在客厅电视里。Sunshine 就是干这个的:一台自托管游戏串流主机,画面经本地显卡硬件压缩后推给 Moonlight 客户端。读完全文,你能独立完成安装、建号、配对,并让电视亮出主机桌面。 ## 上手前自问 3 个问题:Sunshine 游戏串流值不值得装 **问:要按月付钱吗?** 不用。Sunshine 开源免费,客户端 Moonlight 也免费。压

gitblog_00070的博客 475

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

dockerfile创建docker镜像

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34323858的博客 123

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

10个终极Dockerfile编写技巧:从GitHub加速计划项目学习专业实践

Dockerfile是容器化应用的基石,掌握其编写技巧能显著提升镜像质量与构建效率。本文将从GitHub加速计划(gh_mirrors/do/dockerfiles)项目中提炼10个实用技巧,帮助你编写出更高效、更安全的Dockerfile。这些技巧源自数百个真实Dockerfile的最佳实践,涵盖基础优化到高级构建策略。 ## 选择合适的基础镜像:精简与功能的平衡 基础镜像是Dockerfi

gitblog_00047的博客 631

了解下Dockerfile保留字指令

FROM 基础镜像,有点想java里的继承,表示当前的新镜像是基于哪个镜像的 MAINTAINER 镜像维护者的姓名和邮箱地址 RUN 容器构建时需要额外执行的命令,比如用命令安装yum EXPOSE 指定当前容器对外暴露的端口 WORKDIR 指定工作目录,可以理解成容器生成后默认会在哪个文件路径下做操作 ENV 设置环境变量,定义了环境变量,在后续的指令中,就可以使用这...

硅脂味咖啡的博客 371

Docker多环境配置终极指南:实现开发、测试与生产环境的完美隔离 [特殊字符]

在当今的软件开发实践中,Docker多环境配置已成为提升开发效率、确保应用一致性的关键技术。本文将为您揭示如何利用Docker实现开发、测试与生产环境的完美隔离,让您的应用部署更加安全可靠。 ## 📦 为什么需要Docker多环境配置? Docker容器化技术通过标准化应用运行环境,解决了"在我机器上能运行"的经典问题。多环境配置的核心优势在于: - **环境一致性**:确保代码在开发、测

gitblog_01014的博客 905

Docker+Dockerfile

网络选图 FROM 指定基础镜像 RUN 执行命令 格式01:RUN <命令> 格式02:RUN ["可执行文件", "参数1", "参数2"] COPY 复制文件 格式01:COPY <源路径>... <目标路径> 格式02:COPY ["<源路径1>",... "<目标路径>"] ADD 更高...

gddd123456的博客 192

gz-sim 网格变形教程:使用 Blender Python 脚本程序化扭曲 3D 模型

本教程介绍如何利用 Blender 的 Python API 对 3D 模型进行程序化(programmatic)网格变形,批量生成外形相近但存在可控差异的物体。该技术在 gz-sim 生态中常用于:生成一组相似物体以测试感知算法的泛化能力、模拟水下操纵场景中自然生物污损(biofouling)或变形的物体,以及其他需要数值可控变形的应用场景。阅读本文后,你将掌握 `distort_mesh.py

gitblog_00377的博客 147
上一篇: openshift template介绍
下一篇: 在Makefile中写shell脚本
solinger
博客等级 码龄16年 125粉丝 99原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值