Docker学习之 名词解释
Docker 是一个开源的商业产品,有两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。企业版包含了一些收费服务,个人开发者一般用不到。下面的介绍都针对社区版。
image文件:镜像
Docker 把应用程序及其依赖,打包在 image 文件里面。只有通过这个文件,才能生成 Docker 容器。
image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,
可以生成多个同时运行的容器实例。
image 是二进制文件。实际开发中,一个 image 文件往往通过继承另一个 image 文件,加上一些个性化
设置而生成。举例来说,你可以在 Ubuntu 的 image 基础上,往里面加入 Apache 服务器,形成你的 image。
# 列出本机的所有 image 文件。
docker images
# 或者 docker image ls
# 删除 image 文件
docker rmi [imageID/imageName]
# 或者 docker image rm [imageID/imageName]
image 文件是通用的,一台机器的 image 文件拷贝到另一台机器,照样可以使用。一般来说,为了节省时间,
我们应该尽量使用别人制作好的 image 文件,而不是自己制作。即使要定制,也应该基于别人的 image 文件
进行加工,而不是从零开始制作。
容器文件 Container
image 文件生成的容器实例,本身也是一个文件,称为容器文件。也就是说,一旦容器生成,就会同时
存在两个文件: image 文件和容器文件。而且关闭容器并不会删除容器文件,只是容器停止运行而已。
# 列出本机正在运行的容器
docker ps
# 或者 docker container ls
# 列出本机所有容器,包括终止运行的容器
docker ps -a
# 或者 docker container ls --all
# 终止容器
docker kill [containerID]
# 停止容器
docker stop [containerID]
# 删除容器
docker rm [containerID]
层级 Layer - Image
Docker 镜像是由多个文件系统(只读层)叠加而成, 每个层仅包含了前一层的差异部分。
当我们启动一个容器的时候,Docker 会加载镜像层并在其上添加一个可写层。容器上所做的任何更改,
譬如新建文件、更改文件、删除文件,都将记录与可写层上。
层级 Layer - Container
容器与镜像最大的区别就在于可写层上。如果运行中的容器修改了现有的一个已存在的文件,那该文件将会从可写
层下的只读层复制到可写层,该文件的只读版本仍然存在,只是已经被可写层中该文件的副本所隐藏。
其中,多个容器共享镜像的结构如下所示。
Docker的storage driver负责管理只读的镜像层和可写的容器层,当然不同的driver实现的方式也不同,
但其后都有两项关键技术:可堆叠的镜像层(stackable image layer)和写时拷贝技术(copy-on-write, CoW)。
Docker 数据持久化 - data volume
Data volume就是我们将主机的某个目录挂载到容器里面,这个data volume不受storage driver的控制,
所有对这个data volume的操作会绕过storage driver直接其操作,其性能也只受本地主机的限制。
而且我们可以挂载任意多个data volume到容器中,不同容器也可以共享同一个data volume。
下图展示了一个Docker主机上面运行着两个容器.每一个容器在主机上面都有着自己的地址空间
(/var/lib/docker/...),除此以外,它们还共享着主机上面的同一个/data目录。