云原生k8s的前世今生--Docker

        不可修改(immutability)和幂等性(idempotent)是一致依赖困扰软件发布与运维的两个难题。以nodejs等解析执行的应用而言,如何控制发布后的软件不被修改运行,发布后,经常发现因为运行环境差异导致各种水土不服:比如应用程序对底层操作系统库、基础程序等的依赖,这种跨产品边界的依赖,尤其对于多产品部署环境更为复杂,一不留神就可能因为某一软件的升级导致自己产品的功能不工作。于是运维人员对任何产品的升级都谨小慎微,需要严格验证每一款产品的升级,询问每个租户的具体要求,维护一张复杂的依赖关系图。 即便如此,部署的复杂度,导致产品的升级运维都是一项开销最大的软件活动:产品运维人员首当其冲,客户方运维人员,主程或相干得力干将大概率也得坐镇三方,项目负责人员等都参与其中。通常还要挑一些相对业务闲时,比如深更半夜偷偷摸摸地升级,最大可能让客户感觉不到服务端的升级。

        没有梦想的运维和开发,人生函数不可能有诗和远方返回,只有无穷无尽的加班和根因分析(RCA)。 软件的不可修改性和幂等性就成为运维人员一直追求的梦想。

         Docker容器技术毫无疑问是支撑这个梦想的中流砥柱。

Docker容器技术的3个核心概念

       Docker容器最大的发明,是“容器镜像”创造性打包技术。这个让Linux容器技术得以风靡全球。无论后续容器技术如何演进,这个无疑是打开容器文明的一把火,照亮了算力作为公共资源的未来路。即便未来Docker不在江湖,江湖上还会有Docker的传说。

       想知道Docker哥长啥样吗?请看他的官方玉照。

         技术层面上,Docker容器技术有3个核心概念:容器(container)、镜像(image)和镜像仓库(Docker Registry)。容器相当于进程,镜像就像是静态运行程序(比如exe,rpm,jar, etc)以及相应的打包配置和环境参数文件,镜像仓库类似软件的分发仓库(比如zypper repo,etc)。

容器分层存储

        Docker镜像是由一层层的Docker file指令系列构成,新的一层用于构建基于上一层的差异。

可堆叠层(overlay layer)

写时复制(copy on write)

镜像是静态不可修改的,容器作为镜像的运行实体,它有一可写层,所有新增或修改数据都在最上面的可写层。这层是热数据,容器删除的话,数据作为容器的一部分也香消玉损了。轻轻的我走了,不带走一片云彩,这就是容器的使命。

镜像层除了隔离之外,还有就是基于同样镜像层的多个容器之间是共享底层公共层的,是共享的。比如运行于操作系统之上的容器应用,他们都共享操作系统的内核。

镜像分阶段构建机制

        构建阶段通常需要一些额外的工具,以及构建依赖的一些库,同时构建过程中不可避免地产生一些临时文件。而Dockerfile自身相对精简,这些临时文件的生成对于Dockerfile而言通常是透明,很难去追踪,如果直接通过构建镜像导出目标镜像,将使得镜像过于肥胖。除此之外,这些额外的依赖和工具,也会给镜像留下一些隐藏的安全漏洞。

        解决这类问题简单明了,分步解决。用一个构建镜像去生成目标文件,接着把目标文件复制到最小的基础镜像里。永远不要想去清理一个环境,直接用一个干净的环境去达成目标,直接目标导向。

容器桥接网络 

容器的overlay网络

src: 100.96.1.2 -> dst: 100.96.2.3

Docker cheatsheet

微服务和Docker容器架构模式

        看上去一个容器一个微服务,如果对应的应用是一家豪华酒店,房间就是一个个的容器,客服就是对应的微服务,不同的客服对应不同的微服务,餐厅,对应餐饮服务,大厅对应接待服务等等。 可以想象一下,如何才能运作这样一家庞大的酒店呢?只有房间和服务,貌似还不足以灵活应对类似黄金周,节假日的高峰客流量,且能协调管理淡季的资源管理,整体上开源节流,实现酒店的最大化效益。是不是觉得酒店管理和协调就是酒店运行的中枢?

        容器技术怎样落地到生产呢?请看下图。那谁是容器管理和协调的中枢呢?且听下回分解。

Reference

Docker overview | Docker Documentation

Microservices and Docker containers: Architecture, Patterns and Development guidance (Updated for .NET Core 2.0) - .NET Blog Docker network - Binary Maps

Multi-Host Overlay Networking with Etcd — Docker Kubernetes Lab 0.1 documentation

https://blog.laputa.io/kubernetes-flannel-networking-6a1cb1f8ec7cDocker Commands Cheat Sheet {With Downloadable PDF} | PhoenixNAP

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值