弱小和无知不是生存的障碍,傲慢才是。
Docker为什么会出现
配置环境麻烦:测试环境和生产环境的部署,应用的配置等对于运维人员来说工作量十分庞大;每个机器都要部署环境,特别是集群。费事费力。就算是不跨越操作系统,就同样的操作系统要移植应用也是非常麻烦的。
开发和运维的问题:开发需要清楚的告诉运维部署团队,用的全部配置文件+所有软件环境。不过,即便如此,仍然常常发生部署失败的状况。
Docker对于以上的问题有很好的解决方案。
通过Docker镜像将应用程序所需要的系统环境,由下而上打包,达到应用程序跨平台间的无缝接轨做
java – jar(环境) – 打包到目录和环境(镜像) – Docker仓库(Hub) – 拉取镜像 – 运行(run)
Docke的思想来自于集装箱,“一次封装,到处运行”
隔离:Docker核心思想!打包装箱、每个箱子是互相隔离的。
Docker通过隔离机制,可以将服务器资源利用到极致。
Docker历史
- 2010年,dotCloud,做pass云计算服务,LXC(Linux Container)有关的容器技术。将容器化技术命名为 Docker
- 2013年,开放源代码。越来越多的人发现了docker的优点,Docker每个月都会更新一个版本。
- 2014年,Docker1.0发布
Docker之前用的都是虚拟机技术(VMWare和OpenStack)。在操作系统中,安装一个软件,然后通过软件在模拟一台或者多台可以和正常电脑一样运行的程序“子电脑”。“子电脑”之间是互相隔离的,互不影响。但是虚拟机占用空间更大,更笨重,启动更慢,有些软件还需要花钱。
虚拟机属于虚拟化技术,Docker是容器技术,也是一种虚拟化技术。
Docker是什么
官网地址
文档地址
仓库地址
Docker是基于go语言开发的开源的容器引擎,利用LXC、CGroup、NameSpace、Chroot、OverlayFS、IPtables、Bridge等技术,实现远超出出传统虚拟机的轻量级虚拟化(内核级的虚拟化),从而实现项目环境“一次封装,到处运行”。Docker主要由三部分组成:容器、镜像、仓库。让开发者可以打包他们的应用以及依赖到一个可以移植的镜像中,然后发布到任何流行的Linux或者Windows机器上,也可以实现虚拟化,容器是完全使用沙箱机制,互相之间不会有任何接口。
Docker的作用
虚拟机技术
虚拟机(virtual machine)就是带环境安装的一种解决方案。它可以在一种操作系统里面运行另一种操作系统,比如在Windows系统里面运行Linux系统。应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响。这类虚拟机完美的运行了另一套系统,能够使应用程序,操作系统和硬件三者之间的逻辑不变。
虚拟机技术缺点:
- 成本高
- 资源利用率较低
- 冗余步骤多
- 启动缓慢
容器化技术
Docker利用的是Linux Container技术(内核轻量级的操作系统层的虚拟化技术)。容器化技术不是模拟一个完整的操作系统,而是对进程进行了隔离,而种隔离机制是通过namespace和Cgroup来实现的。有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。容器与虚拟机不同,不需要捆绑一整套操作系统,只需要应用程序工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。
容器化的优点:
- 敏捷环境
- 高资源的利用率和安全
- 环境标准化和版本控制
- 可移植性
- CI/CD
- 标准化
Docker和虚拟机的不同:
- 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整的操作系统,在该操作系统上再运行所需应用进程;
- 而容器内的应用和进程直接运行于宿主机的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。所以轻便
- 每个容器间是互相隔离,每个容器都有属于自己的文件系统,互不影响。
DevOps(开发、运维)
- 应用更快速的交付和部署
传统:安装程序+配置文档
Docekr:打包镜像,发布测试,一键运行
- 更便捷的升级和扩缩容
使用Docker部署应用就和搭积木一样
当现有容器不足以支撑业务处理时,通过镜像运行新的容器进行快速扩容
- 更简单的系统运维
应用容器化运行后,生产环境运行的应用可以和开发环境、测试环境的应用高度一致,容器会将应用程序相关的环境完全封装起来。不会因为底层基础架构和操作系统的不一致性给应用带来影响,产生新的BUG。当出现程序异常时,也可以通过测试环境的相同容器进行快速定位和修复。
- 更高效的计算资源利用
Docker是内核级虚拟化,在一台物理机上可以运行很多个容器实例,服务器的性能能被压榨到极致。