kernel
通过创建多个镜像来隔离不同的app进程,由于kernel
是共享,而且本身linux image
也不大,性能损耗几乎可以不计,而且内存占用也不大,大大节约了设备成本。VMs
提供的环境比大多数应用程序所需的资源要多。Docker客户端,以docker二进制的形式出现,是Docker最基本的用户接口。他接收来自用户的命令,然后和Docker守护进程来回沟通。用户通过docker client
向docker daemon
发送REST请求。
Docker daemon 是服务器组件,正如上面的图片显示,Docker守护进程运行在一个主机机器中。用户不直接和守护进程交互,而是通过Docker客户端
Docker运行容器前需要本地存在对应的镜像。镜像可以用来创建Docker容器的。一个镜像可以包含一个完整的操作系统环境和用户需要的其它应用程序。在docker hub
里面有大量现成的镜像提供下载。docker的镜像是只可读的,一个镜像可以创建多个容器。如同在电脑上安装系统镜像文件。
docker利用容器来开发、运行应用。容器是镜像创建的实例。它可以被启动、开始、停止、删除。每个容器都是 相互隔离的、保证安全的平台。类似安装系统的电脑实体。
仓库是集中存放镜像文件的场所。每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。最大的公开仓库是DockerHub,存放了数量庞大的镜像供用户下载。国内的公开 仓库包括DockerPool等,可以提供大陆用户更稳定快速的访问。当然,用户也可以在本地网络内创建一个私有仓库,类似应用市场。
Docker Machine是一种工具,可以让您在虚拟主机上安装Docker引擎,并使用Docker - Machine
命令来管理主机。您可以使用Machine在您的本地Mac或Windows框上创建Docker主机,或者在您的公司网络上,在您的数据中心,或在云提供商,如Azure, AWS,或Digital Ocean。
使用Docker -machine
命令,您可以启动、检查、停止和重新启动托管主机、升级Docker客户机和守护进程,并配置一个Docker客户端与您的主机进行对话。
将机器CLI指向正在运行的托管主机,您可以直接在该主机上运行docker命令。例如,运行docker-machine env默认指向一个名为default的主机,按照屏幕上的指示完成env设置,并运行docker ps、docker
运行hello-world
,等等。
Docker Engine运行在本地linux系统上。如果你当前的系统是Linux,想在上边运行docker 命令,你只需要下载和安装Docker Egine就完了。然而,如果你想在网络上,云平台上,以及本地创建Docker host,你就需要Docker Machine,所以Docker解决的是跨平台问题。
无论是Mac,Windows或是Linux,你都可以在其上安装Docker Machine,使用docker-machine命令来创建和管理大量的Docker hosts。它会自动创建主机,在主机上安装Docker Engine,然后配置docker client。每个被管理的主机(“machine”)都是一个Docker 主机和一个配置过的client的组合。
官方给的Docker Machine的具体使用场景:
Docker Engine 主要用来接收和处理docker命令请求的。
Docker Machine则主要用来管理 docker化的 host (安装了Docker Engine的主机)。
当人们说Docker
时,他们通常指的是Docker
引擎,由Docker守护程序组成的客户机-服务器应用程序,这个REST API指定了与守护进程交互的接口,以及与守护进程对话的命令行接口(CLI)客户端(通过REST API包装器)。Docker引擎接受来自CLI的Docker命令,比如Docker run <image>, Docker ps
列表运行容器,Docker image ls
列表图像,等等。
通常,你都是在本地安装Docker Machine。Docker Machine包含自己的命令行客户端:docker-machine
以及Docker Engine
的客户端:docker。你可以使用Machine在一个或多个虚拟机上安装Docker Engine。这些虚拟机可以是在本地(当你使用Machine在VirtualBox安装和运行Docker Engine时),也可以是远程的(使用Machine在云平台上创建Docker化的主机时)。这些虚拟化的主机可以被认为是“machine”。
Docker Compose是定义和运行多容器Docker应用程序的工具。通过compose您可以使用YAML文件来配置应用程序的服务。然后,使用单个命令创建并启动配置中的所有服务。