1.认识Docker:
1.1.开发中遇到的问题
- 1.我们写的代码会接触到好几个环境:
开发环境、测试环境以及生产环境
; - 2.我们在三种环境下会遇到一些问题:开发–>测试迁移的过程中“水土不服”,开发到生产过程中:跨环境的迁移问题;
- 3.为解决水土不服的问题,实现带环境安装,就可以实现100%安装,
**可以使用Docker打包成有个镜像文件**
,Docker它对此给出了一个标准化的解决方案-----系统平滑移植,容器虚拟化技术
。
1.2.Docker的理念:
- 1.Docker是基于Go语言实现的云开源项目。
- 2.
Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,
也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次镜像,处处运行”。
Linux容器技术的出现就解决了这样一个问题,而 Docker 就是在它的基础上发展过来的。 - 3.
将应用打成镜像,通过镜像成为运行在Docker容器上面的实例,而 Docker容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器
。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作
1.3.Docker基本概念:
- 1.Docker 诞生于 2013 年初,基于 Go 语言实现, dotCloud 公司出品(后改名为Docker Inc)
- 2.Docker 是一个开源的应用容器引技术,可以
解决软件跨环境迁移的问题
- 3.Docker 可以
让开发者打包他们的应用
以及依赖包到一个轻量级、可移植的容器中
,然后发布到任何流行的 Linux 机器上。 - 4.容器是
完全使用沙箱机制
,相互隔离 容器性能开销极低
。 - 5.Docker 从 17.03 版本之后
分为 CE(
Community Edition:社区版) 和EE
(Enterprise Edition: 企业版) - 6.
Docker本身是一个容器运行载体或者称之为管理引擎
;我们把应用程序和配置依赖打包成一个可交付的运行环境,这个打包好的环境就是镜像文件。只有通过这个镜像文件才可以生成Docker容器实例(类似java类中new出来的有个对象)
1.4.一句话总结Docker
- Docker就是
解决了运行环境和配置问题的软件容器
,方便做持续集成并有助于整体发布的容器虚拟化技术
2.容器与虚拟机比较:
2.1.传统虚拟机技术
- 1.
虚拟机(virtual machine)
就是带环境安装的一种解决方案。它可以在一种操作系统里面运行另一种操作系统,比如在Windows10系统里面运行Linux系统CentOS7。应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响
。这类虚拟机完美的运行了另一套系统,能够使应用程序,操作系统和硬件
三者之间的逻辑不变。
- 2.虚拟机的缺点:
- 资源占用多
- 冗余步骤多
- 启动慢
2.2.容器虚拟化技术:
- 1.由于前面虚拟机存在某些缺点,Linux发展出了另一种虚拟化技术:
Linux容器(Linux Containers,缩写为 LXC)
- 2.Linux容器
是与系统其他部分隔离开的一系列进程
,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件
。容器提供的镜像包含了应用的所有依赖项,因而在从开发到测试再到生产的整个过程中,它都具有可移植性和一致性。 - 3.Linux 容器不是模拟一个完整的操作系统而是对进程进行隔离。
有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中
。容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。
2.3.Docker与传统虚拟机的差别
- 1.传统虚拟机技术是虚拟出一套硬件之后,在其上运行一个完整的操作系统,然后在该系统上再运行所需要的应用进程
- 2.容器内的进程是直接运行在宿主内中,
容器内没有自己的内核且也没有硬件虚拟。因此容器要比传统虚拟机轻便
- 3.
每个容器之间相互隔离,每个容器中有自己的系统文件,容器之间不会相互影响
,可以区分计算资源
3.Docker能干嘛:
3.1.一次构建、随处运行:
- 1.更快速的应用交付和部署:
- 传统的应用开发完成后,需要提供一堆安装程序和配置说明文档,安装部署后需根据配置文档进行繁杂的配置才能正常运行。
Docker化之后只需要交付少量容器镜像文件,在正式生产环境加载镜像并运行即可,应用安装配置在镜像里已经内置好,大大节省部署配置和测试验证时间。
- 2.更便捷的升级和扩缩容:
- 随着微服务架构和Docker的发展,大量的应用会通过微服务方式架构,应用的开发构建将变成搭乐高积木一样,每个Docker容器将变成一块“积木”,应用的升级将变得非常容易。
- 当现有的容器不足以支撑业务处理时,可通过镜像运行新的容器进行快速扩容,使应用系统的扩容从原先的天级变成分钟级甚至秒级。
- 3.更简单的系统运维:
- 应用容器化运行后,
生产环境运行的应用可与开发、测试环境的应用高度一致,容器会将应用程序相关的环境和状态完全封装起来,不会因为底层基础架构和操作系统的不一致性给应用带来影响,产生新的BUG
。 - 当出现程序异常时,也可以通过测试环境的相同容器进行快速定位和修复。
- 应用容器化运行后,
- 4.更高效的计算资源利用:
- Docker
是内核级虚拟化
,其不像传统的虚拟化技术一样需要额外的Hypervisor支持,所以在一台物理机上可以运行很多个容器实例,可大大提升物理服务器的CPU和内存的利用率
。
- Docker