当前位置: 首页 > news >正文

编写 dockerfile 的零散技巧

本文由作者手工编写,无 AI 参与。

【1】用小镜像

大部分情况下,基于 debian-slim 的镜像是比较推荐的,如果测试充分并且对镜像大小要求很严格,可以用 apline。

如果是 AI 强相关,老老实实用 GPU 厂商推荐的镜像。例如,英伟达推荐 ubuntu。

【2】secret 采用 build-kit 挂载到构建过程

docker build --secret id=foo,src=/path/to/file ......

切勿使用 COPY 之类的方法放到镜像,因为镜像分层的缘故,需要保密的文件会留在镜像的层中。

【3】难、苦的步骤下沉

假设构建过程中,某个步骤很困难或比较痛苦,则尽量把此步骤前移且放入基础镜像。

FROM debian:13.2# do_sth_difficult 所依赖的
RUN ...RUN do_sth_difficult# 假设构建出的镜像为 foo:1.0

之后构建其他:

FROM foo:1.0

【4】架设内网文件服务器

对于团队管理者,如果发现某个公网文件被团队的构建高频率需要,或者某个公网大文件经常出现在团队的 dockerfile 中,则把它们放到内网服务器。

倒不是为了给公网网站或网络出口减负,从内网下载可以让构建更轻松、更可靠。

【5】用 ADD 下载文件并验证

ADD --checksum=sha256:abc123... https://aaa.com/qwer.tar.gz /qwer.tar.gz

【6】在同一层中删掉下载使用之后不再需要的文件,wget,rm

RUN wget -O /bin/cfssl "xxxxx" && \chmod 0755 /bin/cfssl && \cfssl ... && \rm -f /bin/cfssl

这个例子中,使用 cfssl 做了某个事(如生成证书)之后就不再需要它,就可以在同一层中删掉它,节省不必要的空间。

【7】直接使用软件的具体版本,而不是用动态版本工具

nvm,bazelisk,gradle-wrapper 等软件可以通过项目配置动态下载软件的对应版本,这在本地开发很方便。但在容器环境中,由于每次启动是一个干净的环境,所以每次构建都要重新下载,反而麻烦,还增加了因为网络问题导致构建失败的可能性。

对于一个具体项目,项目需要的构建工具版本必然是已知的,所以直接在基础镜像中放置相应的版本即可。

FROM cr.abc.com/devbase/java17-maven363:1.0RUN mvn package ...

【8】巧用多阶段构建

对于多二进制项目,可以把基础镜像分叉。

FROM golang:1.25.8 AS builderRUN apt install ...FROM builder-base AS svc1
# build service 1FROM builder-base AS svc2
# build service 2

很多项目,构建所需的依赖明显多于运行,多阶段构建可以节省很多空间。

FROM cr.abc.com/devbase/jdk17-maven363:1.0 AS builderRUN mvn package ...FROM cr.abc.com/devbase/jre17:1.0COPY --from=builder /target/foo.jar /app/foo.jarCMD ["java", "-jar", "/app/foo.jar"]
http://www.jsqmd.com/news/612417/

相关文章:

  • macOS资源下载完全指南:从入门到精通的网络资源嗅探解决方案
  • 算法岗面试避坑指南:从运动控制到ROS与PPO的实战复盘
  • 3 分钟搞定论文格式!Paperxie AI:让本科生彻底摆脱排版内耗
  • OpenClaw多模态编程:用Phi-3-vision-128k-instruct开发视觉脚本
  • 2026年4月汽车模具供应商选哪家,金属配件/冲压件/冲压模具/连续模具/航空模具/模具/汽车配件,汽车模具公司怎么选择 - 品牌推荐师
  • SiRFstarIII GPS协议解析库:二进制与NMEA双模轻量级实现
  • U盘做成系统盘以及如何恢复
  • 毕设思路
  • Kibana Dev Tools 注释全解析:从新手困惑到高效查询
  • Testsigma企业级自动化测试平台架构设计与高可用部署指南
  • Spring Boot HelloWorld 入门项目
  • 追念殡葬:甘肃专业殡葬机构如何以透明与人文重塑行业标杆 - 深度智识库
  • 期刊论文发表通关手册:PaperXie 智能写作,从选题到见刊的「开挂」指南
  • 【LeetCode】102.二叉树的层序遍历
  • 番茄小说下载器完整指南:3种方法永久保存你喜爱的小说
  • 海外华人婚恋机构可靠婚介系统推荐指南:婚恋系统搭建、相亲交友小程序、相亲小程序制作、相亲系统、红娘系统、婚介小程序选择指南 - 优质品牌商家
  • 无人车跨层配送架构:通用型梯控设备协议解耦与状态机设计
  • openclaw部署oauth模式codex无法正常登录
  • 骑行-天府绿道
  • 复分析与复变函数的区别
  • 破解网盘限速迷宫:技术侦探带你掌握高效直链解析方案
  • Steam成就管理神器:解锁游戏进度的终极解决方案
  • KeymouseGo:3步解放双手,让重复工作自动化的终极指南
  • MySQL数据库|事务+用户和权限管理
  • 3分钟搞定30+文库下载:这款开源神器如何帮你突破平台限制?
  • Java工程师复健AOP:所有的一切都是为了不做重复的事情
  • 2026西安美睫培训市场全景解析:5家专业机构深度对比与选型指南 - 2026年企业推荐榜
  • OpenClaw+千问3.5-27B开发提效:日志分析+异常自动上报
  • 微信聊天记录永久保存的3种方法:WeChatMsg完整指南与实战技巧
  • 2026山东灭火器维修实力盘点:本地化综合服务商为何更受青睐? - 2026年企业推荐榜