镜像由多个层组成,每层叠加之后,从外部看来就如一个独立的对象,镜像内部是一个精简的OS,同时还包含应用运行所必须的文件和依赖包,因为容器的设计初衷就是快速和小巧,所以镜像通常都比较小。镜像可以理解为一种构建时(build-time)结构,而容器可以理解为是一种运行时(run-time)结构。

   Docker镜像由一些松耦合的只读镜像层组成,采用docker pull imageName:tag ,可以看出以Pull complete结尾的每一行都是一个镜像层。可以采用docker image inspect查看到Layers信息。

  所有的Docker镜像都起始于一个基础镜像层,当进行修改或者增加新的内容时,就会在当前镜像层之上,创建新的镜像层,比如,一个centos:7的镜像,添加了Python包,那么就会在基础镜像层上添加一个镜像层,比如再打了一个安全补丁,又会创建一个新的镜像层。

通常使用docker container run和docker service create命令从某个镜像启动一个或多个容器,一旦容器从镜像启动后,二者之间就有依赖关系,并且在镜像启动的容器全部停止之前,镜像是无法被删除的。

一个完整的镜像名称由三部分组成,比如​​192.168.0.103:500/os/centos:7​​。

  • 第一部分​​192.168.0.103:5000​​​ 这部分表示再那个镜像服务器上,​​192.168.0.103:5000​​​代表私服仓库由ip:端口组成或者域名,搭建 docker 私服在​​【3.2】服务器安装 Docker中 仓库搭建​​中有介绍,默认不写代表的是dockerhub仓库。
  • 第二部分​​os​​​ 代表组织或者用户名。我在dockerhub上名称是514840279,那么我在dockerhub 发布的镜像名称是​​514840279/solr-ik-mysql​​。私服上一般代表功能,比如os(系统),应用(app),私服这部分可以省略。
  • 第三部分是代表的容器的名称加版本。比如​​solr-ik-mysql:1.0,solr-ik-mysql:latest​​ latest 指代最新的版本号,latest 也可以不写。

镜像相关命令

# 查找
docker search centos

# 拉取
docker pull centos

# 修改标签
docker tag centos 192.168.0.105:5000/centos:v7
#docker tag 镜像id 仓库:标签

# 推送
docker push 192.168.0.105:5000/centos:v7

# 导出
docker save -s centos /home/centos.tar

# 删除
docker rmi centos

# 导入
docker load -i /home/centos.tar

# 列出所有镜像
docker image ls

点波关注 系统搭建(docker)