Dockerfile(chrono《kubernetes入门实战课》笔记整理)
【容器分层】
每个镜像都是基于一些已有的系统,资源等组合起来的,假设N个镜像都是基于centos7.0系统,如果是直接打包做镜像,就会需要打包N份centos7系统,这对磁盘存储和网络传输都是很大的浪费。容器镜像提供了一个思路,把重复的部分抽取出来,只存放一份centos7,然后N个镜像一起来共享它。这种技术的具体应用,就是分层,术语为layer。
容器镜像内部并不是一个平坦的结构,是由许多镜像层组成的,每层都是只读的,相同的层,可以在镜像之间共享,每个层最上面被封装了一层可输入层,多个层像积木一样搭建后,再使用“Union FS(联合文件系统)”技术把它们合并在一期,形成了最终看到的文件系统。具体的分层信息可以通过命令:docker inspect来查看(例:docker inspect nginx:alpine)。当使用docker pull,rmi这些操作的时候,有很多信息打印,其实就是检查分层,看看是否有重复的分层,重复就不需要重新下载,如果其他镜像在使用某个分层,也不允许删除,这样节约磁盘和网络成本。
【dockerfile】
dockerfile,就像是容器这个样板间的施工图纸,你想做成什么样的样板间,就根据dockerfile来创建。然后使用“docker build -f Dockerfile.busybox .”命令,来构建容器。构建好,使用docker images就可以看到了。有几个点要注意
1、这里最后有个“.”,叫构建上下文(build's context),可以理解为构建这个容器需要的相关资源的路径,所以尽量自己新建一个目录,否则可能会打包上传很多无用文件给docker daemon;
2、默认build出来只有image ID,没有名字,参数 -t ,可以指定标签,这样构建的镜像就是这个名字,注意名字要符合命名规范“名字:标签”;
3、-f 带指定的dockerfile,如果不写,默认就找当前目录下名字是dockerfile的文件
dockerfile有几个重要参数,不区分大小写,但是通常都都会大写。每个指令都会生成一个layer:
FROM:基于哪个镜像开始构建。dockerfile里,第一个指令必须是FROM;
RUN:运行shell命令,比如更新系统,安装应用等,命令之间用“&&”分割,每行末尾用续航符“\”。但是一个run下面带太多的具体shell命令,不美观,也不方便修改,可以把这些shell命令集合到一个文件里,然后用RUN来执行;
COPY:拷贝文件;
------------>
ARG:创建的变量,只在镜像构建过程中可见,容器运行时不可见;
ENV:创建的变量,不仅能够在构建镜像的过程中使用,在容器运行时也能够以环境变量形式被应用程序使用;
EXPOSE:声明容器对外接口,如443,53等
【一个实验】
1、配置如下的dockerfile
2、使用这个dockerfile来制作一个镜像,命令为docker build -t ym:v1 . 。注意最好生成一个新的目录,不然会打包上传非常多的文件给docker daemon;
3、使用docker images查看,已经做好了这个ym镜像。
本文来自博客园,作者:1234roro 当你迷惘的时候,开始学习吧!当你目标清晰的时候,开始学习吧!转载请注明原文链接:https://www.cnblogs.com/1234roro/p/16847995.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异