一、Docker Engine
虽然我们说 Docker Engine 是一款软件,但实实在在去深究的话,它其实算是由多个独立软件所组成的软件包。在这些程序中,最核心的就是
docker daemon
和
docker CLI
了。
其中
docker daemon
有
容器管理、应用编排、镜像分发等功能,
docker daemon
通常以服务的形式运行以便静默的提供这些功能,所以我们也通常称之为
Docker 服务
。
同时,docker daemon 对外暴露了
一套 RESTful API,并提供了
docker CLI
工具来调用
RESTful API并提供终端指令。
二、docker daemon 的四个对象
镜像 ( Image )、容器 ( Container )、网络 ( Network )、数据卷 ( Volume )
(1) 镜像 ( Image )
镜像:
虚拟环境运行最原始文件系统的内容。
每次对镜像内容的修改,Docker 都会将这些修改铸造成一个镜像层,而一个镜像其实就是由其下层所有的镜像层所组成的。当然,每一个镜像层单独拿出来,与它之下的镜像层都可以组成一个镜像。
另外,由于这种结构,Docker 的镜像实质上是无法被修改的,因为所有对镜像的修改只会产生新的镜像,而不是更新原有的镜像。
(2) 容器 ( Container )
容器:隔离出来的虚拟环境。
如果把
镜像理解为编程中的类,那么
容器就可以理解为类的实例。
镜像内存放的是不可变化的东西,当以它们为基础的
容器启动后,
容器内也就成为了一个“活”的空间。
(3) 网络 ( Network )
在 Docker 中,实现了强大的网络功能,我们不但能够十分轻松的对每个容器的网络进行配置,还能在容器间建立虚拟网络,将数个容器包裹其中,同时与其他网络环境隔离。
另外,利用一些技术,Docker 能够在容器中营造独立的域名解析环境,这使得我们可以在不修改代码和配置的前提下直接迁移容器,Docker 会为我们完成新环境的网络适配。对于这个功能,我们甚至能够在不同的物理服务器间实现,让处在两台物理机上的两个 Docker 所提供的容器,加入到同一个虚拟网络中,形成完全屏蔽硬件的效果。
正是因为拥有强大的网络功能,才能让我们制造健壮的 Docker 应用体系。
(4) 数据卷 ( Volume )
数据卷:通过从宿主操作系统中挂载目录、建立独立的目录持久、在容器间共享等这几种方式进行数据共享或持久化的文件或目录,我们都称为数据卷 ( Volume )。