关于系统的改造探索
第一部分------Docker篇
第一章 Docker容器
第二章 Docker安装
第三章 构建自定义镜像
第四章 搭建镜像仓库
第五章 容器编排
第六章 容器监控
文章目录
- 关于系统的改造探索
- 前言
- 一、就是你了------Docker
- 二、Docker概览
-
-
-
- [守护进程(Docker daemon)](#守护进程(Docker daemon))
- [客户端(Docker client)](#客户端(Docker client))
- 镜像(Images)、容器(Containers)
- [仓库(Docker registries)](#仓库(Docker registries))
-
-
- 总结
前言
随着业务的发展,传统的架构已经不符合项目的要求了。双活、集群也渐渐提上了日程。。。
一、就是你了------Docker
在使用之前,先了解下什么是容器 。相信作为开发,大部分人都使用Vmware 或VirtualBox 之类的虚拟机 软件装过Linux 系统,简单来说,容器 可以理解成一个mini版的虚拟机 。那为什么不直接用虚拟机 而是选用容器 呢?主要还是因为虚拟机 太重了,虚拟机 拥有操作系统完整的功能,但运行一个系统,不需要那么多的东西。像平时用虚拟机 装个Linux 系统,动辄4C4G起步,装的软件一多还得继续往上砸硬件,显然这成本就太高了。容器 就是基于这种情况下出现的,之所以轻量级,是除了软件必虚的环境之外,不安装多余的东西。之所以可移植,是容器 屏蔽了环境之间的差异,如果说是java 是一次编译,四处运行。那么容器就是一次打包,四处部署(相对而言)。计算机的世界,果然没有什么是加一层不能解决的,如果有,那就再加一层
了解完容器化 ,接下来就要挑选下用哪种容器化技术了。现在市面上的容器化 的技术有很多了,如:Containerd、 CRI-O、Docker 等。基于文档以及适用性的考虑,这里就选用Docker作为容器化工具
注:实际上容器并不是一个mini版的虚拟机,而是更加轻量级和灵活的解决方案。这里只是为了方便理解,容器共享宿主操作系统的内核,因此不需要额外的操作系统内核和资源。与此相比,虚拟机需要独立的操作系统和资源,因此更加笨重。容器并没有实现真正意义上的跨平台,还是依赖于操作系统,在部署的过程中,发现Linux打包的镜像无法再Windows部署,不过细想下:容器打包的镜像包含操作系统,Linux下打包的镜像,自然无法导入Windows。貌似也没毛病
二、Docker概览
一说到Docker ,想必大家脑海里都会浮现一只鲸鱼驮着一堆集装箱的图片,鲸鱼驮着一堆集装箱游走在各个海域。事实也是如此,鲸鱼就是Docker ,而集装箱,则是我们在Docker上打包安装的软件,海域则是不同的环境

了解完Docker ,接下来再来看下Docker 的架构,看下Docker具体怎么执行的。下边是官方给出的流程图,如下:

可以看出,Docker 主要分为:客户端、守护进程、仓库、镜像 这几部分。下边就一一来看下这几个某块分别的作用
守护进程(Docker daemon)
守护进程 是Docker 最核心的部分。负责处理客户端请求,监控容器运行状态、处理容器生命周期,管理资源,如:镜像、容器、网络都是由守护进程在管理,
客户端(Docker client)
客户端 就比较简单了,像平时敲得命令:docker、docker-compose 都属于客户端 。客户端 负责向守护进程发起请求
镜像(Images)、容器(Containers)
镜像(Images)、容器(Containers)、网络(networks)、卷(volumes)都属于docker 对象的一部分,这里主要说说下镜像和容器
镜像 和容器 的关系有点类似于类 和对象 的关系,镜像 是类(class)提供只读模板,容器 是基于镜像 创建的实例(instance),镜像 提供了容器 运行所需的文件系统和配置信息,而容器 则是镜像的一个具体实例,包含了运行时的状态和数据
仓库(Docker registries)
仓库 就比较好理解了,现在一般会部署集群,这时候如果没有仓库 ,就需要把各个镜像 上传到对应的服务器再进行安装,这显然不符合快速部署的要求,而且也存在版本管理和权限等问题。所以,一般会把镜像 发布在仓库 上,Docker自己去下载即可
那么这几个组件之间是如何配合工作的呢?以docker run
命令为例,大体流程:客户端 发起请求,守护进程 先查看本地是否存在镜像,不存在则去仓库 下载,而后创建出容器
访问 存在 不存在 下载 开始 docker daemon 本地存在? 本地 仓库 结束
总结
这篇先简单了解下Docker 和容器化技术,后边开始真正的使用。当然,上边都是个人在使用Docker时候的体验和理解,如果存在问题,欢迎大家指出