首先我们得先区分清楚两个概念,容器和虚拟机。
我们用的传统虚拟机如 VMware
, VisualBox
之类的需要模拟整台机器包括硬件,每台虚拟机都需要有自己的操作系统,虚拟机一旦被开启,预分配给它的资源将全部被占用。每一台虚拟机包括应用,必要的二进制和库,以及一个完整的用户操作系统。
而容器技术是和我们的宿主机共享硬件资源及操作系统,可以实现资源的动态分配。容器包含应用和其所有的依赖包,但是与其他容器共享内核。容器在宿主机操作系统中,在用户空间以分离的进程运行。
容器技术是实现操作系统虚拟化的一种途径,可以让您在资源受到隔离的进程中运行应用程序及其依赖关系。通过使用容器,我们可以轻松打包应用程序的代码、配置和依赖关系,将其变成容易使用的构建块,从而实现环境一致性、运营效率、开发人员生产力和版本控制等诸多目标。容器可以帮助保证应用程序快速、可靠、一致地部署,其间不受部署环境的影响。容器还赋予我们对资源更多的精细化控制能力,让我们的基础设施效率更高。
容器是用镜像创建的运行实例。
它可以启动,开始,停止,删除。
每一个容器之间相互隔离,保证安全的平台。
可以把容器看作是一个简易版的Linux环境和运行在其中的应用程序。
仓库和仓库注册服务器是有区别的。仓库注册服务器上存放着大量的仓库,每个仓库中又包含了多个镜像。
Docker本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就似乎是image镜像文件。
只有通过这个镜像文件才能生成docker容器。
image文件可以看作是容器的模板。
docker根据image文件生成容器的实例。
同一个image文件,可以生成多个同时运行的容器实例
image文件生成容器实例,本身是一个文件,成为镜像文件
一个容器运行一种服务,当我们需要时,可以通过docker客户端创建一个对应的运行实例,也就是我们的容器
仓库,就是存储镜像的场所,我们可以把镜像发布到仓库,也可以从仓库拉取镜像。
docker有着比虚拟机更少的抽象层。不需要Hypervisor实现硬件资源,运行docker容器上的程序直接使用的都是实际物理机上的硬件资源。
docker利用的是宿主机的内核,而不需要GuestOS。利用宿主机的操作系统,存储方面:镜像小,便于存储与运输。
运行功能:几乎无额外性能损失,启动快速属于秒级别。
储方面:镜像小,便于存储与运输。
运行功能:几乎无额外性能损失,启动快速属于秒级别。
移植性:轻便,灵活,面向软件开发者。