前言
我们平常在对程序进行Docker镜像打包的时候总会有些困惑,到底是将最终的镜像分层打包最后汇总成程序的镜像(也就是一层一层的 From )合适,还是说直接将程序从Source code就打包出最终的镜像更合适呢?其实这里面没有说那个是对或错的,要看程序包自身的情况做选择。
Docker build的注意点
如果接触过Docker,Docker build大家都清楚怎么用了,但是有几个容易忽略的注意点:
1、Dockerfile开头的 From 和 MAINTAINER 其实都是一层镜像
2、如果 From 和 MAINTAINER 不同,就算是后面的命令语句相同也不会是相同的镜像。如都是执行 RUN echo "hello world" test.txt
,如果 MAINTAINER 不同,则生成的这个语句的镜像层将是不同的。
3、原理上如果每一层对应的父层不同,那怕执行的命令相同,Docker也会生成一层新的镜像,如下面两个Dockerfile文件
Dockerfile 1:
FROM centos:latest MAINTAINER duffqiu@gmail.com RUN echo "test" hello.txt RUN echo "hello" > test.txt
Dockerfile 2:
FROM centos:latest MAINTAINER duffqiu@gmail.com RUN echo "hello" > test.txt RUN echo "test" hello.txt
这两个文件的内容只是两个 RUN 语句顺序不一样,但是最后它们生成的image层是不一样的,可以通过 docker history <image name>
来对比
从这里面也看到一个问题,From最好不要用lastest标签,避免不同镜像的顶层是不同,从而无法复用。
实践建议
需要看具体情况,如果有一个包是公用的,且比较大,则最好先将这个包打成Image再给后续的程序打包使用,这样使用时占用的机器磁盘空间最小,启动时如果需要pull的话也最快。
但是如果包本身就是很小,过细的分层也不利于维护和管理,所以最终还是一个艺术问题
总结
以上就是这篇文章的全部内容,希望这篇文章的内容对大家的学习或者工作能有一定的帮助,如果有疑问大家可以留言交流。
更新日志
- 群星.2022-一不小心喵上你原声大碟【TME影音】【FLAC分轨】
- 《战锤40K星际战士2》卡在正在加入服务器解决方法
- 《勇者斗恶龙怪物仙境3》玩法内容介绍
- 《幸福工厂》无限报错解决方法
- 交错战线原始交易所推荐角色一览
- 战锤40K星际战士2战术职业介绍|战术职业技能效果一览
- 战锤40K星际战士2突击职业介绍|突击职业技能效果一览
- [妙音金曲]群星《悲情咖啡屋》(黑胶)2CD[DTS-WAV]
- 阿兰·达瓦卓玛《A-Lan阿兰唯美歌姬》2CD[DTS-WAV]
- 【小提琴】陈立新《思乡曲》2004[FLAC+CUE]
- 《战地》新作明年初大规模测试!EA已内部测试一年
- 《GTAOL》PC版时隔多年更新反作弊!小助手宣布跑路
- EA称AI是其业务核心!能提高开发效率、节约成本
- 卫华.1990-太阳升【BMG】【WAV+CUE】
- 呼吸乐队.1992-THEBREATHING【深飞】【WAV+CUE】