Docker 镜像命令 | 学习笔记

简介: 快速学习 Docker 镜像命令

开发者学堂课程【Docker 快速入门:Docker 镜像命令】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/616/detail/9396


Docker 镜像命令

内容介绍

一、docker images

二、docker Search 某个镜像的名字

 

一、 docker images

前面完成了 docker 常用命令的帮助命令部分,接下来进行镜像命令的相关讲解。

镜像相当于类,一个镜像可以生成多个容器实例,现在的模型是鲸鱼背上有集装箱,换句话讲鲸鱼游在蓝色的大海里,蓝色的大海相当于宿主机系统 Windows 10,宿主机上装了 docker,这时鲸鱼就是 docker,上面一个一个的集装箱就是容器实例,容器实例来自于镜像模板。

列出本地主机上的镜像,注意这里的运行的镜像是本机的,不是远程仓库的,现在看一下演示的命令效果

image.png

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

image.png

为什么 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 镜像,这是直接粘贴

image.png

与上面对比,多了一个 hello world 的说明,这时如果有其他镜像,例如现在下载了其他的镜像 Tomcat,说明丰富就会多一些,有点类似于备注。

5.no-trunc 显示完整的镜像信息

是对镜像信息完整性的说明

image.png

现在镜像没有截取了,前面就像 ID 直到 85,12 位左右,如果想要看完整ID不要节选,ID 查看的就更加详细了

在 docker image 里面主要是 q 和 a 两个比较常见,表头信息已经讲解完毕,还有一个关键属性就是大小,稍后会讲解,看一下他究竟是多大。

docker images 罗列出本机宿主机上本地的镜像以及相关的信息

 

二、docker Search 某个镜像的名字

Search 是去 docker hub 上面去查询和查找,这时可能部分同学会觉得奇怪,不是已经配成阿里云了吗,注意阿里云更多的是查是查找 docker,下载的时候是从阿里云下,这时可以看 docker hub,假如现在要 docker search 某个镜像的名字,Docker search tomcat.

image.png

这是查找,说明他从 get hub 上面查出了 tomcat 镜像,Get hub 上面存放了 get 库包的那些代码,全球的爱好者都像 get hub 上面传,Docker hub 就像 get hub一样,就是一个一个的镜像文件,再次强调,仓库是存放镜像的地方,这时可以看到,如果用 tomcat 搜索,

image.png

可以查看到 Official 官方版,名字是 tomcat,这个 tomcat 就是 official 的tomcat,因为 1900 个 stars,Stars 相当于 get hub 上的星,换句话讲就是点赞数。

先去 dockerhub 上面 search tomcat 镜像,查找到了,并且不止一个,为了避免大家都叫做 tomcat,唯一权威的 official 是官方版,automated 是自动组建的意思,Apache Tomcat 是一个开发源,这里是一些说明,Docker search tomcat 命令 name Tomcat 的出现就是在 Offical

image.png

从 tomcat 七到 tomcat 九都有,命令 Docker pull command,相当于像镜像库拉下来,这就是 docker search,这个很简单,需要命令 docker 操作什么,先去下载相应的镜像,然后用容器或者实例使用。

options 说明:

1.-s

最重要的是 s,S 是点赞数,例如最权威官方版的有 1923 个点赞数,而别的有零个或者一个,从自己的实用角度而言,肯定随大流用主流的,例如要使用一个点赞数超过 30 的 tomcat,不要将所有的 tomcat 都罗列出来,这个命令非常有用,例如觉得稳不稳,用的越多,大家发现的问题阅读,这个镜像就越稳定,点赞数越多的越受欢迎。

image.png

Search 可以看到前一波有这么多

image.png

过滤以后只剩下点赞数超过 30 的罗列

2.no-trunc

不省略时,上一次是被省略了,这时说明没有被省略,显示的是完整的占用信息

image.png

3.automated

只列出 automated build 类型的镜像,也就是说罗列出 automated ok 的

Search 就是去 hub 上面查找有哪些镜像,还有其他镜像,不多做赘述。假设 Nginx

image.png

点赞数超过 9000,换成 search 以后,用 40 命令将 tomcat 换成 Nginx,通过本地去 hub 上查找 Nginx 的镜像,举一反三,其他进校不用多做赘述

 

三、docker pull

1.下载镜像

把远程的 docker hub 上的镜像下载下来,国外的网站比较慢,改成阿里云。

首先 docker images

image.png

当前本机只有 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 要加载很久。

image.png

可能有同学会有疑问,这不是从阿里云去拉镜像吗,镜像是千层饼,一层一层叠在一起的花卷,是分层的,最前面都是 12 位的 ID,最外层暴露的 tomcat 是鸡蛋壳,但是里面也有其他镜像一层一层的叠加优化出来的,再讲 docker 联合文件镜像系统时,还会在深层讲解。

digest 得到最外层的 tomcat,以最外层的为准,下载的镜像是 tomcat latest,仓库名称冒号加 tag 标签,此时查看 docker images

image.png

除了 hello world 还拥有新的 tomcat 镜像,这是说明拉某个镜像


四、docker rmi

Remove image 代表删除某个镜像,如果后面没有任何添加代表删除latest,也就是说,如果下了多个 tomcat 没写 latest,随着技术越来越复杂,后面会进行讲解。现在删除 hello world,如果 hello world 有一个版本号是 3.2,如果不写3.2,那删除的是 latest,这个操作细节要明白。

image.png

回车看到故意删错,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

image.png

此时本机有 nginx 镜像,Hello,world 镜像,tomcat 等多个镜像,刚才可以删除单个一个一个的删,如果想要删除多个就可以选择 docker rmi-f hello world Nginx

image.png

这是 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,是有的。

相关文章
|
18天前
|
安全 Docker 容器
|
5天前
|
Java 应用服务中间件 Linux
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
本文主要讲解了Docker的安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库以及Docker容器虚拟化与传统虚拟机比较。
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
|
5天前
|
缓存 Linux 网络安全
docker的镜像无法下载如何解决?
【10月更文挑战第31天】docker的镜像无法下载如何解决?
150 28
|
17天前
|
存储 监控 安全
|
18天前
|
缓存 监控 持续交付
|
1天前
|
存储 关系型数据库 Linux
【赵渝强老师】什么是Docker的镜像
Docker镜像是一个只读模板,包含应用程序及其运行所需的依赖环境。镜像采用分层文件系统,每次修改都会以读写层形式添加到原只读模板上。内核bootfs用于加载Linux内核,根镜像相当于操作系统,上方为应用层。镜像在物理存储上是一系列文件的集合,默认存储路径为“/var/lib/docker”。
|
7天前
|
存储 监控 Linux
docker构建镜像详解!!!
本文回顾了Docker的基本命令和管理技巧,包括容器和镜像的增删改查操作,容器的生命周期管理,以及如何通过端口映射和数据卷实现容器与宿主机之间的网络通信和数据持久化。文章还详细介绍了如何使用Docker部署一个简单的Web应用,并通过数据卷映射实现配置文件和日志的管理。最后,文章总结了如何制作自定义镜像,包括Nginx、Python3和CentOS镜像,以及如何制作私有云盘镜像。
64 2
|
8天前
|
关系型数据库 MySQL Docker
docker环境下mysql镜像启动后权限更改问题的解决
在Docker环境下运行MySQL容器时,权限问题是一个常见的困扰。通过正确设置目录和文件的权限,可以确保MySQL容器顺利启动并正常运行。本文提供了多种解决方案,包括在主机上设置正确的权限、使用Dockerfile和Docker Compose进行配置、在容器启动后手动更改权限以及使用 `init`脚本自动更改权限。根据实际情况选择合适的方法,可以有效解决MySQL容器启动后的权限问题。希望本文对您在Docker环境下运行MySQL容器有所帮助。
17 1
|
9天前
|
存储 Java 开发者
成功优化!Java 基础 Docker 镜像从 674MB 缩减到 58MB 的经验分享
本文分享了如何通过 jlink 和 jdeps 工具将 Java 基础 Docker 镜像从 674MB 优化至 58MB 的经验。首先介绍了选择合适的基础镜像的重要性,然后详细讲解了使用 jlink 构建自定义 JRE 镜像的方法,并通过 jdeps 自动化模块依赖分析,最终实现了镜像的大幅缩减。此外,文章还提供了实用的 .dockerignore 文件技巧和选择安全、兼容的基础镜像的建议,帮助开发者提升镜像优化的效果。
|
14天前
|
存储 缓存 Java
Java应用瘦身记:Docker镜像从674MB优化至58MB的实践指南
【10月更文挑战第22天】 在容器化时代,Docker镜像的大小直接影响到应用的部署速度和运行效率。一个轻量级的Docker镜像可以减少存储成本、加快启动时间,并提高资源利用率。本文将分享如何将一个Java基础Docker镜像从674MB缩减到58MB的实践经验。
27 1
下一篇
无影云桌面