Docker Container容器技术
什么是容器?为什么要用容器或容器有什么好处或容器能解决什么问题?
因为docker是最火的容器技术方案,所以多少依照docker来理解容器。(当然还有coreos的rocket)
个人理解,慎重参考
一句话回答什么是容器?
容器是操作系统层面上轻量级的虚拟机,通过容器包裹我们的APP应用。docker的出现让容器变为标准化的单位,所以容器进行打包成镜像,可靠的从一个计算机环境到另一个计算机环境,加上轻量级可以弹性扩展服务。同一机器下的多个容器,共享操作系统内核,共享部分是只读的,对于写,每个容器通过自己的mount.
关键字:轻量级,标准化,打包镜像,可靠迁移,弹性扩展。
为什么要有容器?
其实一句话回答总结了容器得特性,也就是为什么需要容器。
- 首先,虚拟化是高效利用计算资源的主要方式,但是hypervisor技术虚拟化平台,来提供来宾操作系统的方式,过于重量级,启动慢,非应用必须的操作系统服务也在运行,资源利用率也不是很高。所以有了基于操作系统上,将应用运行环境的虚拟化技术,够轻量级,利用效率也高。
- 然后是,容器概念的提出,但是是docker让容器标准化,让应用运行环境的虚拟化变得标准,统一容器标准,让应用服务更好的可以迁移,打包,复制,快速运行扩展服务。
容器技术的影响
- 影响了开发,测试,运维的devops工作流程,让开发测试运维不用再去关心三者的应用运行环境的不一致。build once, run anywhere.
- 容器打包成镜像,是另一种分发发布软件发行版的方式,然很多软件提供商多了一种发布途径。
- 可基于云平台运行,让云计算商家快速售卖搭建saas服务。
- 轻量级速度快高弹性,在分布式和微服务框架下,弹性的根据各种情况,扩展,容灾,为微服务框架提供了一定的基础。
- 衍生了对容器集群的管理工具或平台,如k8s, swam等新兴技术,弹性管理容器集群。
- CI/CD,持续集成和持续部署,开发完成后,提交代码,从而进入自动化流程,自动测试-自动构建镜像-自动推送docker镜像库。后续还可以自动化运行到业务测试环境中,进一步测试。这一系列自动化都是容器技术的标准化后才能更加简洁明确的。这样的持续集成和持续部署应该说大大提升了交付速度,团队人员不用拷贝代码,修改配置,替换文件等低效率工作。同时也为测试提供了更多的时间,反而促进了软件的可靠性。
容器技术浅谈原理,怎么实现的?为什么能够这样轻量级标准化
- 基于操作系统,所以还是要依赖操作系统的,共享操作系统。
- 容器引擎(也是容器管理器)
- 利用namespaces, cgourps, unionfs 等。
- namespaces 起到隔离作用。
- cgourps 负责容器所需资源管理控制。比如进程组使用CPU/MEM的限制,进程组优先级控制,进程组wait/sleep/run的控制。
难点
- 容器的网络环境问题:既然容器标准化后,将我们的应用放在容器中运行,我们知道,应用是提供服务的,而服务的访问大多或者肯定是通过网络来提供,即使是本地应用也要提供网络管理接口服务,所以说,容器还要提供以太网卡和以太网络(主要是以太网),网卡可以是虚拟网卡,但是网络呢?由于容器时运行在操作系统上,所以容器的网络肯定和宿主机宿主操作系统有必然关系。容器接入的网络时怎么样的呢?容器标准化,那么在通过镜像,创建容器时,是不是要额外的指定网络相关的参数才行,毕竟镜像时静态的,移植到不同宿主机,宿主机能提供的网络环境肯定是不一致的,所以不一致的东西肯定是不能打包到镜像中,只能在镜像创建容器时指定。容器网络的提供应该就是docker engine提供,docker-engine通过镜像创建容器时应该会根据参数进行相应的网络构建(虚拟网络,涉及相关虚拟网络设备)。
- 存储文件系统问题(volume卷):容器的文件系统,容器有自己的文件系统。mount列表。
容器的标准
主要是两大标准规范:
- 容器运行时期的标准:a)creating; b)created; c)running; d) stopped
- 容器打包的镜像标准:a)文件系统:以layer保存的文件系统,每个layer保存和上层之间变化的部分,layer应该保存哪些文件,怎么表示增加、删除、修改的文件;b) config文件:保存文件系统的层级信息(每层的hash值,以及历史信息,以及容器运行时需要的一些信息(如环境变量、工作目录、命令参数、mount列表), 指定了镜像在某个特殊平台的差异化配置。比较接近我们使用docker inspect看到的内容; c) manifest文件: 镜像的config文件的所以,有哪些layer,额外的annotation信息, manifest文件中保存了很多和当前平台有关的信息; d) index文件:可选的文件,指向不同平台的manifest文件,这个文件能保证一个镜像可以跨平台使用,每个平台拥有不同的manifest文件,使用index作为索引。
花边
- 容器技术缩写就是LXC,Linux Container。