下图是Docker容器的结构,从下到上分别是:
Infrastructure(基础设施),它可以是个人电脑、数据中心的服务器或者云主机;
Host Operating System(主机操作系统),所有主流的Linux发行版都可以运行Docker。对于MacOS和Windows,也有一些办法"运行"Docker;
Docker Daemon(Docker守护进程),Docker守护进程取代了Hypervisor,它是运行在操作系统之上的后台进程,负责管理Docker容器;
BINS/LIBS是各种依赖。对于Docker,应用的所有依赖都打包在Docker镜像中,Docker容器是基于Docker镜像创建的;
APP是应用。应用的源代码与它的依赖都打包在Docker镜像中,不同的应用需要不同的Docker镜像。不同的应用运行在不同的Docker容器中,它们是相互隔离的。
相同点:Docker容器技术和虚拟机技术都是虚拟化技术
不同点:
1.启动时间:Docker容器秒级启动,虚拟机分钟级启动;
2.占用空间:Docker容器镜像大小通常以M为单位,虚拟机以G为单位;
3.性能:Docker容器共享宿主机内核,系统级虚拟化,占用资源少,没有Hypervisor层开销,性能基本接近物理机。虚拟机需要Hypervisor层支持,虚拟化一些设备,具有完整的GuestOS,需要申请大量的资源,虚拟化开销大,因而降低性能,没有容器性能好;
4.安全性:Docker容器由于共享宿主机内核,只是进程级隔离,因此隔离性和稳定性不如虚拟机,Docker容器具有一定权限访问宿主机内核,存在一定安全隐患;
5.使用要求:虚拟机基于硬件的虚拟化,需要硬件CPU虚拟化技术支持。Docker容器共享宿主机内核,可运行在主流的Linux发行版,不用考虑CPU是否支持虚拟化技术。
Docker容器(一)——Docker的介绍与部署
7. Docker中Client 和 Server 以及 Registry
Docker 使用客户端/服务器(Client/Server)架构。Docker客户端与 Docker守护进程对话,后者负责构建、运行和分发 Docker 容器的繁重工作。Docker 客户端和守护程序可以 在同一系统上运行,或者您可以将 Docker 客户端连接到远程 Docker 守护程序。Docker 客户端和守护进程使用 REST API、UNIX 套接字或网络接口进行通信。另一个 Docker 客户端是 Docker Compose,它允许您使用由一组容器组成的应用程序。
Docker 守护进程
Docker 守护进程 ( dockerd) 侦听 Docker API 请求并管理 Docker 对象,例如图像、容器、网络和卷。守护进程还可以与其他守护进程通信以管理 Docker 服务。
Docker 客户端
Docker 客户端 ( docker) 是许多 Docker 用户与 Docker 交互的主要方式。当您使用诸如 之类的命令时docker run,客户端会将这些命令发送到dockerd,从而执行它们。该docker命令使用 Docker API。Docker 客户端可以与多个守护进程通信。
Docker 注册表
Docker注册表存储 Docker 镜像。Docker Hub 是一个任何人都可以使用的公共注册中心,Docker 默认配置为在 Docker Hub 上查找镜像。您甚至可以运行自己的私有注册表。
当您使用docker pull或docker run命令时,所需的映像将从您配置的注册表中提取。当您使用该docker push命令时,您的映像会被推送到您配置的注册表中。
Docker 对象
Image镜像
Image镜像是只读的模板用来创建Container容器,通常情况下 一个镜像是基于另一个镜像,再加一些额外的自定义配置。例如:可以建一个基于ubuntu 的镜像,然后安装Apache 的服务器和你的应用,同时对一些细节进行配置让镜像到处运行。
Container容器
一个容器是镜像的可运行实例,可以使用Docker API或者CLI 创建,开始,停止,移除容器。可以将容器连接到一个或多个网络,为其附加存储,甚至可以根据其当前状态创建新映像。
默认情况下,容器与其他容器及其主机相对隔离。您可以控制容器的网络、存储或其他底层子系统与其他容器或主机之间的隔离程度。
容器由其映像以及在创建或启动它时提供给它的任何配置选项。 当容器被移除时,未存储在持久存储中的任何更改都会消失。
八、虚拟机的两套体系,Docker 与CentOs 与 Vagrant的区别
一种,使用 Vagrant + VirtualBox 快速构建 CentOS 下的 Docker 环境
二种,使用Vmware实现
九、Image镜像是如何实现的?
Docker镜像是通过DockerFile文件
十、将自定义镜像传到仓库
十一、Docker中的网络模型