Class)——是一个应用程序。
首先需要先从镜像仓库服务中拉取镜像。常见的镜像仓库服务是Docker Hub——docker hub类似maven远程仓库地址(使用maven,均了解maven可以配置本地库也可以配置远程仓库),但是也存在其他镜像仓库服务。拉取操作会将镜像下载到本地 Docker 主机,可以使用该镜像启动一个或者多个容器。
镜像里是什么呢?
OS),同时还包含应用运行所必须的文件和依赖包。因为容器的设计初衷就是快速和小巧,所以镜像通常都比较小。
知道了镜像内部是怎样之后,在本地Docker是如何储存这些镜像的呢?一起看看吧,如下:
本地存储的镜像数据与层数据在image文件夹中是分库存储的——imagedb保存了本地全部镜像的元数据,同时layer文件夹保存了本地镜像的全部镜像层:
build-time)结构,而容器可以理解为一种运行时(runtime)结构,如下图所示:
镜像常用的命令如下:(以pull为例示例,官网中都有详细的说明)
pull命令:docker pull | Docker Documentation。默认情况下,镜像会从 Docker Hub 的仓库中拉取。
参数:
从docker hub拉取一个镜像比如tomcat,如下:
可以看到其镜像为多层,如上图红框部分。对于该命令,有两个问题:
如果多个不同的镜像中,同时包含了同一个层,这样重复下载,岂不是导致了存储空间的浪费么?
实际上,Docker 并不会这么傻会去下载重复的层,Docker 在下载之前,会去检测本地是否会有同样 ID的层,如果本地已经存在了,就直接使用本地的就好了。如上tomcat其中一层提示的是Already exists,就没有重复下载。
, 这种情况咋办?
pull命令时,还需要在镜像前面指定仓库地址(Registry), 如果不指定,则Docker 会使用您默认配置的仓库地址。
以下命令均可通过官网说明操作,后续安装更多软件比如nginx等进行参考:
images命令:docker images | Docker Documentation
save命令:docker save | Docker Documentation,备份镜像
load命令:docker load | Docker Documentation,导入镜像
search命令:docker search | Docker Documentation,搜索镜像
也可以通过Docker Hub Container Image Library | App Containerization可以搜索所需镜像。
inspect命令:docker inspect | Docker Documentation,最简单查看镜像信息的方法是images,inspect查看镜像详细信息。比如前面说到镜像内容与元数据是分开存储的,那么Docker是如何把这些内容整合然后把一个完整镜像显示在用户眼前的呢?以Nginx镜像为例,使用该镜像与此相关信息(rootfs部分)
以上可以看到Docker daemon首先通过image的元数据得知全部layer的ID,再根据layer的元数据梳理出顺序,最后使用联合挂载技术还原容器启动所需要的rootfs和基本配置信息。
history命令:docker history | Docker Documentation,了解一个镜像的历史信息。
tag命令:docker tag | Docker Documentation
rmi命令:docker rmi | Docker Documentation
eg:删除zookeeper镜像
删除成功后回提示untagged的信息。