【Docker基础】Dockerfile构建与运行流程完全指南:从原理到实践优化

目录

引言

1 docker build命令参数详解

1.1 命令概述

1.2 常用参数详解

1.2.1 -t, --tag

1.2.2 -f, --file

1.2.3 --build-arg

1.2.4 --no-cache

1.2.5 --pull

1.3 构建流程图解

2 构建上下文(Context)优化技巧

2.1 构建上下文定义

2.2 优化策略

2.2.1 使用.dockerignore文件

2.2.2 精简构建路径

2.2.3 多阶段构建(Multi-Stage Build)

2.3 流程:构建上下文优化

3 镜像标签(Tag)的规范使用

3.1 标签的作用

3.2 标签规范

3.2.1 语义化版本(Semantic Versioning)

3.2.2 环境标识

3.2.3 时间戳标签

3.2.4 latest标签

3.3 标签管理流程

4 总结


引言

Dockerfile是构建Docker镜像的核心配置文件,而docker build命令则是将Dockerfile转化为实际镜像的关键工具。理解构建过程中的关键参数、优化技巧和标签管理方法,对于提高镜像构建效率和可维护性至关重要。

1 docker build命令参数详解

1.1 命令概述

  • docker build命令通过读取Dockerfile和构建上下文(Context)来创建镜像,其基本语法为:
docker build [OPTIONS] PATH | URL | -

1.2 常用参数详解

1.2.1 -t, --tag

  • 作用:为构建的镜像指定名称和标签
  • 语法
docker build -t <image_name>:<tag>
  • 示例
docker build -t myapp:1.0 .
  • 说明
  • myapp为镜像名称,1.0为标签
  • 若不指定标签,默认使用latest

1.2.2 -f, --file

  • 作用:指定非默认路径的Dockerfile
  • 语法
docker build -f <dockerfile_path>
  • 示例
docker build -f ./docker/Dockerfile.prod -t myapp:prod .
  • 说明
  • 默认情况下,Docker会在构建上下文根目录查找名为Dockerfile的文件

1.2.3 --build-arg

  • 作用:传递构建参数到Dockerfile中的ARG指令
  • 语法
docker build --build-arg <key>=<value>
  • 示例
docker build --build-arg VERSION=2.3.1 -t myapp:2.3.1 .
  • Dockerfile示例
ARG VERSION=1.0
ENV APP_VERSION=${VERSION}

1.2.4 --no-cache

  • 作用:禁用缓存,强制重新构建所有层
  • 语法
docker build --no-cache
  • 示例
docker build --no-cache -t myapp:1.0 .
  • 说明
  • 默认情况下,Docker会缓存已构建的层以加速后续构建
  • 当Dockerfile发生变更或需要强制重新构建时使用

1.2.5 --pull

  • 作用:始终拉取最新版本的基础镜像
  • 语法
docker build --pull
  • 示例
docker build --pull -t myapp:1.0 .
  • 说明
  • 默认情况下,Docker会使用本地缓存的基础镜像
  • 使用--pull可确保使用仓库中最新的基础镜像

1.3 构建流程图解

  • 路径指定:通过-f参数指定Dockerfile路径,否则默认当前目录
  • 标签命名:使用-t为镜像命名和版本化
  • 参数传递:通过--build-arg传递构建时参数
  • 缓存控制:通过--no-cache禁用缓存
  • 基础镜像更新:使用--pull确保使用最新基础镜像

2 构建上下文(Context)优化技巧

2.1 构建上下文定义

构建上下文是docker build命令执行时传递给Docker守护进程的文件系统目录,Docker守护进程在构建过程中只能访问该上下文内的文件。

2.2 优化策略

2.2.1 使用.dockerignore文件

  • 作用:排除不需要的文件,减少构建上下文的体积
  • 示例
# .dockerignore文件内容
node_modules/
*.log
.git/

2.2.2 精简构建路径

  • 技巧:将Dockerfile放在项目根目录,并仅包含必要文件
  • 错误示例
# 在/home/user/project目录下执行
docker build -t myapp:1.0 /home/user/project
  • 正确示例
cd /home/user/project 
docker build -t myapp:1.0 .

2.2.3 多阶段构建(Multi-Stage Build)

  • 作用:分离构建环境和运行环境,减少最终镜像体积
  • Dockerfile示例
# 构建阶段:编译代码
FROM golang:1.18 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp .# 运行阶段:轻量级镜像
FROM alpine:3.16
COPY --from=builder /app/myapp /usr/local/bin/
CMD ["myapp"]
  • 说明
  • AS builder为构建阶段命名
  • COPY --from=builder从构建阶段复制编译结果

2.3 流程:构建上下文优化

3 镜像标签(Tag)的规范使用

3.1 标签的作用

镜像标签用于标识镜像版本、用途或环境,便于管理和部署

3.2 标签规范

3.2.1 语义化版本(Semantic Versioning)

  • 格式:主版本.次版本.修订号
  • 示例
docker build -t myapp:1.2.3 .
  • 说明
  • 1(主版本):重大功能更新或API变更
  • 2(次版本):新增功能但保持兼容性
  • 3(修订号):问题修复或优化

3.2.2 环境标识

  • 格式:镜像名-环境:版本
  • 示例
docker build -t myapp-dev:1.0 . docker build -t myapp-prod:1.0 .
  • 说明
  • dev:开发环境
  • prod:生产环境

3.2.3 时间戳标签

  • 格式:镜像名-YYYYMMDD
  • 示例
docker build -t myapp-20250708:1.0 .
  • 适用场景:快速迭代或CI/CD流水线

3.2.4 latest标签

  • 作用:标识最新稳定版本
  • 示例
docker tag myapp:1.0 myapp:latest
  • 注意:latest标签不自动更新,需手动维护

3.3 标签管理流程

标签策略建议:
  • 生产环境:使用语义化版本(如myapp:2.1.0)
  • 测试环境:使用环境标识(如myapp:2.1.0-test)
  • 临时镜像:使用时间戳(如myapp:2.1.0-20250708)

4 总结

  • 掌握docker build命令参数、构建上下文优化技巧和镜像标签规范,是高效管理Docker镜像的基础
  • 通过合理配置构建参数、减少上下文冗余以及规范标签使用,可以显著提升构建效率和镜像可维护性
  • 实际应用中,建议结合多阶段构建和.dockerignore文件,最大化优化构建过程

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

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

相关文章

StarRocks Community Monthly Newsletter (Jun)

版本动态 v3.5.0 存算分离&#xff1a;支持生成列、主键表重建索引&#xff1b;大规模导入逻辑优化&#xff0c;降低小文件数量。 数据湖分析&#xff1a;Beta 支持 Iceberg 视图创建与修改&#xff1b;支持 Iceberg REST Catalog 嵌套命名空间&#xff1b; 性能提升与查询优…

HDMI接口 vs. DisplayPort接口:电竞玩家该如何选择更优?

在搭建游戏主机或电竞PC时&#xff0c;显示器接口的选择&#xff08;HDMI vs. DP&#xff09;会直接影响画质、刷新率和延迟表现。本文将从分辨率、刷新率、可变刷新率&#xff08;VRR&#xff09;、带宽、兼容性等角度对比&#xff0c;帮你选出最适合游戏的接口。1. 基础对比&…

论文笔记:Learning Cache Replacement with CACHEUS

2021 USENIX GitHub - sylab/cacheus: The design and algorithms used in Cacheus are described in this USENIX FAST21 paper and talk video: https://www.usenix.org/conference/fast21/presentation/rodriguez Learning Cache Replacement with CACHEUS 1 intro 基于…

极致cms多语言建站|设置主站默认语言与设置后台固定语言为中文

小记 很长时间没有建站了,最近有需求所以又回炉了&#xff0c;使用的极致cms 极致cms帮助文档 | 极致CMS帮助文档 由于很长时间没做&#xff0c;又遇到了之前碰到的两个问题&#xff0c;凭借经验和记忆还是处理掉了 1.当网站前台使用?len或?lzh来切换语言时&#xff0c;管…

Linux Vim 编辑器详解:从入门到进阶(含图示+插件推荐)

前言在 Linux 的世界中&#xff0c;Vim 是一款被无数开发者喜爱和追捧的强大文本编辑器。如果你厌倦了鼠标点来点去&#xff0c;不妨试试 Vim —— 一款专注于高效键盘操作的“终极利器”。本文将带你全面了解 Vim 的基本概念、模式切换、常用命令、窗口管理&#xff0c;并附上…

web前端渡一大师课 01 事件循环

一. 浏览器的进程模型 1.何为进程?程序运行需要有它自己专属的内存空间,可以把这块内存空间简单理解为进程 每个应用至少有一个进程,进程之间相互独立,即使要通信,也需要双方同意 2.何为线程?有了进程后,就可以运行程序的代码了,运行代码的"人",称之为"线程&…

linux网络存储——freeNAS的安装配置

一、前言 freeNAS 是一款基于 FreeBSD 的开源网络存储操作系统&#xff0c;支持文件共享&#xff08;如 SMB/CIFS、NFS、AFP&#xff09;、数据备份、虚拟化存储等功能。同时FreeNAS开源优势明显&#xff0c;代码开放可自主定制&#xff0c;能满足多样需求。支持多种协议…

深度学习图像分类数据集—七种树叶识别分类

该数据集为图像分类数据集&#xff0c;适用于ResNet、VGG等卷积神经网络&#xff0c;SENet、CBAM等注意力机制相关算法&#xff0c;Vision Transformer等Transformer相关算法。 数据集信息介绍&#xff1a;七种树叶识别分类&#xff1a;[冬青叶, 杨树叶, 柳叶, 梧桐叶, 石楠叶,…

c++图形题练习程序

一.练习题背景 这题是作者再一家公司实习的时候&#xff0c;实习期间的一个考核题目&#xff0c;感觉还是比较有价值的。希望能给还在努力的学弟学妹们一些启发。 题目大致就是要求用继承和多态来实现圆、三角形和长方形的面积和周长求解。这步的大致思路是这样的&#xff0c;你…

【论文阅读 | PR 2024 |ITFuse:一种用于红外与可见光图像融合的交互式 Transformer】

论文阅读 | PR 2024 |ITFuse&#xff1a;一种用于红外与可见光图像融合的交互式 Transformer1.摘要&&引言2.方法2.1 问题表述2.2 框架概述2.3 特征交互模块2.3.1 共同特征提取分支&#xff08;IcI_{c}Ic​ 分支&#xff09;2.3.2 独特特征提取分支&#xff08;I1I_{1}I…

【Qt】 设计模式

在Qt应用程序开发中&#xff0c;结合数据库操作、通信、界面逻辑和显示等功能&#xff0c;以下是常用的设计模式及其典型应用场景&#xff1a; 一、MVC/MVVM&#xff08;模型-视图-控制器/视图模型&#xff09; 作用&#xff1a;分离数据&#xff08;模型&#xff09;、界面&am…

【HarmonyOS】ArkUI-X 跨平台框架入门详解(一)

【HarmonyOS】ArkUI-X 跨平台框架入门详解&#xff08;一&#xff09; 一、前言 1、ArkUI-X框架是什么&#xff1f; ArkUI-X是在ArkUI开发框架的基础上&#xff0c;进行扩展。支持多个OS平台&#xff0c;目前支持OpenHarmony、HarmonyOS、Android、 iOS。2、ArkUI-X目前的能力现…

开发者进化论:驾驭AI,开启软件工程新纪元

导语&#xff1a;人工智能&#xff08;AI&#xff09;的浪潮&#xff0c;特别是以大型语言模型&#xff08;LLM&#xff09;为代表的生成式AI&#xff0c;正以前所未有的力量&#xff0c;深刻地重塑着软件开发的传统疆域。我们正处在一个关键的转折点——产业的重心正从模型的“…

智慧水务平台,智慧水务,惠及民生,提升水务管理效率与服务质量

平升电子智慧水务平台支持海量物联网数据接入实现供水全流程信息化&#xff0c;深度逻辑运算自动控制实现供水调度智慧化&#xff0c;融入管网地理信息系统实现测点数据时空化&#xff0c;数字孪生实现水厂各工艺环节运行情况可视化&#xff0c;多角度统计分析实现水务运营管理…

【Unity基础】Unity中元素的层级排序

在Unity中&#xff0c;控制元素的层级排序&#xff08;渲染顺序&#xff09;是确保场景正确显示的关键。以下是常见的层级排序方式及其适用场景&#xff1a;1. 通过GameObject的层级顺序&#xff08;Sorting Layer/Order in Layer&#xff09; 适用对象&#xff1a;2D精灵&…

梁的振动特征函数分析2

问题7&#xff1a;左端固定、右端自由梁的振动分析 考虑梁的振动方程&#xff1a; uttKuxxxx0,0<x<l,K>0 u_{tt} K u_{xxxx} 0, \quad 0 < x < l, \quad K > 0 utt​Kuxxxx​0,0<x<l,K>0 边界条件&#xff1a; 左端固定&#xff08;位移和斜率为零…

AI问答-Token:在人工智能领域,Token 是模型处理文本的核心单元 / 最小可处理片段

一、在人工智能领域&#xff0c;Token 是模型处理文本的核心单元&#xff0c;可理解为文本的“最小可处理片段”二、表格理解类别详细说明基本定义Token 是模型处理文本的最小语义或语法单位&#xff0c;可以是单词、子词、字符、标点符号或特殊符号。例如&#xff1a;- 单词级…

读取ubuntu的磁盘分区表与超级块

1.读取磁盘分区表sudo fdisk -l /dev/sda2.计算偏移量分区起始偏移 4096 512 2097152 字节 超级块位置 2097152 1024 2098176字节3.快速验证&#xff08;直接检查魔数 53 &#xff09;# 检查偏移 2,098,176 处是否有 EXT4 魔数 sudo dd if/dev/sda bs1 count2 skip$((209…

科技驯服烈日狂沙:中东沙漠农场的光储革命

作者 | 小葳 阿布扎比郊外的午后&#xff0c;沙漠灼热、干旱难耐。 然而一座农场内&#xff0c;景象截然不同&#xff1a;蔬菜生机盎然&#xff0c;果实挂满枝头。农户轻点手机&#xff0c;远程调控着大棚内温湿度&#xff1b;灌溉与施肥&#xff0c;则由系统自动精准执行。 这…

基于Chinese-CLIP与ChromaDB的中文图像检索功能实现

本文按“原理 → 代码 → 讲解”三层展开&#xff0c;读者只需具备 Python 基础即可跟随完成一个可落地的以文搜图应用。 一、整体思路 把图片和文字都转成固定长度的向量&#xff08;768 维&#xff09;。把图片向量提前存入向量数据库。查询时把文字转成向量&#xff0c;再找…