笔者在上篇安装docker的笔记中已经演示了如何运行hello-world镜(具体流程:先在本地寻找最新版的hello-world镜像,没有时,从官网拉一个镜像。下载最新的镜像)。在此篇中,笔者将会分享学习Docker的笔记以及归纳。
1. Docker运行的机制和原理
Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上,然后通过Socket连接从客户端访问,守护进程从客户端接收命令并管理运行在主机上的容器。容器是一个运行时的环境。
VM是分钟级启动的,而Docker是秒级启动的。那么为什么它比虚拟机快?
Docker具有着比虚拟机更少的抽象层。由于Docker不需要Hypervisor实现硬件资源虚拟化,运行在Docker容器上的程序直接使用物理机的硬件资源。在CPU使用效率和内存利用率上Docker占据明显优势。
Docker利用的是宿主机的内核,不需要Guest OS。因此,当创建一个新的容器时,不需要像虚拟机一样重新加载一个操作系统内核。Docker直接利用宿主机的操作系统,省略了加载操作系统内核时间,因此新建一个Docker容器的时间是秒级的。
那么Docker容器和虚拟机之间有没有什么具体的区别呢?
2. Docker帮助命令
主要是有三个命令:
docker version
docker info
docker --help
以下是这三个命令的实现。
可以看到info个人信息的描述比version中的内容更加全面,包括容器、镜像、存储驱动位置,所需要内存,宿主机名字等。
这里显示的是运行docker --help指令后所生成的东西。可以看到这里存储着Docker的所有指令并且具有说明,当使用Docker时,需要使用命令便可激活查看相关的命令方式。
3. 镜像命令
3.1 docker images
列出本地(非远程仓库)主机上的镜像
可以看到笔者主机上的镜像只有hello-world一个。它的版本是最新版的,且有一个具体的ID。并且笔者将以上表头进行解释理解:
REPOSITORY:表示镜像的仓库源
TAG:表示镜像的标签
IMAGE ID:表示镜像的ID
CREATED:镜像创建时间
SIZE:镜像大小
同一个仓库源中可以有多个TAG,代表不同版本。可以使用REPOSITORY:TAG来定义不同版本的镜像。
通过-a命令列出本地的所有镜像(含中间映像层)
通过-q命令显示当前所有镜像的ID,在我们需要删除时,可以将这些ID传给删除指令,进行批量删除。
–digists 命令,与上一张图对比,出现DIGEST说明,显示镜像的摘要信息,类似于备注。
–no-truc命令显示完整的镜像信息。这里将输出完整的镜像ID。
3.2 docker search
到docker hub上查找某镜像。
输入命令 docker search ×××便可以找到镜像文件。
例如我们搜索tomcat镜像。
这些都是搜索到的镜像,在Official标签下,显示的是该镜像是否是官方版本。当然也可以到 https://hub.docker.com 官方网站上去搜寻,stars可以理解为点赞数。当要拉下指定的镜像时,可以输入docker pull tomcat指令即可拉下来。
当我们根据点赞数进行搜索时,我们可以使用docker search -s number tomcat来进行搜索,number可以自定义数字,搜索结果输出星级数大于number的镜像。
那么我们可以看到 --stars已被遗弃,被新型的语句所代替。那么我们使用新型语句进行再次执行。
在这里显示出星级数大于70的两个镜像。
–automated命令,只列出自动构建的镜像类型。它将显示AUTOMATED那一栏显示OK的镜像。
笔者下载了tomcat星级最高的一个镜像,并且附上命令。
这里的命令是用了官网上的命令docker pull tomcat并且默认下载最新版,如果要指定版本,则可以用docker pull tomcat : TAG 来下载。 TAG为版本,最新版本则是latest。等待一段时间,将其下载完成。
那么我们再检测一下我们所有的镜像。
此时已经有两个镜像了,说明我们成功将tomcat的最新版本拉下来了。那么,我们现在将hello-world镜像删除。输入命令 docker rmi hello-world。此时,出现了错误。
那么我们要对其强制删除该怎么删呢?
输入命令 docker rmi -f hello-world
我们将hello-world成功删除。
那么如果想删除多个该输入什么命令呢?
输入命令docker rmi -f 镜像名1 镜像名2 即可
如果想删除全部的话,输入命令docker rmi -f ${docker images -q}
(Tips: 如果直接从官网下载会比较慢,建议使用阿里云镜像加速器配置)