今天让我们来讲一下Docker的镜像,首先我们先了解一些概念
容器和镜像
如果曾经做过 VM 管理员,可以把 Docker 镜像理解为 VM 模板,而运行的VM就是容器 如果你是名研发人员,则可以将镜像理解为类(Class),而容器就是对象 用一句话来说镜像是容器的模板,容器是镜像的运行实例
镜像仓库服务
Docker 镜像存储在镜像仓库服务(Image Registry)当中。用户可以从Registry进行镜像下载和访问,可分为公有和私有两类Registry。
公有镜像仓库: Docker Hub是Docker公司为公众提供的托管Registry。 Quay.io现为Red Hat下的公共托管Registry。
私有镜像仓库: 企业可以用Docker Registry构建私有的Registry。 Registry本身是一个开源项目,可以用于搭建私有Registry。
最常用的公用镜像仓库就是Docker Hub,Docker Hub是目前世界上最大的容器镜像仓库,由Docker公司维护,里面有Docker公司提供的镜像及大量用户上传的镜像。以下是它的地址 https://hub.docker.com/
Docker Hub的优点: 为开发者提供了海量Docker镜像,供免费下载学习和使用; 拥有完善的账户管理系统,为用户提供付费扩容; 服务器采用分布式部署,支持负载均衡; 支持镜像上传、下载、查询、删除及属性设置等多种操作; 支持在线编译镜像; 后端采用分布式存储,可容灾备份; 其核心是Docker distribution,在开源社区上设计维护,会不断更新和完善; 提供企业版Docker Hub,为企业级用户提供一站式解决方案。
镜像和分层
所有的 Docker 镜像都起始于一个基础镜像层,当进行修改或增加新的内容时,就会在当前镜像层之上,创建新的镜像层。最常用的base镜像是各Linux发行版的Docker镜像,如ubuntu、centos等。
举一个简单的例子,假如基于 Ubuntu Linux 16.04 创建一个新的镜像,这就是新镜像的第一层;如果在该镜像中添加 Python 包,就会在基础镜像层之上创建第二个镜像层;如果继续添加一个安全补丁,就会创建第三个镜像层。
该镜像当前已经包含 3 个镜像层,如下图所示(这只是一个用于演示的很简单的例子)。
所以,Docker 镜像由一些松耦合的只读镜像层组成。Docker 负责堆叠这些镜像层,并且将它们表示为单个统一的对象。 并且多个镜像之间可以共享镜像层,这样还可以有效节省空间并提升性能。
常用的镜像操作
拉取镜像: 从官方仓库拉取镜像时,docker image pull 命令的格式如下: docker image pull <repository>:<tag>
示例:让我们拉取一个ubuntu吧
列出镜像: docker images [OPTIONS] [REPOSITORY] 示例:
查看镜像的详细信息: docker inspect [OPTION] CONTAINER|IMAGE [CONTAINER|IMAGE...]
查找镜像:
你想知道有哪些镜像,docker search命令楞以帮助我们搜索Docker Hub,以下示例 docker search [image_name][:tag]
删除镜像: docker rmi [OPTIONS] IMAGE [IMAGES...]
|