开发者学堂课程【Docker 快速入门:Docker 镜像命令】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/616/detail/9396
Docker 镜像命令
内容介绍
一、docker images
二、docker Search 某个镜像的名字
一、 docker images
前面完成了 docker 常用命令的帮助命令部分,接下来进行镜像命令的相关讲解。
镜像相当于类,一个镜像可以生成多个容器实例,现在的模型是鲸鱼背上有集装箱,换句话讲鲸鱼游在蓝色的大海里,蓝色的大海相当于宿主机系统 Windows 10,宿主机上装了 docker,这时鲸鱼就是 docker,上面一个一个的集装箱就是容器实例,容器实例来自于镜像模板。
列出本地主机上的镜像,注意这里的运行的镜像是本机的,不是远程仓库的,现在看一下演示的命令效果
repository tag image ID created virtual size 这个是表头
docker images 是当前主机能够运行的镜像的模板,现在只有一个镜像 Hello world,前面用 docker run 写了 hello world,说明 run 时看本机上有没有这个镜像,如果有,就依照镜像模板生成 hello world 容器实例,后面会讲 tomcat,还有一些其他常用软件的安装,repository 表示镜像的仓库员,tag 表示镜像的标签,image ID Tomcat 相当于记录组件的 ID,表头有相应的固定的 image ID 就是组件,后续操作镜像,既可以操作唯一镜像,也可以操作镜像 ID,Created 的表示镜像创建时间,size 表示镜像大小,tag 默认为 hello world,后面有: latest,如果不写,默认就是 latest,如果不是最新版本,假如是 1.8 版本,3.2 版本,就写: 3.2 3.8 证明下载的版本,使用: repository tag 来定义不同的镜像,类似于同一个库,可以定义不同的分支,其实就是镜像的版本标签。
常用参数说明
1.首先是 docker images-a
为什么 docker images 只有一个,docker images-a 有全部,因为 a 代表 all,镜像是分层的,镜像可以当做是千层饼,一卷一卷套千层饼,最外面看到的是 hello world,但是 hello world 里面还有一层,Hello world 有点像一只鸡蛋,表面拿在手上是只鸡蛋壳,鸡蛋壳里面还会有鸡蛋黄和鸡蛋白。
2.docker images-q
只显示当前镜像 images ID,q 和 a 命令可以组合起来
3.docker images qa
显示当前镜像全部的 ID,眼下之意,如果后续进行复杂操作,要删除多个镜像,通过这个命令就可以把需要删除的镜像的 ID 全部查出来,传给另外一个 docker 删除命令,可以批处理操作删除,因为返回的是 ID,相当于唯一组件、
4.digests 显示镜像的摘要信息
本机只有一个 hello world 镜像,这是直接粘贴
与上面对比,多了一个 hello world 的说明,这时如果有其他镜像,例如现在下载了其他的镜像 Tomcat,说明丰富就会多一些,有点类似于备注。
5.no-trunc 显示完整的镜像信息
是对镜像信息完整性的说明
现在镜像没有截取了,前面就像 ID 直到 85,12 位左右,如果想要看完整ID不要节选,ID 查看的就更加详细了
在 docker image 里面主要是 q 和 a 两个比较常见,表头信息已经讲解完毕,还有一个关键属性就是大小,稍后会讲解,看一下他究竟是多大。
docker images 罗列出本机宿主机上本地的镜像以及相关的信息
二、docker Search 某个镜像的名字
Search 是去 docker hub 上面去查询和查找,这时可能部分同学会觉得奇怪,不是已经配成阿里云了吗,注意阿里云更多的是查是查找 docker,下载的时候是从阿里云下,这时可以看 docker hub,假如现在要 docker search 某个镜像的名字,Docker search tomcat.
这是查找,说明他从 get hub 上面查出了 tomcat 镜像,Get hub 上面存放了 get 库包的那些代码,全球的爱好者都像 get hub 上面传,Docker hub 就像 get hub一样,就是一个一个的镜像文件,再次强调,仓库是存放镜像的地方,这时可以看到,如果用 tomcat 搜索,
可以查看到 Official 官方版,名字是 tomcat,这个 tomcat 就是 official 的tomcat,因为 1900 个 stars,Stars 相当于 get hub 上的星,换句话讲就是点赞数。
先去 dockerhub 上面 search tomcat 镜像,查找到了,并且不止一个,为了避免大家都叫做 tomcat,唯一权威的 official 是官方版,automated 是自动组建的意思,Apache Tomcat 是一个开发源,这里是一些说明,Docker search tomcat 命令 name Tomcat 的出现就是在 Offical
从 tomcat 七到 tomcat 九都有,命令 Docker pull command,相当于像镜像库拉下来,这就是 docker search,这个很简单,需要命令 docker 操作什么,先去下载相应的镜像,然后用容器或者实例使用。
options 说明:
1.-s
最重要的是 s,S 是点赞数,例如最权威官方版的有 1923 个点赞数,而别的有零个或者一个,从自己的实用角度而言,肯定随大流用主流的,例如要使用一个点赞数超过 30 的 tomcat,不要将所有的 tomcat 都罗列出来,这个命令非常有用,例如觉得稳不稳,用的越多,大家发现的问题阅读,这个镜像就越稳定,点赞数越多的越受欢迎。
Search 可以看到前一波有这么多
过滤以后只剩下点赞数超过 30 的罗列
2.no-trunc
不省略时,上一次是被省略了,这时说明没有被省略,显示的是完整的占用信息
3.automated
只列出 automated build 类型的镜像,也就是说罗列出 automated ok 的
Search 就是去 hub 上面查找有哪些镜像,还有其他镜像,不多做赘述。假设 Nginx
点赞数超过 9000,换成 search 以后,用 40 命令将 tomcat 换成 Nginx,通过本地去 hub 上查找 Nginx 的镜像,举一反三,其他进校不用多做赘述
三、docker pull
1.下载镜像
把远程的 docker hub 上的镜像下载下来,国外的网站比较慢,改成阿里云。
首先 docker images
当前本机只有 hello world 这一个镜像,现在 docker search-s 30Tomcat。
现在下 name 名字叫做 tomcat,docker pool tomcat,可以看到官方的 tomcat,拉下的命令是 docker pool tomcat, 这个命令直接拷贝,但是注意,如果没有写这个命令等价于 docker pull tomcat, 标签可以省略,如果省略代表拉的是latest最新版,定义一个类,例如 public class book 等价于 public class book extends object,没写版本号,代表下载最新版本,自动添加 latest,如书写的版本号,例如 3.2,那么代表拉的版本就是 tomcat 3.2 版本,不再是最新版,docker pull 连接到阿里云以后特别快,国内访问要比国外的网站快很多,如果不连接到阿里云或者网易云,去连接国外的 docker hub Tomcat 要加载很久。
可能有同学会有疑问,这不是从阿里云去拉镜像吗,镜像是千层饼,一层一层叠在一起的花卷,是分层的,最前面都是 12 位的 ID,最外层暴露的 tomcat 是鸡蛋壳,但是里面也有其他镜像一层一层的叠加优化出来的,再讲 docker 联合文件镜像系统时,还会在深层讲解。
digest 得到最外层的 tomcat,以最外层的为准,下载的镜像是 tomcat latest,仓库名称冒号加 tag 标签,此时查看 docker images
除了 hello world 还拥有新的 tomcat 镜像,这是说明拉某个镜像
四、docker rmi
Remove image 代表删除某个镜像,如果后面没有任何添加代表删除latest,也就是说,如果下了多个 tomcat 没写 latest,随着技术越来越复杂,后面会进行讲解。现在删除 hello world,如果 hello world 有一个版本号是 3.2,如果不写3.2,那删除的是 latest,这个操作细节要明白。
回车看到故意删错,Docker daemon 是宿主机引擎,是后台的线程,处理与docker 的交互主线程,显示 conflict 冲突不能够删除,imageID 就是 hello world,因为后台跑容器正在使用着 hello world,use-f to force 强制删除,导致删不掉的原因是这个,所以最终的结论是除镜像失败,hello world,应该 docker rmi-fhello world 强制删除,镜像是分层的,删除了 hello world 机器里面镜像加标签名,其实删的是两层,说明 CBD 35256 A36 a 里面运转着 1 层,这时就彻底删除了,再来查看一下 docker images,这时 hello 就被删除干净了,Tomcat 是本地的镜像,一个 tomcat 有四百多兆,一般情况下,tomcat 不会这么大
2.删除单个
刚才演示过删除 hello world,加镜像 ID 和唯一镜像名都可以
3.删除多个
首先 docker pull hello world,在 docker images,此时已经把本机删掉的 hello world 又从阿里云拉到本地,又有了一个新的镜像,然后 docker pull Nginx,Nginx 下载完成 images
此时本机有 nginx 镜像,Hello,world 镜像,tomcat 等多个镜像,刚才可以删除单个一个一个的删,如果想要删除多个就可以选择 docker rmi-f hello world Nginx
这是 hello world 和 Nginx 删除成功,回到命令只剩 tomcat 镜像,删除的个中间引一个空格分割,具体删几个就写几个。
4.删除全部
删除全部与多个是两回事,多个是定点清除,刚才只清楚了 hello world 和 nginx两个镜像,docker rmi-f 是强制删除,如果不想写那么多,或者想清库清盘,将本机镜像库全部删除干净,最痛快的删除方式向买 SQL 数据库 Delete 某张表whereID in(ID1,ID2,ID3),这样删除传入哪些 ID 就删除哪些 ID,此时这要用一个组合命令,docker images-q 指罗列出当前镜像的 image ID,docker rmi-f$(docker images-qa),类似于 JAVA 表的引用,是子命令获得值,Q 是查询出当前本机容器库的 Image ID,再加 a 代表过往的和现在的全部 ID,查出来的数据传给 rmi,这就代表了全面的批量删除,用 QA 或者 q 完成这项。
5.思考
理解了 git 相关的知识,结合 git 的学习心得,既然有 pull 那么会不会有 pull 十,既然有 docker image,会不会有 docker commit,是有的。