华为云DevOps系列之 —— 持续部署与发布(三)容器技术 & Docker

举报
ruochen 发表于 2021/08/28 13:10:53 2021/08/28
【摘要】 华为云DevOps系列之 —— 持续部署与发布(三)容器技术 & Docker

此篇文章中,主要介绍了容器的背景以及容器相关的技术,并着重介绍了 Docker 相关概念(镜像、容器、工作机制等),并未涉及太多终端的操作,大家需要学习更多 Docker 相关技术的话,请访问以下文章
Docker 超详细版(基础+进阶)(一)
Docker 超详细版(基础+进阶)(二)

容器的背景

高度分散和异构化的部署环境

  • 开发完软件/工程后,我们要进行部署,部署的时候就面临着高度分散和异构化的部署环境
  • 硬件上要搭建好物理的硬件环境:服务器、数据中心、云环境、容灾备份等,然后要进行应用的部署配置
  • 软件方面,不同的技术栈有不同的依赖和配置,要使用不同的方式和工具进行部署,同时要考虑到应用之间的交互
  • 各种纷乱的硬件环境以及技术栈为软件部署带来了巨大的挑战,以此产生了 容器

代码集装箱装卸工

  • 容器,相当于软件行业的集装箱,也就是英文里的 container,它就像我们运输业的集装箱一样,把货物都打包在了一起,容器把软件应用进行了封装,把软件运行所依赖的环境都放在了一起,形成了软件界的统一运输规范
  • docker 是容器技术的一种,它是将任何需要运送的代码进行封装、转移、管理的标准化工具,所有的软件交付工具、开发、测试、持续集成、部署、版本管理、运行环境都按照 docker 进行统一

容器实现了快速交付和部署

  • 容器是操作系统内核自带能力,容器是在 Linux 内核实现的 轻量级高性能资源隔离机制
  • 我们可以将容器与我们熟悉的虚拟机进行对比,虚拟机通过 Hypervisor 层实现了虚拟化,在 Hypervisor 层上面我们可以创建多个虚拟机,每个虚拟机都有自己的操作系统 Guest OS
  • Docker 相较而言就非常的轻量,它没有 Hypervisor 层,也不需要安装 Guest OS,它基于 docker engine 可以直接运行多个容器应用,docker 把程序所依赖的 bin 和 libs 文件都打包好了,所以容器的 移植性 非常强,可以跨云部署,轻量,能够更细粒度的去划分资源,提高资源的利用率,且能够实现资源的快速弹性伸缩
  • 部署裸机上的应用是小时级的,虚拟机是分钟级的,而容器是秒级的,可以 实现软件的快速交付以及部署

什么是容器技术

  • 容器技术在云计算领域可以分为两大类:一个是以 Docker 为代表的 容器引擎技术,另一个是以 K8S 为标准的 容器编排技术

  • Docker 代表容器引擎技术是因为 docker 主导了容器引擎的标准 OCI(OCI 定义了容器的编译方式、技术上的约束),很多其他容器技术都遵循或者兼容 OCI 标准,如 Kata 安全容器

  • Docker 的两个版本

    • docker CE community edition 是免费的开源社区版本
    • docker EE enterprise edition 是商用版,提供收费的技术支持

  • Kubernetes 是业界公认的容器编排领域的事实标准,几乎所有的公有云厂商的容器技术都是基于 kubernetes 实现的

Docker

什么是 Docker

  • 最主流的容器运行时技术,提供了容器的运行时能力,经过多次容器技术标准的演进和 OCI 标准和确立,目前 Docker 的框架如下所示

  • containerd 是容器技术标准化之后的产物,为了能够兼容OCI 标准,独立负责容器运行时和生命周期(如创建、启动、停止、中止、信号处理、删除等),从 daemon 中剥离,向 docker engine 提供运行容器的 API,通过 grpc 通信;每创建一个容器,containerd 都会创建一个 shim 进程,每个 shim 会调用 runc(前身是 libcontainer)进行实际的容器运行时管理,比如创建 namespace 的隔离

  • Docker 的技术特点

    • 容器镜像定义了统一的软件交付标准
    • 文件挂载提供了更小资源占用的运行环境
    • 共享 OS 内核使容器本质上只是一个进程,秒级启停
  • Docker 的优势

    • 统一的交付标准可以屏蔽环境差异,使能 DevOps
    • 更小的资源消耗,提高资源利用率,匹配微服务架构
    • 极速的弹性伸缩、故障恢复,解放运维生产力

Docker 的关键技术

  • Docker 所应用的几个关键技术实际上都不是 Docker 发明的,而是 Linux 早期成熟的技术,Docker 将这几个技术整合形成了革命性的成果

  • Namespace 负责运行环境的隔离,即每个容器都是一个 独立进程,通过 namespace 技术进行隔离,每个容器互相不可见,包括进程隔离、网络隔离、文件隔离
  • Cgroup 是负责运行资源的隔离或者说独占,可以为每个容器指定资源数量,互相不侵占
  • Union filesystem 是解决应用运行的小型化统一标准,容器镜像提供了容器运行的基础,但容器镜像并不等于容器

Docker 镜像

  • Docker 镜像是一个特殊的 文件系统,除了提供容器运行时所需的程序、库、资源、配置文件外,还包含了一些为运行时准备的一些配置参数,镜像不包含任何动态数据,它的内容在构建之后也不会改变。类似于一个快速部署的模版,打包好了应用程序和运行环境

  • 镜像的特点是 分层存储,由于镜像包含 OS 完整的 root 文件系统,其体积往往是庞大的,因此在 Docker 设计时,充分利用了 Union FS 的技术,将其设计为分层存储的架构,所以严格意义来说,镜像只是一个虚拟的概念,其由多层文件系统联合组成

  • 实际上容器镜像是一系列 分层的只读文件,当容器镜像运行为容器时,就会在镜像的最上层添加一个可写的层,也就是容器层,所有对于运行时容器的修改其实都是对这个容器读写层的修改,所有对容器的变化,比如写新的文件,修改已有文件和删除文件,都只会作用在这个容器层之中

  • 优点

    • 多个容器可以共享 image 存储,节省存储空间
    • 部署多个容器时,base image 可以避免多次拷贝,实现快速部署

Dockerfile 构建容器镜像

  • 通过前面我们已经了解了镜像的基本概念,我们可以发现镜像是应用发布的标准格式,那么如何去创建/制作镜像呢?
  • 根据 Dockerfile 构建镜像,通过 Dockerfile 描述可构建为一个 tar 包,通过 docker 客户端使用 build 命令构建一个镜像。当我们对镜像进行 run 操作的时候,就会启动一个容器
  • Docker 镜像生命周期管理
    • docker pull 从镜像仓库拉取一个镜像
    • docker push 推送镜像到镜像仓库
    • docker build 将 Dockerfile 构建为镜像
    • docker tag 为镜像打上一个标签
  • Docker 容器的生命周期管理
    • docker run 运行一个容器
    • docker stop 停止一个容器
    • docker start 启动一个容器
    • docker restart 重启一个容器
    • docker kill 杀掉一个运行的容器
    • docker pause 暂停一个容器

Docker 发布系统工作机制

  • 镜像提供了一种标准化运输或者发布方式,发布系统工作机制就是 build、ship、run
  • Docker 的三大组件
    • Docker 引擎
    • Docker 客户端
    • 镜像仓库

Docker 容器的持续部署流水线

  • 首先开发人员使用 git/svn 工具开发以及提交代码,触发测试和 Jenkins 编译构建(这里的测试通常是对于代码的测试,白盒测试)
  • Jenkins 根据代码工程中的 dockerfile 即可构建为 docker 容器镜像,然后使用镜像,触发部署
  • 通过 k8s 集群进行可视化编排与容器集群管理(如弹性伸缩,滚动升级等)
  • 统一格式打包的镜像可以一致性地部署到开发、测试、生产环境
  • 容器镜像作为 DevOps 流程的标准交付件,实现了跨阶段的标准化发布流程

容器让开发和运维协同工作

  • 开发人员
    • 关心容器内
      • code
      • Libraries
      • Package Manager
      • Apps
      • Data
    • 针对任何环境都采用同样方式打包
    • 除了开发时,也要关心运行时
  • 运维人员
    • 只需要担心容器外的事情
      • 远程访问
      • 监控
      • 网络配置
    • 所有的容器采用同样的方式启动、停止、复制、接入和升级

最后,欢迎大家关注我的个人微信公众号 『小小猿若尘』,获取更多IT技术、干货知识、热点资讯。同时,我在公众号中分享了精心整理的一些视频资料(包括 Python全栈教程、AI教程、前端、数据库等),大家回复相应关键词即可获取网盘视频链接,感谢大家的关注😊

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。