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。

Docker 0x01:Docker Container容器技术的更多相关文章

  1. Docker 容器技术

    前言: 之前感觉Docker是一种小虚拟机,docker和KVM虚拟机之间有什么区别.联系.可以应用在什么样的生产环境? 一.Docker是什么以及和KVM的区别 1.docker概念? Docker ...

  2. 容器技术----------->Docker

    1. 虚拟化 1)什么是虚拟化 在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种 实体资源,如服务器.网络.内存及存储等,予以抽象.转换后呈现出来,打破实体 ...

  3. 01. DOCKER - 容器技术

    什么是容器 对于容器这个词,大部分人第一时间想到的肯定是生活中常见瓶瓶罐罐,用来装水的东西.它给人的第一感觉就是能 "装". 而在 IT 领域,Container 就被直译为容器, ...

  4. Docker 0x06: Docker Volume卷

    目录 Docker Volume卷 一句话什么是docker volume? docker volume特性 docker 挂载卷 docker 多容器间共享数据券 删除,查看数据卷 备份还原数据卷 ...

  5. Docker 组件如何协作?- 每天5分钟玩转容器技术(8)

    还记得我们运行的第一个容器吗?现在通过它来体会一下 Docker 各个组件是如何协作的. 容器启动过程如下: Docker 客户端执行 docker run 命令. Docker daemon 发现本 ...

  6. 如何运行容器?- 每天5分钟玩转 Docker 容器技术(22)

    上一章我们学习了如何构建 Docker 镜像,并通过镜像运行容器.本章将深入讨论容器:学习容器的各种操作,容器各种状态之间如何转换,以及实现容器的底层技术. 运行容器 docker run 是启动容器 ...

  7. volume 生命周期管理 - 每天5分钟玩转 Docker 容器技术(44)

    Data Volume 中存放的是重要的应用数据,如何管理 volume 对应用至关重要.前面我们主要关注的是 volume 的创建.共享和使用,本节将讨论如何备份.恢复.迁移和销毁 volume. ...

  8. Docker 最常用的监控方案 - 每天5分钟玩转 Docker 容器技术(78)

    当 Docker 部署规模逐步变大后,可视化监控容器环境的性能和健康状态将会变得越来越重要. 在本章中,我们将讨论几个目前比较常用的容器监控工具和方案,为大家构建自己的监控系统提供参考. 首先我们会讨 ...

  9. Weave Scope 容器地图 - 每天5分钟玩转 Docker 容器技术(80)

    Weave Scope 的最大特点是会自动生成一张 Docker 容器地图,让我们能够直观地理解.监控和控制容器.千言万语不及一张图,先感受一下. 下面开始实践 Weave Scope. 安装 执行如 ...

随机推荐

  1. Circos图

    Circos官网   http://circos.ca 在线绘图工具    http://mkweb.bcgsc.ca/tableviewer/visualize/ Circos图的诞生 Circos ...

  2. C# 获得本地通用网卡信息

    可以通过使用命名空间下的ManagementObjectSearcher类及其方法Get来获得通用网卡信息. 其中,最重要的是ManagementObjectSearcher构造函数的输入参数,可以传 ...

  3. 死磕Java内部类

    Java内部类,相信大家都用过,但是多数同学可能对它了解的并不深入,只是靠记忆来完成日常工作,却不能融会贯通,遇到奇葩问题更是难以有思路去解决.这篇文章带大家一起死磕Java内部类的方方面面. 友情提 ...

  4. 【Gamma】“北航社团帮”发布说明——小程序v3.0

    目录 Gamma版本新功能 小程序v3.0新功能 新功能列表 新功能展示 这一版修复的缺陷 Gamma版本的已知问题和限制 小程序端 网页端 运行.安装与发布 运行环境的要求 安装与发布 小程序 网页 ...

  5. gamma测试报告

    Gamma阶段测试报告 测试计划及结果 我们针对测试做了比较多的改进. 测试代码分为针对纯java部分的单元测试和需要android运行环境的自动化仪器化测试 单元测试 这一部分基本继承Beta阶段的 ...

  6. 使用MobaXterm配置ssh隧道(port forwarding)

    背景描述:如图所示,本地与远程服务器之间存在防火墙,防火墙只允许SSH端口通过,为访问远程服务器,我们可以借助MobaXterm来与SSH服务器建立隧道,使得防火墙外的用户能够访问远程服务器 具体配置 ...

  7. sqlalchemy 配合bootstrap-table实现后台分页

    创建公共的mysql连接函数 def db_session(): db_config='mysql+mysqldb://'+ mysqluser + ':' + mysqlpassword+'@'+m ...

  8. Java学习:集合双列Map

    数据结构 数据结构: 数据结构_栈:先进后出 入口和出口在同一侧 数据结构_队列:先进先出 入口和出口在集合的两侧 数据结构_数组: 查询快:数组的地址是连续的,我们通过数组的首地址可以找到数组,通过 ...

  9. 封装:WPF基于MediaElement封装的视频播放器

    原文:封装:WPF基于MediaElement封装的视频播放器 一.目的:应用MediaElement创建媒体播放器 二.效果图 三.目前支持功能 播放.暂停.停止.快进.快退.声音大小.添加播放列表 ...

  10. SUSE12Sp3-使用Docker导入镜像并安装redis,zookeeper,kafka

    首先在另外一台联网电脑拉取最新的redis,zookeeper,kafka镜像 docker pull redis docker pull zookeeper docker pull wurstmei ...