前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大蕉说k8s(2)-Docker&Docker化 No.198

大蕉说k8s(2)-Docker&Docker化 No.198

作者头像
大蕉
发布2021-01-04 10:43:01
3520
发布2021-01-04 10:43:01
举报

容器跟虚拟机区别

之前聊过,容器跟虚拟机的区别,就在于虚拟机使用了名为 Hypervisor 的 软件 它通过硬件虚拟化功能,模 拟出了运行一个操作系统需 要的各种硬件,比如 CPU、 内存、I/O 设备等等。 并在这些虚拟的硬件 上安装了一个新的操作系统, 即 Guest OS。Docker 并不像 Hypervisor 那样对 应用进程的隔离环境负责,也 不会创建任何实体的“容器”, 真正对隔离环境负责的是宿主 机操作系统本身。

Docker技术

那么具体什么是Docker技术,容我细细拆解。一个“容器”,实际上是一个由 Linux Namespaces、Linux Cgroups 、Docker 镜像 三种技术构建出来的进程的隔离环境。这三个技术相互配合,Linux Namespaces管隔离,Linux Cgroups 管限制,Docker 镜像解决环境和部署差异问题。

Linux Namespaces

那么Linux Namespaces 是啥?Linux Namespaces 本质上只是Linux 创建新进程的一个可选参数。在创建 Docker 进程时,Docker 为它们加上了 Linux Namespaces 参数。这时,这些进程就会觉得自己是 各自 PID Namespace 里的第 1 号进程。各自的系统资源也互相不可见,达到虚拟隔离的目的。

Linux Cgroups

什么是 Linux Cgroups ?Linux Cgroups 的全称是 Linux Control Group。它最主要的作用,就是限制一个进程组能够使用的资源上限,包括 CPU、内存、磁盘、网络带宽等等。这对应到 Docker 里就是资源的 limit,用来限制一个容器所能占用的资源大小,

Docker镜像

最后就到了最终的 Docker 镜像。说起镜像,大家在虚拟机时代可能都懂,就是一个创建一个新环境的模板文件,可以完整复制当时的环境,Docker 镜像也是这样,专门在用来容器技术里复制环境的一个模板。Docker 镜像是以层为单位管理的,每一个操作都是一个层,层与层之是叠加的关系。我把整个镜像的流程描述一下,首先是基础操作系统层准备好基础OS,然后用环境叠加层讲环境初始化,包含各种环境变量和工具,接下来编写 Docker File 对镜像进行打包和发布到镜像仓库。发布到镜像仓库的镜像包含镜像名和tag,可以按层进行下载,这样如果很多镜像都使用了同一个基础镜像是不需要重新下载的。下载完成之后将镜像各个层进行挂载,并且使用 UnionFS进行文件整合,然后使用Rootfs将镜像文件的目录作为容器的根目录,这样对于容器来说就拥有了整个操作系统。

PS:

Rootfs : 基于chroot用于挂载在容器根目录上、用来为容器进程提供隔离后执行环境的文件系统 Union File System :也叫 UnionFS,最主要的功能是将多个不同位置的目录联合挂载(union mount)到同一个目录下

Docker化

至于项目怎么Docker化,我整理出了一个流程。

1、操作系统确认,确认你基于的是 Linux操作系统,还是unbuntu,还是centos还是其他定制系统。

2、环境依赖项梳理,比如依赖python、jdk、c++库、或者其他驱动,都需要在这个环节梳理好。

3、项目打包脚本编写,将你的项目打包成一个可以被复制的包。

4、Dockerfile编写,将上面梳理好的内容,编写成可以被Docker识别的 Dockerfile格式,具体的语法可以参照我之前的文章 我学啥你就学啥Docker(1)No.125

5、项目启动脚本编写,所有的启动重启都应该被标准化成 start.sh 这样的标准脚本进行维护。

只要经过这一套做法,项目肯定可以 Docker 化,至少目前还没有遇到不行的。

以上就是对于 Docker 以及项目如何 Docker 化的理解,可以作为入门材料聊一聊,后面有机会我们继续细化其他 k8s 的内容。晚安~

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一名叫大蕉的程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档