张福鹏博客

  • 首页
  • 记事本
  • Linux
  • 云计算
    • 虚拟化
    • 容器技术
  • 其他
  • 关于我
  • 邻居们
物来顺应,未来不迎,当时不杂,既过不恋。
  1. 首页
  2. 云计算
  3. 正文

Docker容器技术简介

2021年11月17日

 

Build once, Run anywhere

 

容器的概念是参照了航运中集装箱概念,在航运中不管你运输的是汽车还是棉花,它都使用集装箱将其进行了表转化的操作。容器的使命也是一样,容器具备自包含的能力,将自身程序所依赖的程序全部包含在了容器中,通过Docker将底层环境打通,用户可以将一个容器镜像运行在任何操作系统的宿主机上。

容器技术是一种虚拟化的方案。


虚拟机会让原本几十兆的应用动用几个G的操作系统去支撑,虚拟机需要模拟硬件的行为,会占用更多的资源,而容器虚拟化了操作系统,而不是硬件,提高了使用效率。

1、容器的优势:

容器不在依赖于独立的操作系统运行,相比较上图中的虚拟机它没有每个独立的操作系统;

容器是应用程序层的抽象存在,容器只关心中间件之上的应用,中间件与宿主机的操作系统之间的问题全部交给Docker来处理;

容器是云原生应用的基石。

容器技术使得底层资源使用率得到了进一步的提高。

2、Docker的核心概念:

Docker作为容器化软件的一种,是目前使用率最高的容器引擎,需要特别注意的是Docker并不等于容器。

Docker的基本组成有:客户端(Docker Client)、守护进程(Docker Daemon)、镜像(Docker image)、容器(Docker Container)、仓库(Docker Registry)

2.1、Docker Client客户端和Docker Daemon守护进程

Docker Clint向Docker Daemon发送请求,守护进程会返回结果。

2.2、Docker image镜像

Docker镜像是容器的基石,容器基于镜像启动和运行。镜像保存着容器启动的各种条件。Docker image是一个层叠的只读文件系统。

如上图所示,容器启动时,从下而上加载需要的镜像,镜像被依次移到内存中,最后,bootfs会被卸载。

在Docker中,rootfs永远只读,利用联合加载技术,在root文件系统的基础上加载更多的只读文件系统。

2.3、Docker Container

容器通过镜像启动。镜像出现在Docker生命周期中的构建和打包阶段,容器存在于启动和执行阶段。

当容器启动时,Docker会在镜像的最顶层加载一个读写文件系统。程序就在这一层执行,第一个启动时,这一层是空的,当文件系统变化时,都会应用到这一层。

Docker容器具备的能力:

  • 文件系统隔离:每个容器都有自己的root文件系统。
  • 进程隔离:每个容器都运行在自己的进程环境中。
  • 网络隔离:容器间的虚拟网络接口和IP地址都是分开的。
  • 资源隔离和分组:使用cgroups将CPU和内存之间的资源独立分配给每个Docker容器。

Docker底层用的Linux的cgroup和namespace这两项技术实现应用隔离。

2.4、Docker Registry仓库

Docker镜像仓库分为公有仓库和私有仓库。

2.5、Docker的三个核心概念:

1、镜像(image)

2、容器(Container)

3、仓库(Registry)

 

上图为Docker的整个运行逻辑。通过Docker Client将需要执行的Docker命令发送给Docker运行节点上的Docker daemon,Docker daemon将我们的请求进行分解执行。

例如:执行Docker build命令,Docker会根据Dockerfile构建一个镜像存放在本地;

执行Docker pull命令会从远端的容器镜像仓库拉取镜像到本地;

执行Docker run命令会将容器镜像拉取并运行成为容器实例。

3、Kubernetes:

当创建的容器越来越多的时候,对于容器管理来说其实是灾难性的,原来的10台服务器变成了100个容器。对于容器的管理就需要kubernetes。

kuberbetes是一款优秀的开源容器管理软件,它能对容器进行部署、发布、编排等一系列操作,极大的简化了容器的管理运维难度。

K8S是kubernetes的缩写,用8替代了ubernete。

3.1、K8S简介:

K8s是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。K8s可以:

  • 快速部署应用
  • 快速扩展应用
  • 无缝对接新的应用功能
  • 节省资源,优化硬件资源的使用

K8s的特点:

  • 可移植:支持公有云,私有云,混合云;
  • 可扩展:模块化,插件化,可挂载,可组合;
  • 自动化:自动部署,自动重启,自动复制,自动伸缩、扩展。

3.2、K8s架构原理

 

由上图可以看出,K8s架构就是一个Master对应一群Node节点。

Master节点结构:

  • apiserver即K8s网关,所有的指令请求都必须经过apiserver;
  • scheduler调度器,使用调度算法,把请求资源调度到某一个Node节点;
  • controller控制器,维护K8s资源对象;
  • etcd存储资源对象。

Node节点:

  • kubelet 在每一个 Node 节点都存在一份,在 Node 节点上的资源操作指令由 kubelet 来执行;
  • kube-proxy 代理服务,处理服务间负载均衡;
  • Pod 是 k8s 管理的基本单元(最小单元),Pod 内部是容器,k8s 不直接管理容器,而是管理 Pod;
  • Docker 运行容器的基础环境,容器引擎;
  • Fluentd 日志收集服务;

K8s是用来管理容器,但是不直接操作容器,最小操作单元是Pod(间接管理容器)。

一个Master有一群Node节点与之对应。

Master节点不存储容器,只负责调度、网关、控制器、资源对象存储。

容器的存储在Node节点,容器是存储在Pod内部的。

Pod内部可以有一个容器,或者多个容器。

Kubelet负责本地Pod的维护。

Kube-proxy负责负载均衡,在多个Pod之间来做负载均衡。

3.3、Pod概念:

Pod也是一个容器,相当于独立主机,这个容器中装的是Docker创建的容器,Pod是用来封装容器的一个容器,Pod是一个虚拟化分组;

Pod有自己的IP地址、主机名,相当于一台独立沙箱环境。

通常情况下,再部署服务时,使用Pod来管理一组相关的服务。一个Pod中要么部署一个服务,要么部署一组有关系的服务。

Pod内部容器之间访问采用Localhost,Pod之间的通信属于远程访问。

Pod是一个进程,是有生命周期的。宕机、版本更新,都会创建新的Pod。这时候IP地址也会发生变化,Hostname也会发生变化,使用Nginx做负载均衡就不太合适了。所以需要依赖Service的能力。

3.4、ReplicaSet副本控制器

控制Pod副本(服务集群)的数量,永远与预期设定的数量保持一致即可。当有Pod服务宕机时,副本控制器将会立马重新创建一个新的Pod,永远保证副本为设置数量。

ReplicaSet副本控制器控制Pod副本的数量。但是,项目的需求在不断迭代、不断地更新,项目版本将会不停的发版。ReplicaSet不支持滚动更新。

3.5、Deployment部署对象

ReplicaSet不支持滚动更新,Deployment对象支持滚动更新,通常和ReplicaSet一起使用。Deployment管理ReplicaSet。

对于K8s来说,Deployment是不能部署有状态服务的。一般情况下,Deployment被用来部署无状态服务,使用StatefulSet进行有状态服务的部署。

3.6、StatefulSet

StatefulSet是为了解决有状态服务使用容器化部署的一个问题。

StatefulSet保证Pod重新建立后,Hostname不会发生变化,Pod就可以通过Hostname来关联数据。

 

 

名词解析:

中间件:

中间件是位于计算机应用系统和系统软件之间的一类软件,用来衔接应用系统的各个部分或者不同部分。

中间件是基础软件的一大类,属于可复用软件的范畴。

简单来说中间件就是将具体业务和底层逻辑解耦的组件。

联合加载技术:

联合加载技术是一次加载多个文件系统,但是在外面看来好像只有一个文件系统。最终将各层文件叠加到一起,最终的文件系统包含所有的底层文件和目录。

有状态服务:

有实时的数据需要存储;

对于有状态服务集群来说,把某一个服务抽离出去,一段时间后再加入及其网络,则集群网络无法使用

无状态服务:

没有实时的数据需要存储;

无状态服务集群中,把某一个服务抽离出去,一段时间后在加入机器网络,对集群服务没有任何影响。

 

 

参考文章:

从0开始学Docker(上):https://zhuanlan.zhihu.com/p/94680821

Docker容器技术介绍:https://zhuanlan.zhihu.com/p/126687430

一文了解Kubernetes:http://jartto.wang/2020/07/15/start-k8s/

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: Docker Kubernetes 容器
最后更新:2021年11月17日

张福鹏

人生游戏 摸爬滚打

点赞
< 上一篇
下一篇 >

张福鹏

人生游戏 摸爬滚打

今天是:

载入天数...载入时分秒...

COPYRIGHT © 2024 张福鹏博客. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

鲁ICP备16006951号-1

鲁公网安备 37152102000011号
本站由又拍云提供云存储服务