docker 镜像的实质
自己的理解 docker 镜像 本质上就是 一堆目录 和 文件的集合。
docker 镜像的特点
docker 镜像是分层。对下一层镜像的修改,都会被保留在新的一层之中。
支撑docker 镜像的技术 (或者这样问,将一层又一层镜像组合起来的技术是什么)
联合文件系统
docker 镜像的属性
id 名字 tag 大小 层次 架构类型 操作系统类型
id
作用:镜像的唯一性标志
名字
镜像的全名格式 镜像仓库地址/仓库名/软件名:tag
tag
作用:用以区分在同一仓库的不同镜像版本
层次
说明:一个镜像是由一层又一层组合而成的。
镜像存储
镜像在 服务器上存储的地址 ubuntu
/var/lib/docker/overlay2 文件之中存储着本地镜像的内容。
获取一个镜像在磁盘上存储地址
docker image inspect -f {{.GraphDriver}} 输出信息之中 会包含 镜像的组成部分在宿主机上的存储位置
实验
查看镜像到底是什么
目的
探索镜像的实质到底是什么?
步骤
实质就是将 一个镜像打包放在本地的计算机,然后再解压下来 1:将ubuntu 镜像文件打包 mkdir -p /opt/image/ubuntu; cd /opt/image/ubuntu; docker save -o ubuntu.tar ubuntu 2:解压打包后的文件 tar -xf ubuntu.tar 在/opt/image/ubuntu 目录下 就可以看到整个镜像文件的构成了。
操作
1: 获取镜像
docker pull 镜像名
2: 获取镜像 本质是 网络传输数据的过程,外网速度太慢,如何配置加速?
在 /etc/docker/daemon.json 配置镜像地址,然后重启docker 用以加速。
3: 查看本地镜像列表
docker image ls
注意:在获取镜像列表的同时,会显示 每个镜像的id(前面的几个字符)仓库名 tag 镜像的大小 信息
4: 查看一个镜像是由多少层构成的,以及各层的体积
docker history 镜像id
5: 查看一个镜像的操作系统类型 以及 架构类型
获得操作系统类型
docker image inspect -f {{.Os}} 镜像id
获得镜像的架构
docker image inspect -f {{.Architecture}} 镜像id
问题
1: docker pull 获取镜像的时候,只是填写了软件名字以及tag,真正的镜像名字是什么? 会向官方镜像仓库获取 格式为 docker.io/library/软件名:tag
2: 在 docker image ls 查看本地的镜像列表,会出现 仓库名和tag 字段的取值为none的镜像,这如何理解? 1: 可能是在原本的镜像仓库,它的镜像名被占据了,内容也被更改了,又被pull到了本地。 2: docker build 新建立的镜像 镜像名覆盖了 原本的镜像,两个镜像的内容又不相同。
3: 如何查看 docker 目前使用的联合文件系统到底是哪一个? docker system info | grep "Storage Driver" 输出的信息会包含目前使用的联合文件系统类型
4: 镜像的层数能无限叠加嘛? 不能,overlay2 文件系统 最多能128层。
5: docker 镜像 在服务器上 占据的资源有哪些? 磁盘容量 以及 inode
6: docker 镜像层 的实质是什么? 自己觉得实质是一个目录,目录又会包含文件
7: CMD 与 ENTRYPOINT 指令之间的区别?