欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

Docker 0x01:Docker Container容器技术

程序员文章站 2022-04-27 20:51:24
Docker Container容器技术 === [toc] 什么是容器?为什么要用容器或容器有什么好处或容器能解决什么问题? 因为docker是最火的容器技术方案,所以多少依照docker来理解容器。(当然还有coreos的rocket) 个人理解,慎重参考 一句话回答什么是容器? 容器是 操作系 ......

docker container容器技术

什么是容器?为什么要用容器或容器有什么好处或容器能解决什么问题?
因为docker是最火的容器技术方案,所以多少依照docker来理解容器。(当然还有coreos的rocket)
个人理解,慎重参考

一句话回答什么是容器?

容器是操作系统层面上轻量级的虚拟机,通过容器包裹我们的app应用。docker的出现让容器变为标准化的单位,所以容器进行打包成镜像,可靠的从一个计算机环境到另一个计算机环境,加上轻量级可以弹性扩展服务。同一机器下的多个容器,共享操作系统内核,共享部分是只读的,对于写,每个容器通过自己的mount.
关键字:轻量级,标准化,打包镜像,可靠迁移,弹性扩展。

为什么要有容器?

其实一句话回答总结了容器得特性,也就是为什么需要容器。

  1. 首先,虚拟化是高效利用计算资源的主要方式,但是hypervisor技术虚拟化平台,来提供来宾操作系统的方式,过于重量级,启动慢,非应用必须的操作系统服务也在运行,资源利用率也不是很高。所以有了基于操作系统上,将应用运行环境的虚拟化技术,够轻量级,利用效率也高。
  2. 然后是,容器概念的提出,但是是docker让容器标准化,让应用运行环境的虚拟化变得标准,统一容器标准,让应用服务更好的可以迁移,打包,复制,快速运行扩展服务。

容器技术的影响

  1. 影响了开发,测试,运维的devops工作流程,让开发测试运维不用再去关心三者的应用运行环境的不一致。build once, run anywhere.
  2. 容器打包成镜像,是另一种分发发布软件发行版的方式,然很多软件提供商多了一种发布途径。
  3. 可基于云平台运行,让云计算商家快速售卖搭建saas服务。
  4. 轻量级速度快高弹性,在分布式和微服务框架下,弹性的根据各种情况,扩展,容灾,为微服务框架提供了一定的基础。
  5. 衍生了对容器集群的管理工具或平台,如k8s, swam等新兴技术,弹性管理容器集群。
  6. ci/cd,持续集成和持续部署,开发完成后,提交代码,从而进入自动化流程,自动测试-自动构建镜像-自动推送docker镜像库。后续还可以自动化运行到业务测试环境中,进一步测试。这一系列自动化都是容器技术的标准化后才能更加简洁明确的。这样的持续集成和持续部署应该说大大提升了交付速度,团队人员不用拷贝代码,修改配置,替换文件等低效率工作。同时也为测试提供了更多的时间,反而促进了软件的可靠性。

容器技术浅谈原理,怎么实现的?为什么能够这样轻量级标准化

  1. 基于操作系统,所以还是要依赖操作系统的,共享操作系统。
  2. 容器引擎(也是容器管理器)
  3. 利用namespaces, cgourps, unionfs 等。
  4. namespaces 起到隔离作用。
  5. cgourps 负责容器所需资源管理控制。比如进程组使用cpu/mem的限制,进程组优先级控制,进程组wait/sleep/run的控制。

难点

  1. 容器的网络环境问题:既然容器标准化后,将我们的应用放在容器中运行,我们知道,应用是提供服务的,而服务的访问大多或者肯定是通过网络来提供,即使是本地应用也要提供网络管理接口服务,所以说,容器还要提供以太网卡以太网络(主要是以太网),网卡可以是虚拟网卡,但是网络呢?由于容器时运行在操作系统上,所以容器的网络肯定和宿主机宿主操作系统有必然关系。容器接入的网络时怎么样的呢?容器标准化,那么在通过镜像,创建容器时,是不是要额外的指定网络相关的参数才行,毕竟镜像时静态的,移植到不同宿主机,宿主机能提供的网络环境肯定是不一致的,所以不一致的东西肯定是不能打包到镜像中,只能在镜像创建容器时指定。容器网络的提供应该就是docker engine提供,docker-engine通过镜像创建容器时应该会根据参数进行相应的网络构建(虚拟网络,涉及相关虚拟网络设备)。
  2. 存储文件系统问题(volume卷):容器的文件系统,容器有自己的文件系统。mount列表。

容器的标准

主要是两大标准规范:

  1. 容器运行时期的标准:a)creating; b)created; c)running; d) stopped
  2. 容器打包的镜像标准:a)文件系统:以layer保存的文件系统,每个layer保存和上层之间变化的部分,layer应该保存哪些文件,怎么表示增加、删除、修改的文件;b) config文件:保存文件系统的层级信息(每层的hash值,以及历史信息,以及容器运行时需要的一些信息(如环境变量、工作目录、命令参数、mount列表), 指定了镜像在某个特殊平台的差异化配置。比较接近我们使用docker inspect看到的内容; c) manifest文件: 镜像的config文件的所以,有哪些layer,额外的annotation信息, manifest文件中保存了很多和当前平台有关的信息; d) index文件:可选的文件,指向不同平台的manifest文件,这个文件能保证一个镜像可以跨平台使用,每个平台拥有不同的manifest文件,使用index作为索引。

花边

  1. 容器技术缩写就是lxc,linux container。