初识Docker与容器
1、什么是Docker
Docker是基于Go语言实现的开源容器项目。Docker是为解决了运行环境和配置问题的软件容器,方便做持续集成并有助与整体发布的容器虚拟化技术。通过镜像(images)将作业系统核心除外,运作应用程式所需要的系统环境,由下而上打包,达到应用程式跨平台间的无缝接轨运作。
Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次镜像,处处运行”。将应用打成镜像,通过镜像成为运行在Docker容器上面的实例,而 Docker容器在任何操作系统上都是一致的,这就实现了跨平台。
官网:https://www.docker.com/
仓库:https://hub.docker.com/
Docker架构
Docker使用客户端-服务器架构。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 registries
Docker注册表存储Docker镜像。Docker Hub是一个任何人都可以使用的公共注册表,默认情况下Docker会在Docker Hub上查找图像。您甚至可以运行自己的私人注册表。
-
镜像
镜像是一个只读模板,带有创建Docker容器的说明。通常,一个映像基于另一个映像,并进行一些额外的定制。
-
容器
容器是镜像的可运行实例。您可以使用Docker API或CLI创建、启动、停止、移动或删除容器。您可以将容器连接到一个或多个网络,将存储附加到其上,甚至可以根据其当前状态创建新映像。默认情况下,容器相与其他容器及其主机隔离。您可以控制容器的网络、存储或其他底层子系统与其他容器或主机的隔离程度。
-
底层隔离原理
Docker使用名为名称空间的技术来提供称为容器的隔离工作空间。当你运行一个容器时,Docker会为这个容器创建一组命名空间。
这些名称空间提供了一层隔离。容器的每个方面都在单独的名称空间中运行,其访问仅限于该名称空间。
2、为什么使用Docker
Docker容器虚拟化的好处
-
更快速的交付和部署
开发人员可以使用镜像来快速构建一套标准的开发环境;开发完成之后, 测试和运维人员可以直接使用完全相同的环境来部署代码。 只要是开发测试过的代码, 就可以确保在生产环境无缝运行。 Docker 可以快速创建和删除容器, 实现快速迭代, 节约开发、 测试、 部署的大量时间。
-
更高效的资源利用
运行Docker 容器不需要额外的虚拟化管理程序(Virtual MachineManager) 的支持,需要从硬件层面实现虚拟化。 Docker 是内核级的虚拟化, 可以直接复用本地主机的操作系统实现更高的性能, 同时对资源的额外需求很低。与传统虚拟机方式相比, Docker 的性能要提高1~2 个数量级。
-
更轻松的迁移和扩展
Docker 容器几乎可以在任意的平台上运行,支持主流的操作系统发行版本。
-
更简单的更新管理
使用Dockerfile, 只需要小小的配置修改, 就可以替代以往大量的更新工作。所有修改都以增量的方式被分发和更新, 从而实现自动化并且高效的容器管理。
Docker与虚拟机比较
传统方式是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统层。
Docker容器是在操作系统层面上实现虚拟化直接复用本地主机的操作系统,因此更加轻量级。
每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。
对比如下:
- Docker 容器很快, 启动和停止可以在秒级实现, 这相比传统的虚拟机方式(数分钟)要快得多;
- Docker 容器对系统资源需求很少, 一台主机上可以同时运行数于个Docker 容器;
- Docker 通过类似Git设计理念的操作来方便用户获取、分发和更新应用镜像, 存储复用, 增量更新;
- Docker 通过Dockerfile 支持灵活的自动化创建和部署机制, 以提高工作效率, 并标准化流程。
特性 | docker | 虚拟机 |
---|---|---|
启动速度 | 秒级 | 分钟级 |
内存代价 | 很小 | 较多 |
硬盘使用 | 一般为 MB | 一般为 GB |
性能 | 接近原生 | 弱于 |
系统支持量/运行密度 | 单机支持上千个容器 | 一般几十个 |
隔离性 | 安全隔离 | 完全隔离 |
迁移性 | 优秀 | 一般 |
Docker为什么快
-
docker有着比虚拟机更少的抽象层
由于docker不需要Hypervisor(虚拟机)实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。
-
docker利用的是宿主机的内核,而不需要加载操作系统OS内核
当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。进而避免引寻、加载操作系统内核返回等比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载OS,返回新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了返回过程,因此新建一个docker容器只需要几秒钟。