认识Docker
-
什么是docker
docker是一个开源的容器引擎,让开发者可以将应用程序连同所依赖的运行环境一并打包到可移植的容器中,进而发布到任何一台Linux服务器上 -
docker的三个组件
docker client:docker客户端,用户界面,支持与docker daemon通讯
docker daemon:docker运行于主机之上,处理docker client的请求
docker index:中央registry,负责镜像文件的备份(包括公有或者私有访问权限) -
docker三要素
container:容器,负责应用程序的运行,包括应用程序运行所需的环境
image:镜像,作为运行容器的模板
dockerfile:文件指令集,用于指示如何创建docker镜像
什么是容器
简单说就是一个标准的软件集合,这个集合包含所有可以使得应用可以快速且稳定地从一个环境到另一个环境运行(从开发环境到生产环境)所需要的代码和各种依赖,docker容器镜像是一个轻量、独立且可执行的软件包,这个软件包包含应用运行所有东西,比如代码、应用运行环境、系统工具、系统库以及相关设置。当在Docker Engine上运行时,可以通过镜像生成容器,可以通过一个镜像生成多个容器
容器化 vs 虚拟化
容器和虚拟机在资源隔离和分配方面具有相似的优势,但功能是不尽相同的,因为容器虚拟化是在操作系统层面进行的,而不是像虚拟机是在硬件层面上进行的,因此容器相较虚拟机而言会更加合适和高效,架构对比图:
上图(图片来自docker官网)可以看到,
- 容器化(左图)是建立在操作系统之上,多个不同的应用分别部署到不同的容器中,每个容器独立运行,相互隔离,所有容器运行由相同的操作系统统一管理,启动一个应用只需要启动一个进程就可以,大大提高启动效率
- 虚拟化(右图)可以说是直接建立在硬件资源之上,图中的Hypervisor是虚拟化技术的核心,它的基本功能就是非中断地支持多工作负载迁移。当服务器启动并执行Hypervisor时,它会给每一台虚拟机分配适量的内存、CPU、网络和磁盘,并加载所有虚拟机的客户操作系统,也就是说每一台虚拟机是需要有独立的操作系统,然后才能在其上部署各种应用
Why docker?
- 更高效的的利用系统资源。因为容器技术不需要对操作系统乃至硬件进行虚拟化,所以Docker对资源的利用率更高
- 更快速的启动时间。相比于虚拟机而言,容器启动可以在几秒内实现,因为传统虚拟化启动一个应用服务,需要加载完整的操作系统,而这一过程会消耗大量时间
- 一致的运行环境。Docker会提供除内核外的完整运行环境,这样就保证了应用各个开发阶段的所有运行环境的一致性
- 持续交付和部署。使用Docker可以通过定制应用镜像来实现持续集成、持续交付、部署。
- 更易迁移。正是由于Docker确保了执行环境得一致性,使得应用的迁移更加容易。
- 更容易维护和扩展。Docker使应用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变的非常简单
容器与虚拟机优势对比
特性 | 容器 | 虚拟机 |
---|---|---|
启动速度 | 秒级 | 分钟级 |
镜像大小 | 以MB为单位 | 多以GB为单位 |
性能 | 接近原生 | 弱于容器技术 |
系统支持数量 | 单机可以支持几百甚至上千个 | 最多几十个 |
以上是对Docker的简要介绍,下一篇会介绍一下Docker的安装
by Relon