docker 镜像

192 阅读3分钟

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 指令之间的区别?