目录
认识Docker
容器
什么是容器?
所谓容器,是一种轻量级的操作系统级虚拟化,可以让用户在一个资源隔离的进程中运行应用及其依赖项.运行应用程序所必需的的组件都将打包成一个镜像并可以复用.执行镜像时,它运行在一个隔离环境中,并且不会共享宿主机的内存,CPU以及磁盘,这就保证了容器内的进程不能监控容器外的任何进程.
容器与虚拟机之间的区别:
容器究竟解决了什么问题?
容器非常适合于在当前云计算环境快速地迁移和部署应用系统.
容器的优点:
- 敏捷度高.部署一个容器化的应用系统,可以按分钟,甚至秒级来计算.
- 提高生产力.容器通过接触跨服务的依赖和冲突提高了开发者的生产力.每个容器都可以看作是一个不同的微服务,因此可以独立升级,而不用担心与其他服务的同步问题.
- 版本控制.每个容器的镜像都有版本控制,可以跟踪不同版本的容器,监控版本之间的差异.
- 运行环境可移植.容器封装了所有运行应用程序所必需的的相关的细节,这就使得镜像从一个环境移植到另一个环境更加灵活.
- 标准化.大多数容器基于开放的标准,可以运行在所有主流的平台上.
- 安全.容器之间的进程是相互隔离的,其中的基础设施亦是如此.这样其中一个容器的升级或者变化不会影响其他容器.
容器的缺点:
- 复杂性增加.随着容器及应用数量的增加,同时也伴随着复杂性的增加.可以借助Kubernetes和Mesos等工具来管理具有一定规模数量的容器.
- 原生Linux支持.大多数容器技术都是基于Linux的(如Docker是基于Linux容器LXC技术的),在Windows环境中运行容器略显笨拙.
- 不成熟.容器技术是相对比较新的技术,开发者的可用资源是有限的,如果某个开发者陷入某个问题,可能需要花些时间才能解决问题.
容器的分类:
大致来说,容器可以分为操作系统容器和应用容器两大类型.(也有将容器分为操作系统容器,运行环境容器和应用系统容器三大类的)
操作系统容器是操作系统层的虚拟化,也可以看作是一种计算机虚拟化技术.这种虚拟化技术将操作系统的内核虚拟化,可以允许多个独立用户空间的存在,而不是只有一个.从运行在容器中 应用程序的角度来看,这些容器的实例就如同真正的计算机.当需要配置大量具有相同配置的操作系统时,操作系统容器就会非常有用,因此,容器有助于创建模板,可用于创建与另一个操作系统类似风格的容器.
应用容器是指应用程序的虚拟化,就是从其所执行的底层操作系统封装计算机程序的软件技术.应用容器旨在作为单个进程进行打包和运行服务,而在操作系统容器中,可以运行多个服务和进程.
Docker技术
什么是Docker?
Docker就是一个应用容器引擎,通过Docker,可以非常方便地对容器进行管理,Docker基于Go语言开发,并且遵从Apache2.0开源协议.
Docker完全使用沙箱机制,容器之间不会有任何的接口.(沙箱是一种按照安全策略限制程序行为的执行环境)
Docker现在已经逐渐成为轻量级虚拟化的代名词,成为云应用部署的事实上的标准.
Docker究竟是什么?
对开发人员来说,Java之前的开发语言,例如C或者C++都是严重依赖于平台的.同样的代码,在不同的平台下,需要重新编译才可以运行.为了解决这个问题Java诞生了,开发人员只要将Java代码编译成可以在Java虚拟机中执行的目标代码就可以了,与平台有关的具体细节交给Java虚拟机去处理就行了,开发者不用关心这个问题.
此外,开发人员在开发应用程序的时候,总会存在版本迭代的问题,为了管理不同的版本,人们开发出了Git,通过Git,开发人员可以任意地在不同版本之间切换,同时也解决了协同开发人员之间的代码冲突问题.
类似的,在部署应用系统的时候,会存在这组件之间的依赖问题,而系统所依赖的其他组件必然存在着与具体的平台兼容的问题.在每次迁移系统时都需要逐一处理这些依赖组件.而Docker提供了类似于Java虚拟机的功能,相对于应用系统而言,Docker屏蔽了与平台相关的具体细节.Docker像一个集装箱,把应用系统及其依赖组件包装起来.在迁移系统时,只要把这个"集装箱"搬过去即可,而不必处理"集装箱"里面的具体细节.
Docker这个功能特性的实现,在于开发人员为不同平台提供了相对应的镜像文件,镜像文件中包含了容器的内容,即应用系统以及依赖组件.既然是文件,必然也存在着版本的问题,Docker同样提供了基于Git的版本控制机制.
Docker的架构与组成
Docker是一个典型的C/S架构.
通过Docker客户端可以与Docker服务器进行交互,而Docker服务器则负责构建,运行和分发Docker镜像.
Docker中的基本概念:
镜像:
镜像Image是Docker中非常重要的一个概念.简单地讲,镜像就是容器的模板.对于普通用户来说,镜像文件通常都是只读的.镜像相当于构建和打包阶段
容器:
容器是独立运行的一个或者一组应用,是从镜像创建的运行实例.容器是可读可写的.容器相当于启动和执行阶段.
可以把容器看作是一个简易版的Linux环境,包括root用户权限,进程空间,用户空间和网络空间等以及运行在其中的应用程序.
仓库:
仓库是集中存放镜像文件的地方.仓库分为公有仓库和私有仓库两种形式,如Docker Hub是最大的公有仓库.
有时候会把仓库和仓库注册服务器混为一谈,并不严格区分.实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像都有不同的标签.
为什么使用Docker?
Docker的迅速发展,与云计算技术是密不可分的.
Docker的应用场景
Docker用于提供轻量级的虚拟化服务.它的应用场景非常广泛,主要有以下几种:
- 简化配置:Docker将应用程序代码,运行环境以及配置进行打包,用户在部署时,只要以该镜像为模板,创建容器即可.实际上,这实现了应用环境和底层环境的解耦.
- 便于实现开发环境和生产环境的统一:开发人员可以让每个服务运行在单独的容器中,这样能模拟生产环境的分布式部署.
- 应用隔离:随着硬件技术的发展,在一台机器上运行单个应用是非常罕见的了.为了使得各个应用之间不相互影响,需要解决各个应用系统之间的隔离问题,而Docker能轻松解决这个问题.
- 云计算环境:通过创建Docker容器,可以很好地解决云计算环境中多租户的需求,快速灵活地为租户提供服务.
- 快速部署:Docker可以快速地部署各种应用系统.
Docker可以解决那些问题?
简化部署过程.
节省开支.云计算时代的到来,使开发者不必为了追求性能而配置高额的硬件,Docker改变了高性能必然高价格的思维定势.Docker与云计算的结合,不仅解决了硬件管理的问题,也改变了虚拟化的方式.
Docker的应用成本
Docker的广泛应用极大的降低了IT设施的运维成本.主要有:
- 减少部署的时间成本和人力成本.
- 标准化应用的发布,可以跨平台和跨主机使用.
- 节约启动的时间.
- 节约存储成本.