docker学习总结

1. 简介

1.1 docker出现原因

1.系统平滑移植,容器虚拟化技术;
2.源码+配置+环境+版本,打包成一个镜像文件;
3.正常情况下,在服务器配置一个应用的运行环境,要安装各种软件,比如JAVA/RabbitMQ/Mysql/JDBC驱动包等,安装和配置麻烦,还不能跨平台,假设我们在Windows上安装的这些环境,到了Linux又得重装,即使不跨操作系统,换另一台同样操作系统的服务器,也要移植应用,非常麻烦;
4.传统上认为,软件编码开发测试结束之后,所产出的成果即是程序或者能够编译执行的二进制字节码等,而为了让这些程序可以顺利执行,开发团队也得准备完整的部署文件,让运维团队得以部署应用程式,开发需要清楚的告诉运维部署团队,用的全部配置和软件环境,即使这样,仍然会有部署失败的情况;
5.docker打破程序即应用的观念,通过镜像将作业系统核心除外,运作应用程式所需的系统环境,由下而上打包,达到应用程式跨平台间的无缝接轨运作;

1.2 docker理念

1.一次镜像,处处运行(比如由搬家直接变为搬楼);
2.镜像文件,保证了环境迁移的一致性;
3.源码+运行环境+配置文件+特殊引用第三方组件 通过打包 => 镜像文件;

1.3 docker介绍

1.Docker是基于Go语言实现的云开源项目;
2.Docker主要目标是: Build,Ship and Run Any App, Anywhere, 通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个Web应用或者数据库应用等)及其运行环境能够做到 “一次镜像,处处运行”;

3.Linux容器技术的出现解决了这样一个问题,Docker是在它的基础上发展来的,将应用打成镜像,通过镜像成为运行在Docker容器上的实例,而docker容器在任何操作系统上都是一致的,这就实现了跨平台,跨服务器。只需要一次配置好环境,换到其他机器上可以一键部署好,简化了操作;
4.docker是解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术;
5.虚拟机 virtual machine 带环境安装的一种解决方案;可以在一种操作系统内运行另一种操作系统,比如window10系统内运行Linux系统centos7,应用程序对此毫无感知,因为虚拟机看起来和真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了删除即可,对其他部分毫无影响,这类虚拟机完美的运行了另一套系统,能够使应用程序,操作系统和硬件三者之间的逻辑不变;

6.传统虚拟机技术基于安装在主操作系统上的虚拟机管理系统(如VirtualBox和VMWare等),创建虚拟机(虚拟出各种硬件),在虚拟机上安装从操作系统,在从操作系统中安装部署各种应用;
7.容器和虚拟机的比较
a.虚拟机就是带环境安装的一种解决方案,可以在一种操作系统里面运行另一种操作系统;能使应用程序,操作系统和硬件三者之间的逻辑不变;
b.传统虚拟机技术基于安装在主操作系统上的虚拟机管理系统(VMWare,VirtualBox),创建虚拟机(虚拟出各种硬件),在虚拟机上安装从操作系统,在从操作系统中安装部署应用;
c.虚拟机缺点:资源占用多,冗余步骤多,启动慢;
d.虚拟化技术: Linux容器 Linux Containers,LXC
e.Linux容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件;容器提供的镜像包含了应用的所有依赖项,因而从开发到测试到生产的整个过程中,都具有可移植性和一致性;
f.Linux容器不是模拟一个完整的操作系统,而是对进程进行隔离,有了容器,就可以将软件运行所需要的所有资源打包到一个隔离的容器中,容器与虚拟机不同,不需要捆绑一套操作系统,只需要软件工作需要的库资源和设置,系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行;
g.Docker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统虚拟机是在硬件层面上实现虚拟化,与传统的虚拟机相比,Docker优势体现在启动速度快,占用体积小;
8.Docker和传统虚拟化方式的不同
a.传统虚拟机技术是虚拟出一套硬件之后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;
b.容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核且没有进行硬件虚拟,因此容器要比传统虚拟机更为轻便;
c.每个容器之间互相隔离,每个容器都有自己的文件系统,容器之间进程不会相互影响,能区分计算资源
9.一次构建,到处运行
a.更快速的应用交付与部署:传统的应用开发完成之后,需要提供一堆安装程序和配置文档,安装部署后需要根据配置文档进行繁琐的配置才能正常运行,Docker化之后,只需要交付少量容器镜像文件,在生产环境加载镜像并运行即可,应用程序配置在镜像里已经内置好,大大节省部署配置和测试验证时间;
b.更便捷的升级和扩缩容:随着微服务架构和docker发展,大量的应用会通过微服务方式架构,应用的开发构建变成搭乐高积木一样,每个docker容器将变成一块积木,应用的升级变得容易,当现有容器不足以支撑业务处理时,可以通过镜像运行新的容器进行快速扩容,使应用系统的扩容从原先的天级变成分钟级甚至秒级;
c.更简单的系统运维:应用容器化运行之后,生产环境运行的应用可与开发,测试环境的应用高度一致,容器将应用程序相关的环境和状态完全封装起来,不会因为底层基础架构和操作系统的不一致性给应用带来影响,产生新的Bug,当出现程序异常时,可以通过测试环境的相同容器来进行快速定位和修复;
d.更高效的计算资源利用:Docker是内核级虚拟化,不像传统的虚拟化技术需要额外的Hypervisor支持,所以在一台物理机上可以运行很多个容器实例,可以大大提升物理服务器的CPU和内存的使用率;

你可能感兴趣的:(docker,学习,容器)