一、基础概念
镜像(Image):Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。
镜像仓库(Registry):Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。
有时候使用Docker Hub这样的公共仓库可能不方便,这种情况下用户可以使用registry创建一个本地仓库供私人使用,这点跟Maven的管理类似。
容器(Container):容器是独立运行的一个或一组应用,是镜像运行时的实体。
Docker 主机(Host):一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
Docker 客户端(Client):Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。
数据卷(Volume):卷是容器上的一个或多个目录(即:多个卷),此类目录可绕过联合文件系统,与宿主机上的某目录绑定(即关联)
Docker Machine:Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。
结构图
二、状态
三、底层核心
namespace
命名空间(namespaces)是 Linux 为我们提供的用于分离进程树、网络接口、挂载点以及进程间通信等资源的方法。
CGroups(control groups)
UnionFS(union file system)
UnionFS 其实是一种为 Linux 操作系统设计的用于把多个文件系统『联合』到同一个挂载点的文件系统服务。
AUFS 即 Advanced UnionFS 其实就是 UnionFS 的升级版,它能够提供更优秀的性能和效率。
Docker 镜像其实本质就是一个压缩包文件。镜像文件的分层文件系统。
Docker镜像采用分层构建的机制,最底层为bootfs,其上为rootfs.
bootfs: 用于系统引导文件系统,包括bootloader和kernel,容器启动完成后,bootfs会被卸载,以节省内存空间.
rootfs: 它在运行中的docker容器中变现为根文件系统.
Docker容器实例:
此镜像显示了Docker的镜像层级,从上到下分别为:
可写层
add Apache 和 add emacs(类似于vim的编辑器): 这两层为自己通过yum安装在镜像中的工具.
Debian: 这是为安装的工具提供的基本的最小安装的根文件系统已共Apache能运行起来.这里使用的是Debian.还可以使用CentOS等.
bootfs: 这一层则是启动Debian这个rootfs所需的bootloader和kernel,通常在将Debian启动起来后,它将自动被卸载.
四、隔离机制
进程隔离(namespaces)
网络隔离(namespaces)
文件系统隔离(挂载)(namespaces)
物理资源隔离(例如 CPU、内存、磁盘 I/O 和网络带宽。)(CGroup)