上一篇主要记录关于容器技术解决的根本性问题,docker的基本构成、工作流程、安装和基本配置。这一篇将正式进入docker技术篇。Docker应用的三大组件儿仓库(repository)用于存储、镜像(image)用于构建容器、容器(container)用于承载服务以及应用。
容器即运行时的镜像。镜像好比代码中的class,而容器就相当于instance类的实例对象。
镜像好比系统的抽象,容器相当于应用。
镜像分层有layer的概念,l容器没有。容器之间完全隔离,哪怕使用同一个镜像构建多个容器,它们之间也是隔离的。
镜像的分层
镜像的构成,由一个或多个镜像层构成,每一层称为一个Layer,由下至上堆叠而成,最底层是基础镜像。比如一个Java容器化应用,它的构成最底层是系统CentOS或Ubuntu镜像,往上一层是Java环境JDK镜像,顶层是Java应用,最终构建出Java应用镜像。
镜像的覆盖,当一个镜像多个Layer之间使用同一个镜像层时,上层会覆盖下层。
镜像层共享,拉取镜像,当上层的镜像层已经存在,不会重复拉取远程镜像直接复用。
命名规范:${registry-host}/${namespace}/${image-name}:${tag}
registry-host:默认值docker.io使用Dockerhub存储,支持隐式声明。使用阿里云镜像仓库服务,需要显式声明阿里云镜像仓库服务的host,如registry.cn-hangzhou.aliyuncs.com/angel/tomcat:1.0
namespace:命名空间,也就是告诉镜像仓库服务要存储到什么地方
image-name:镜像名称,自定义镜像名称
tag:镜像标签,默认值为latest,支持自定义镜像标签
指令语法:docker image tag ${current-image-tag}${new-image-tag}
示例:
docker image tag tomcat:7registry.cn-hangzhou.aliyuncs.com/angel/tomcat:1.0
指令语法:docker search ${image-name}
示例:
docker search nginx
过滤搜索:
docker search nginx--filter"is-offical=true" # 过滤docker官方镜像
docker search nginx--filter"is-automated=true"# 过滤自动构建的镜像
docker search nginx--filter"stars=100"# 过滤星数大于等于100的镜像
限制输出数量:
docker search nginx--limit 10 # 输出前10条搜索记录
组合使用:
docker search nginx--filter"stars=100"--limit5 # 过滤星数大于等于100,展示前5条
指令语法:docker image pull ${image-name}# 默认拉取标签为latest,但实际latest标签并不能表示是最新镜像
示例:
docker image pull openjdk:8
指令语法:docker image ls# 默认展示本地非悬虚镜像,没有使用的镜像为悬虚镜像
示例:
docker image ls
查看本地所有镜像,包含悬虚镜像:
docker image ls-a
查看本地镜像ID
docker image ls-q# 默认输出本地非悬虚镜像ID
docker image ls-qa# 输出本地所有镜像ID
过滤本地镜像
docker image ls-a--filter dangling=true# 过滤本地悬虚镜像
docker image ls-qa--filter dangling=true# 过滤本地悬虚镜像ID,批量删除悬虚镜像时有用
指令语法:docker image inspect ${image-name}:${tag}# 默认输出镜像的全部元数据
终端输入命令
[root@VM_0_4_centos~]#docker image inspect openjdk:8
# 下面这一段信息,描述openjdk:8镜像的所有镜像层,每一个哈希值表示一个Layer
"RootFS":{
"Type":"layers",
"Layers":[
"sha256:8c02234b86056c009036ff0c31efb9a726412392d9872dacf95103767ac3b101",
"sha256:7cc1c2d7e744369899e8affd52f9be62076b1ef0205f02ed11547bb5327e5a43",
"sha256:760e8d95cf58e8696de9ba210ef58522750aee7a1f24c15695f493582002c08e",
"sha256:88cfc2fcd059f99b165d045b00500d40892c5afaa7181a95d9936350320c8f9c",
"sha256:155d997ed77ca415391df55e0b61fd4552031f1a1e9615c8bcf9531192ba755c",
"sha256:715d0a3d2cc2b8ae4c24163aa9526f7792fa24dc7a3c2a75e2cc38757c655fe4",
"sha256:7d0784c2c563ae1f1bb86682d8a67fbda71b1d55e5e857d431c091e9622b171e"
]
}
指令语法:docker image rm ${image-name}:${tag}# 可以使用镜像tag,也可以使用镜像ID
示例:
docker image rm tomcat:7
强制删除镜像:
docker image rm-f tocmat:7
批量删除悬虚镜像:
docker image rm $(docker image ls-qa--filter dangling=true)
强制删除所有镜像:
docker image rm-f $(docker image ls-qa)
注意点:
当镜像已经构建过容器且状态为Up或者Exited时,使用普通删除无法删除镜像
不推荐使用强制删除镜像,不友好,也无法给镜像留有清理数据的时间
完