Docker中ARG与ENV用法对比(90%开发者都混淆的细节)

第一章:Docker中ARG与ENV的核心概念解析

在Docker镜像构建过程中,`ARG` 和 `ENV` 是两个关键的指令,用于管理构建时和运行时的环境变量。尽管它们都涉及变量定义,但作用阶段和使用场景有本质区别。

ARG 指令详解

`ARG` 用于在镜像构建阶段定义可传递的参数,这些参数仅在 `docker build` 过程中有效。通过 `--build-arg` 可以传入具体值,若未指定则使用默认值。
# Dockerfile 示例
ARG VERSION=1.0
RUN echo "Building version: $VERSION"
构建命令:
docker build --build-arg VERSION=2.0 -t myapp .
上述代码中,`VERSION` 在构建时被赋值为 `2.0`,若不传参则默认为 `1.0`。

ENV 指令详解

`ENV` 用于设置容器运行时的环境变量,这些变量会持久存在于镜像中,并可在容器启动后被应用程序读取。
# Dockerfile 示例
ENV NODE_ENV=production \
    PORT=3000
CMD ["node", "app.js"]
该配置确保应用在容器运行时始终处于生产环境,并监听 3000 端口。

ARG 与 ENV 的协作方式

常通过 `ARG` 接收外部输入,再将其赋值给 `ENV`,实现灵活且持久的配置管理。
ARG DB_HOST=localhost
ARG DB_PORT=5432
ENV DATABASE_URL=postgresql://$DB_HOST:$DB_PORT/mydb
这种模式既保留了构建灵活性,又确保运行环境能正确读取配置。
特性ARGENV
作用阶段构建时运行时
是否持久化否是
能否被覆盖可通过 --build-arg 覆盖可通过 docker run -e 覆盖

第二章:ARG指令的深度解析与应用实践

2.1 ARG的基本语法与作用域机制

ARG 是 Dockerfile 中用于定义构建参数的关键字,允许在镜像构建阶段传入外部值。其基本语法为 `
ARG <name>[=<default value>]
`,其中默认值可选。
作用域控制
ARG 参数的作用域从其定义处开始,至当前构建阶段结束。多阶段构建中,每个阶段需独立声明所需参数:
ARG VERSION=latest
FROM nginx:$VERSION
ARG VERSION  # 重新声明以在当前阶段使用
RUN echo "Building version $VERSION"
上述代码中,首行 ARG 在全局定义 VERSION;进入 FROM 后需再次声明 ARG 才能访问该变量。
  • ARG 仅在构建时有效,运行容器中不可见
  • 可通过 --build-arg 传递实际值覆盖默认值
  • 敏感信息应避免明文传递,建议结合 --secret 使用

2.2 构建时参数传递:从命令行到Dockerfile

在 Docker 镜像构建过程中,构建时参数传递是一项关键能力,允许动态定制镜像行为。通过 ARG 指令,可在 Dockerfile 中定义可变参数。
定义构建参数
ARG BUILD_ENV=production
ARG APP_PORT=8080

ENV NODE_ENV=$BUILD_ENV \
    PORT=$APP_PORT
上述代码在构建阶段声明了环境类型和应用端口,默认值分别为 production 和 8080。这些值可在构建时被覆盖。
命令行动态传参
使用 --build-arg 覆盖默认值:
docker build --build-arg BUILD_ENV=development --build-arg APP_PORT=3000 -t myapp:latest .
该命令将开发环境配置注入构建流程,实现环境差异化构建。
参数验证与默认值
  • ARG 支持默认值,提升灵活性
  • 未指定且无默认值的参数将为空
  • 只能在构建阶段使用,不可在运行时访问

2.3 ARG默认值设置及其覆盖优先级分析

在Docker构建过程中,ARG指令用于定义可传递的构建参数,默认值可在Dockerfile中预设。其语法如下:
ARG BUILD_ENV=production
ARG VERSION=1.0.0
上述代码定义了两个带有默认值的构建参数:BUILD_ENV默认为production,VERSION默认为1.0.0。这些值在未显式传参时生效。
覆盖优先级规则
构建参数的取值遵循明确的优先级顺序:
  • 命令行通过--build-arg KEY=VALUE传入的值优先级最高
  • 其次为构建时环境变量(若未在命令行指定)
  • 最后才使用Dockerfile中ARG定义的默认值
例如执行docker build --build-arg BUILD_ENV=staging .时,即便Dockerfile中设定了默认值,仍以staging为准。
来源优先级
命令行 --build-arg高
Dockerfile 中 ARG 默认值低

2.4 多阶段构建中ARG的继承与隔离特性

在Docker多阶段构建中,ARG指令用于定义构建时变量,其作用范围遵循特定的继承与隔离规则。每个构建阶段仅能访问在其之前或当前阶段定义的ARG,跨阶段不会自动传递。
ARG的作用域边界
  • 全局ARG在首个FROM前定义,可被所有阶段继承
  • 阶段内ARG仅限该阶段使用,无法被后续阶段读取
  • 同名ARG在不同阶段需重复声明
ARG VERSION=1.0
FROM alpine:$VERSION AS builder
ARG TARGETARCH
RUN echo "Building for $TARGETARCH"

FROM alpine:$VERSION AS runner
# 此处无法访问 builder 阶段的 TARGETARCH
RUN echo "Running version $VERSION"
上述代码中,VERSION为全局ARG,被两个阶段共享;而TARGETARCH仅在builder阶段有效,体现变量隔离性。

2.5 实战演示:动态定制镜像构建参数

在实际CI/CD流程中,静态的Docker镜像构建往往无法满足多环境部署需求。通过引入构建参数,可实现镜像的动态定制。
使用 ARG 指令定义可变参数
ARG APP_ENV=production
ARG NODE_VERSION=18
FROM node:${NODE_VERSION}-alpine
ENV NODE_ENV=${APP_ENV}
WORKDIR /app
上述代码通过 ARG 指令声明了运行环境与Node版本两个可变参数,默认值适用于生产环境。在构建时可通过 --build-arg 覆盖,实现开发、测试、生产环境的差异化构建。
构建参数的实际调用
  1. 开发环境构建:docker build --build-arg APP_ENV=development --build-arg NODE_VERSION=16 -t myapp:dev .
  2. 生产环境构建:docker build --build-arg APP_ENV=production -t myapp:latest .
该方式提升了镜像复用性,同时保障了环境一致性。

第三章:ENV指令的行为特性与使用场景

3.1 ENV环境变量的持久化机制

在容器化应用中,ENV环境变量的持久化是保障配置一致性的重要手段。通过镜像构建阶段定义的环境变量,默认会写入镜像的元数据层,从而实现跨容器实例的持久继承。

持久化实现方式
  • Dockerfile 中定义:使用 ENV 指令设置变量,嵌入镜像层
  • 运行时注入:通过 docker run -e 或 Compose 文件 environment 字段传入
  • 配置文件挂载:结合卷将 .env 文件挂载至容器内部
ENV DATABASE_HOST=prod-db.example.com \
    DATABASE_PORT=5432 \
    LOG_LEVEL=info

上述代码在构建镜像时将环境变量固化到镜像层中,后续基于该镜像启动的容器自动继承这些值。变量以键值对形式存储于容器配置的 Env 数组内,由容器运行时注入进程上下文。

生命周期管理
方式持久性适用场景
Dockerfile ENV高(随镜像)静态配置
运行时 -e低(仅当前容器)临时调试

3.2 容器运行时环境配置实战

在容器化部署中,正确配置运行时环境是保障应用稳定运行的关键步骤。需重点关注资源限制、安全策略与存储挂载的合理设置。
资源配置与限制
通过 Kubernetes 的 `resources` 字段可定义容器的资源请求与限制,防止资源争用。示例如下:
resources:
  requests:
    memory: "256Mi"
    cpu: "250m"
  limits:
    memory: "512Mi"
    cpu: "500m"
上述配置确保容器启动时至少获得 256Mi 内存和 0.25 核 CPU,最大不超过 512Mi 内存和 0.5 核,避免单个容器耗尽节点资源。
安全上下文配置
为提升安全性,应启用安全上下文(SecurityContext),禁止以 root 用户运行:
securityContext:
  runAsNonRoot: true
  runAsUser: 1000
该配置强制容器使用非 root 用户(UID 1000)启动,显著降低权限提升攻击风险。

3.3 ENV与启动命令的联动效果分析

在容器化应用中,环境变量(ENV)与启动命令的协同作用直接影响服务的初始化行为。通过预设ENV,启动命令可动态读取配置参数,实现环境自适应。
环境变量注入示例
ENV DB_HOST=postgres \
    DB_PORT=5432 \
    LOG_LEVEL=info

CMD ["sh", "-c", "echo Connecting to $DB_HOST:$DB_PORT && exec ./start-app --log=$LOG_LEVEL"]
上述Dockerfile中,ENV定义了数据库地址和日志级别,CMD使用sh -c解析变量并传入实际值。关键点在于:直接使用exec确保进程PID为1,避免信号丢失。
变量解析时机对比
方式解析阶段是否支持ENV替换
exec模式构建时否
shell模式运行时是
可见,仅shell模式能完成ENV到命令的实际注入,这是实现灵活部署的关键机制。

第四章:ARG与ENV的关键差异与协作模式

4.1 构建时 vs 运行时:生命周期对比

在软件开发中,构建时与运行时代表了两个关键的生命周期阶段。构建时指代码编译、依赖解析和资源打包的过程;运行时则是程序被加载执行的阶段。
典型差异对比
维度构建时运行时
环境变量静态注入动态读取
错误类型语法错误、类型检查空指针、逻辑异常
代码示例:环境配置处理

// 构建时通过 webpack.DefinePlugin 注入
const API_URL = process.env.API_URL;

// 运行时动态获取
async function fetchUser(id) {
  const response = await fetch(`${API_URL}/users/${id}`);
  return response.json();
}
上述代码中,API_URL 在构建时被静态替换为实际值,提升执行效率;而数据请求发生在运行时,体现动态交互能力。构建时优化可减少运行时开销,二者协同决定应用性能边界。

4.2 安全性考量:敏感信息传递的最佳实践

在系统间传递敏感信息时,必须优先确保数据的机密性与完整性。采用加密传输是基本前提,推荐使用 TLS 1.3 或更高版本来保障通信安全。
避免明文传输
任何包含身份凭证、密钥或用户隐私的数据都不得以明文形式出现在请求中。例如,禁止在 URL 参数中传递 token:

GET /api/user?token=abc123 HTTP/1.1
Host: example.com
该方式易被日志记录泄露。正确做法是使用 Authorization 头:

GET /api/user HTTP/1.1
Host: example.com
Authorization: Bearer <JWT_TOKEN>
其中 JWT 应设置合理过期时间(exp),并使用 HS256 或 RS256 算法签名。
敏感数据处理建议
  • 始终在服务端验证令牌,禁止客户端决定权限
  • 对静态敏感数据进行加密存储,如使用 AES-256
  • 定期轮换密钥与证书,降低长期暴露风险

4.3 组合使用模式:ARG赋值给ENV的典型用法

在Docker构建过程中,`ARG` 指令允许用户在构建时传入参数,而 `ENV` 则用于设置容器运行时的环境变量。通过将 `ARG` 的值赋给 `ENV`,可实现灵活配置与运行时持久化的结合。
典型应用场景
该模式常用于区分开发、测试与生产环境。例如,传入构建参数决定应用版本或日志级别,并将其固化为环境变量供容器内程序读取。
ARG APP_VERSION=1.0
ARG LOG_LEVEL=info
ENV APP_VERSION=$APP_VERSION \
    LOG_LEVEL=$LOG_LEVEL
上述代码中,`ARG` 定义了两个可覆盖的构建参数,默认值分别为 `1.0` 和 `info`。通过 `ENV` 将其赋值,使得这些值在镜像运行时仍可被应用程序访问。
优势分析
  • 构建灵活性:可在不同环境中传入不同参数值
  • 运行时可用性:ENV确保变量在容器启动后依然存在
  • 解耦配置:分离构建期输入与运行期依赖

4.4 镜像层影响与缓存策略优化

Docker镜像由多个只读层组成,每一层代表一次构建操作。合理的层结构能显著提升构建效率和缓存命中率。
构建层的最佳实践
将不变的依赖安装放在前置层,频繁变更的代码置于后置层,可最大化利用缓存。例如:
# Dockerfile 示例
FROM ubuntu:20.04
COPY ./dependencies /app/dependencies
RUN apt-get update && ./app/dependencies/install.sh  # 稳定层,缓存复用
COPY . /app  # 变动层,仅在代码修改时重建
CMD ["./start.sh"]
上述结构确保依赖安装步骤不随应用代码变动而重复执行,减少构建时间。
缓存失效控制
使用 --cache-from 指定外部镜像作为缓存源,支持跨机器缓存共享。构建时输出如下信息提示缓存状态:
  • Using cache:当前层已命中缓存
  • --> Found in local cache:本地存在匹配中间镜像
合理设计 Dockerfile 层次顺序,是实现高效 CI/CD 流水线的关键环节。

第五章:常见误区总结与最佳实践建议

过度依赖 ORM 而忽视原生 SQL 性能优化
许多开发者在使用 GORM 或 Django ORM 时,倾向于完全避免手写 SQL,导致生成的查询效率低下。例如,N+1 查询问题频繁出现在关联数据加载中。

// 错误示例:未预加载关联数据
var users []User
db.Find(&users)
for _, u := range users {
    fmt.Println(u.Profile.Name) // 每次触发额外查询
}

// 正确做法:使用 Preload 预加载
db.Preload("Profile").Find(&users)
忽略数据库索引设计的业务场景匹配
创建索引不应盲目。以下为常见索引类型与适用场景对比:
索引类型适用场景注意事项
B-Tree等值、范围查询默认类型,适合大多数场景
Hash精确匹配(如 UUID)不支持范围扫描
GINJSONB 字段检索写入开销较大
缓存策略配置不当导致数据不一致
使用 Redis 缓存用户资料时,若更新数据库后未及时失效缓存,可能引发脏读。推荐采用“先更新数据库,再删除缓存”策略,并结合延迟双删防止并发问题。
  • 设置合理的 TTL,避免永久缓存
  • 使用 Lua 脚本保证缓存与数据库操作的原子性
  • 监控缓存命中率,低于 80% 应重新评估 key 设计
日志级别设置过于宽松影响系统性能
生产环境将日志级别设为 DEBUG 会导致 I/O 压力激增。应根据部署环境动态调整:
  1. 开发环境:DEBUG,便于排查问题
  2. 测试环境:INFO,记录关键流程
  3. 生产环境:WARN 或 ERROR,仅记录异常事件
开源工具对比:5款主流大数据脱敏框架评测 数据脱敏(Data Masking/Anonymization),也称为数据漂白、数据去标识化,是指在不影响数据可用性的前提下,通过一定的技术手段对敏感信息进行处理,使其无法被识别或关联到具体个人或实体的过程。当应用程序向数据库写入数据(INSERT/UPDATE)时,ShardingSphere 会拦截 SQL,对配置了脱敏规则的字段,使用指定的算法进行加密/脱敏处理,然后将处理后的数据写入到。如果你的答案是“是”,那么数据脱敏,尤其是针对海量数据的。好的,各位技术同仁,数据安全领域的探索者们,大家好。 阅读详情

相关推荐

DICOM三维重建:基于VTK实现三种面绘制算法

版本:VS2019、VTK9.0.1 #define vtkRenderingCore_AUTOINIT 3(vtkInteractionStyle,vtkRenderingFreeType,vtkRenderingOpenGL2) #define vtkRenderingVolume_AUTOINIT 1(vtkRenderingVolumeOpenGL2) #include "vtkDICOMImageReader.h" #include "vtkRenderWindowInteractor.h" #i

一直在笑的博客 5922

dockerfile中的env指令_11.dockerfile之ENV指令

一、ENV指令说明ENV指令用来在镜像构建过程中设置环境变量,后续的RUN可以使用它所创建的环境变量当创建基于该镜像的container的时候,会自动拥有设置的环境变量二、ENV案例首先,编写dockerfile:#baseimageFROM centos#MAINTAINER,thisdockerfile createrMAINTAINER loose@docker.com#设置环境变量ENV ...

weixin_39527292的博客 581

光谱特征选择之模拟退火算法SA

光谱特征选择之模拟退火算法SA。

weixin_42621095的博客 901

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万+

【汽车主动降噪】【ANC算法优化】基于深度学习的汽车主动噪声控制技术研究及Matlab实现

本文探讨了基于深度学习的汽车主动降噪(ANC)算法优化方案。针对传统FXLMS算法在应对复杂、非线性车内噪声时的局限性,文章详细解析了如何利用神经网络作为非线性建模器、深度滤波器或智能步长调节器来增强ANC系统性能,并提供了完整的Matlab仿真实战流程,展示了深度学习在提升降噪效果和收敛速度方面的潜力。

seed的博客 540

【TouchDesigner】三维渲染

Cmera COMP Uniform Scale(按比例缩放):沿x,y,z三个轴等比例缩放相机(通常不建议改变相机大小)。 Constrain To(约束到):让相机附属到某个指定元件上,跟随指定元件运动。 Look At(朝向):让相机在移动过程中始终面对指定的元件。 Pah SOP(相机的路径):输入SOP元件名字,为相机指定移动路径。 Geometry Comp Geometry COMP中的参数与Camera COMP中的参数用法大部分都相似。特殊的是它的instacne页面的

wangpuqing1997的博客 5459

揭秘Docker ARG构建阶段传递:90%开发者忽略的关键细节

掌握Docker ARG构建阶段传递技巧,解决多阶段构建中参数无法传递的痛点。详解ARG与ENV配合使用方法,适用于定制化镜像构建场景,提升灵活性与安全性。关键细节解析,值得收藏。

DebugLoom的博客 1043

手把手教你用RC桥式振荡器生成1Hz-1MHz正弦波(附完整电路图)

本文详细介绍了如何从零构建RC桥式振荡器,实现1Hz-1MHz正弦波的生成。通过核心元件选型、参数设计、电路搭建与优化等步骤,帮助读者掌握振荡器的工作原理和实战技巧。特别适合电子实验和信号处理领域的初学者和工程师,附完整电路图和常见问题解决方案。

weixin_30338481的博客 467

Docker ARG与ENV终极对比(ARG默认值被覆盖的真相)

掌握Docker ARG默认值覆盖技巧,厘清ARG与ENV本质区别。详解构建参数传递机制、适用场景及覆盖逻辑,揭示镜像构建时变量优先级处理规则。助你灵活控制构建流程,提升Dockerfile可维护性,值得收藏。

VarFlow的博客 998

【前端圭臬】二:你知道的和不知道的 HTML

关于 HTML,说几个你可能不太关注的问题。

Evan 的博客 4758

Geogebra中级篇016—矩阵(Matrices)

在GeoGebra中,矩阵是一种强大的工具,广泛应用于线性代数、几何变换和数据处理等领域。通过矩阵,我们可以轻松实现复杂的计算和图形变换,如旋转、平移和缩放等操作。不仅如此,GeoGebra的矩阵功能还支持多种运算,如加法、乘法、求逆等,使得用户能够高效地处理线性方程组和向量空间问题。在本文中,我们将深入探讨GeoGebra中的矩阵功能,详细介绍如何创建矩阵、执行常见的矩阵运算,并通过实例展示这些操作在数学和工程应用中的实际价值。这篇文章将为你提供关于GeoGebra矩阵操作的全面指南。

八荒启-交互动画的博客 2584

Docker多阶段构建中ARG传递陷阱与最佳实践(90%开发者忽略的关键细节)

掌握Docker多阶段构建中ARG传递的关键技巧,解决环境变量失效难题。详解Docker ARG 的构建阶段传递机制,覆盖编译、测试等场景,确保参数跨阶段生效,提升镜像构建效率与可维护性,值得收藏。

DeepLens的博客 677

【2025软考高级架构师】基础知识部分——6、软件架构设计

(1)架构是对系统的抽象(2)架构由多个结构组成(3)任何软件都存在架构(4)元素及其行为的集合构成架构的内容(5)架构具有“基础”性(6)架构隐含有“决策”

qq837993702的博客 1万+

Dockerfiles ENV和ARG的应用

https://vsupalov.com/docker-arg-env-variable-guide/#arg-and-env-availability 在写Dockerfile时, ENV和ARG,包括.env都是很容易弄混的概念。让我们对其进行区分。 .env文件 和docker-compose.yml配合使用。并不和Dockerfile一起使用 env_file 在Dockerfi...

2万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Docker ARG与ENV深层对比分析(ARG默认值覆盖实战指南)

掌握Docker构建参数控制的关键技巧,深入解析ARG与ENV区别。通过实战演示Docker ARG默认值覆盖方法,阐明其在多环境构建中的灵活应用优势。理解变量优先级与使用场景,提升镜像构建效率,值得收藏。

BytePulse的博客 1023

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【Docker镜像构建核心技巧】:ARG与ENV到底有什么区别?

掌握Docker镜像构建中ARG与ENV的区别,明确二者在构建参数传递与环境变量设置中的不同应用场景。ARG用于构建时传参,灵活定制镜像;ENV在容器运行时生效,便于配置持久化环境。理解其机制可提升镜像可维护性与安全性,值得收藏。

FuncLens的博客 1131

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Docker ENV 与 ARG 详解

Docker ENV 与 ARG 详解

bearboy80的专栏 1771

Dockerfile中ARG和ENV的区别与ARG传递失效的4个常见原因

掌握Docker ARG构建阶段传递技巧,解决ARG参数失效问题。详解ARG与ENV区别,覆盖多阶段构建、ARG作用域等4大常见场景,确保变量正确传递。提升镜像构建灵活性与可维护性,值得收藏。

ProceGlow的博客 1129

Docker镜像构建必知:3分钟掌握ARG与ENV的本质区别

掌握Docker镜像构建关键技巧,快速厘清ARG与ENV用途差异。本文深入解析ARG用于构建参数传递、ENV设置容器运行环境变量的适用场景与核心区别,帮助优化镜像构建流程。理解二者本质,提升配置灵活性与可维护性,值得收藏。

FastProceed的博客 718

Dockerfile ENV和ARG的区别与应用

在写Dockerfile时, ENV和ARG,包括.env都是很容易弄混的概念。让我们对其进行区分。 .env文件 和docker-compose.yml配合使用。并不和Dockerfile一起使用 env_file 在Dockerfile中使用,当环境变量很多,可食用该参数,指定对应的变量文件。 ARG 在Dockerfile中使用,仅仅在build docker image的过程中(包括CMD和ENTRYPOINT)有效,在image被创建和container启动之后,无效。 如果你在Dockerfil

LoveSummer 5415

为什么你的ARG默认值总被忽略?,90%开发者都踩过的坑

掌握Docker ARG默认值覆盖技巧,解决构建参数失效难题。适用于多环境构建场景,通过正确使用ARG与ENV配合,确保默认值可被灵活覆盖。避免常见语法误区,提升镜像构建灵活性,值得收藏。

FastProceed的博客 853

ARG vs ENV:你真的懂Docker构建时与运行时变量管理吗?

掌握Docker镜像构建技巧,深入解析ARG与ENV核心差异。通过实际场景对比构建时与运行时变量管理的适用情况,阐明ARG用于传递构建参数、ENV设置容器环境变量的关键优势。厘清二者用途可提升镜像灵活性与安全性,Docker 镜像构建 ARG 与 ENV 区别一文说清,值得收藏。

LiteCompile的博客 761

【Docker高级进阶指南】:彻底搞清ARG与ENV的应用场景

掌握Docker镜像构建关键技巧,深入解析ARG与ENV的使用场景与核心差异。涵盖构建参数传递、环境变量设置及最佳实践方法,提升镜像灵活性与安全性。全面对比适用时机,助力高效构建,值得收藏。

QuickProceed的博客 871

深入Docker变量系统:ARG与ENV的生命周期全解析

掌握Docker镜像构建关键技巧,深入解析ARG与ENV的生命周期差异。阐明ARG用于构建时传参,ENV设置容器运行环境变量,对比适用场景与配置方法,提升镜像灵活性与可维护性。理解二者区别,优化构建流程,值得收藏。

PixelGlow的博客 775

【Docker-Day 7】揭秘 Dockerfile 启动指令:CMD、ENTRYPOINT、ENV、ARG 与 EXPOSE 详解

本文将深入探讨 Dockerfile 的另一半核心内容——启动与配置指令。我们将详细剖析 `CMD` 与 `ENTRYPOINT` 的爱恨情仇,揭示它们如何共同决定容器的启动行为;辨析 `ENV` 与 `ARG` 在构建时与运行时传递变量的异同;并阐明 `EXPOSE` 的声明作用以及 `.dockerignore` 文件在优化构建过程中的重要性。学完本章,你将能够构建出配置更灵活、行为更可控、镜像更精简的专业级 Docker 镜像。

吴师兄大模型的博客 1741

Docker ARG与ENV区别深度解析(构建阶段变量传递必知)

掌握Docker ARG构建阶段传递技巧,解决多环境变量管理难题。对比ARG与ENV适用场景,详解构建参数传递方法及镜像层优化优势,提升构建灵活性与安全性。运维部署更高效,值得收藏

InstrIsle的博客 817
上一篇: 揭秘Dify推理延迟问题:3个关键参数调优策略大幅提升性能
下一篇: Docker bridge网络配置避坑指南:10年架构师总结的6条黄金法则
StepLens
博客等级 码龄1年 149粉丝 2031原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值