Docker 0x01:Docker Container容器技术
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。
Docker 0x01:Docker Container容器技术的更多相关文章
- Docker 容器技术
前言: 之前感觉Docker是一种小虚拟机,docker和KVM虚拟机之间有什么区别.联系.可以应用在什么样的生产环境? 一.Docker是什么以及和KVM的区别 1.docker概念? Docker ...
- 容器技术----------->Docker
1. 虚拟化 1)什么是虚拟化 在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种 实体资源,如服务器.网络.内存及存储等,予以抽象.转换后呈现出来,打破实体 ...
- 01. DOCKER - 容器技术
什么是容器 对于容器这个词,大部分人第一时间想到的肯定是生活中常见瓶瓶罐罐,用来装水的东西.它给人的第一感觉就是能 "装". 而在 IT 领域,Container 就被直译为容器, ...
- Docker 0x06: Docker Volume卷
目录 Docker Volume卷 一句话什么是docker volume? docker volume特性 docker 挂载卷 docker 多容器间共享数据券 删除,查看数据卷 备份还原数据卷 ...
- Docker 组件如何协作?- 每天5分钟玩转容器技术(8)
还记得我们运行的第一个容器吗?现在通过它来体会一下 Docker 各个组件是如何协作的. 容器启动过程如下: Docker 客户端执行 docker run 命令. Docker daemon 发现本 ...
- 如何运行容器?- 每天5分钟玩转 Docker 容器技术(22)
上一章我们学习了如何构建 Docker 镜像,并通过镜像运行容器.本章将深入讨论容器:学习容器的各种操作,容器各种状态之间如何转换,以及实现容器的底层技术. 运行容器 docker run 是启动容器 ...
- volume 生命周期管理 - 每天5分钟玩转 Docker 容器技术(44)
Data Volume 中存放的是重要的应用数据,如何管理 volume 对应用至关重要.前面我们主要关注的是 volume 的创建.共享和使用,本节将讨论如何备份.恢复.迁移和销毁 volume. ...
- Docker 最常用的监控方案 - 每天5分钟玩转 Docker 容器技术(78)
当 Docker 部署规模逐步变大后,可视化监控容器环境的性能和健康状态将会变得越来越重要. 在本章中,我们将讨论几个目前比较常用的容器监控工具和方案,为大家构建自己的监控系统提供参考. 首先我们会讨 ...
- Weave Scope 容器地图 - 每天5分钟玩转 Docker 容器技术(80)
Weave Scope 的最大特点是会自动生成一张 Docker 容器地图,让我们能够直观地理解.监控和控制容器.千言万语不及一张图,先感受一下. 下面开始实践 Weave Scope. 安装 执行如 ...
随机推荐
- 网络协议 18 - CDN
到现在为止,我们基本上已经了解了网络协议中的大部分常用协议,对于整个 HTTP 请求流程也较为熟悉了.从无到有后,我们就要考虑如何优化“有”这个过程,也就是我们常见的请求优化.而现在的技术栈中,CDN ...
- ES6解构赋值常见用法
解构赋值出现的契机: let obj = { a: 1, b: 2 } // 取值 let a = obj.a let b = obj.b 问题核心: 每次取值既要确定对象属性名,还得重新定义一个变量 ...
- 图解 Java 垃圾回收机制,写得非常好!
阅读本文大概需要 3.7 分钟. 翻译:Rhys_Lee, AzureSora, 溪边九节, 小小菜鸟鸡 blog.csdn.net/zl1zl2zl3/article/details/9090408 ...
- Leetcode 219. 存在重复元素 II
说明: 首先,这是一道Easy题,我天!但是题意理解还是很多坑~ 题目描述: 给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j] ...
- jdk 1.7新特性
JDK1.7新特性 1,switch中可以使用字串了String s = "test"; switch (s) { case "test" : ...
- 【转】JavaScript 高性能数组去重
原文地址:https://www.cnblogs.com/wisewrong/p/9642264.html 一.测试模版 数组去重是一个老生常谈的问题,网上流传着有各种各样的解法 为了测试这些解法的性 ...
- 前端与算法 leetcode 242. 有效的字母异位词
目录 # 前端与算法 leetcode 242. 有效的字母异位词 题目描述 概要 提示 解析 解法一:哈希表 解法二:数组判断字符出现次数 解法三:转换字符串 算法 传入测试用例的运行结果 执行结果 ...
- SpringBoot工程常见报错汇总
1.Springboot测试类运行报错 java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you ...
- C# Convert.ChangeType()
Convert.ChangeType() 将未知类型转换为已知类型 ; object result = Convert.ChangeType(content, typeof(int)); 其他常用的转 ...
- Java学习:异常的概念
异常 异常概念 异常:指的是程序在执行过程中,出现的非正常的情况,最终导致JVM的非正常停止. 在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出一个异常对象.Java ...