文章目录
看这里:
戳此链接 通往 关于 Docker 所有的学习文章 !
1、Docker 为什么会出现?
每当有一种新技术的出现,它肯定是有自己独特的特点的,或是为了满足一些需求的!那么 Docker 的出现 是为了满足什么需求呢?以及 它有什么独特的优点呢?
当 开发人员 将写好的程序代码打包发给运维后,运维人员在部署这个程序的时候可能会因为 环境 和 配置问题 常常导致 这个程序不能正常使用! 比如开发人员是在 ubuntu 上写的,但是运维呢 需要在 云服务器或其他OS 上部署该程序,这就导致了部署不成功等问题…
所以会面临:一个产品从开发到上线,从操作系统 、运行环境、应用配置。都需要 开发人员 和 运维人员 进行沟通、进行互相协作; 特别是程序的更新,不同版本环境的兼容,这都是考验!
还有就是,配置环境会很麻烦,换一台机器,就要从来一次!费时费力,还容易出错!这时候就慢慢提出了从根本上解决这个问题:安装软件的时候 将其 环境 与 配置文件 等等 全部装在一起!
举个更简单的例子:好比你去买汽车,店家肯定是给你组装好的汽车吧,并不是给你一堆零件和组装说明书让你回去自己组装,这就是好比 开发人员 将代码和完整的部署文件 交付给 运维团队,即便如此,也会常常发生 部署失败 的状况!Docker 将一个程序从基本的 代码/运行环境/配置… 等等全部都组装在一起,打包后的产物称之为 —— 镜像 !
Docker —— 一次构建,处处运行!
(前面你可以当成废话!记住最后这句话即可:)
简而言之,一句话:Docker 首次为 应用的开发、运行 和 部署 提供了 “一站式” 的实用解决方案!
2、Docker 简介:
1、Docker 基于 go 语言实现!Docker —— 容器虚拟化技术!
2、Docker 主要目标 “build、ship and run any app,anywhere” ,即 通过对 应用的封装(packaging) 、分发(Distribution)、部署(deployment)、运行(Runtime)生命周期进行管理,达到 :“一次构建、到处运行!”
官网原话:
3、Docker 容器在任何的操作系统上面都是一致的!实现了 跨平台、跨服务器,只需要一次配置好环境,然后将环境打包成镜像,再别的服务器上面直接使用 docker 下载该镜像即可使用 ! 一键部署 !方便快捷 !
4、Docker 解决了 运行环境 和 配置问题;它方便做 “持续集成” ,并且有助于 整体发布 !
3、Docker 与 虚拟化:
3.1 虚拟化是啥?
虚拟化是一种 资源管理技术!将计算机中的各种资源(内存、硬盘、网络…)予以抽象,转换后在呈现出来,打破了原来 实体结构 之间 不可切割的障碍!使得用户可以使用更好的方法来应用这些资源!
3.2 容器 和 虚拟化 :
Docker 技术 —— 容器虚拟化技术 ! 关于 虚拟化技术 你又知道多少?Docker 是参考之前的 虚拟化 技术,一步步迭代、优化过来的。
虚拟机: 带环境安装的一种,它可以在一个操作系统上安装另一个操作系统。对于应用程序来说,虚拟机就跟一个真实的操作系统一样;对于底层系统来说,虚拟机就是一个普通文件,不需要就删除对于系统没有什么影响!
虚拟机的缺点: 占用系统资源大、冗余步骤多、启动速度慢…
根据这些 虚拟机 的缺点,Linux 发展出了另一种虚拟化技术!—— LXC (Linux Container;Linux容器);LXC 并不是模拟一个完整的操作系统,而是通过对进程进行隔离!不需要捆绑整个操作系统,只需要软件工作所需要的资源和设置 即可 !所以 系统就变得 高效且轻量,并且保证了在任何环境中都可以正常运行!
容器技术 与 传统虚拟化技术 的不同之处:
传统虚拟化技术: 先虚拟出一套硬件,然后在这套硬件上面运行一个完整的操作系统,在该操作系统上面在运行所需要的应用!
然而,容器技术却不需要虚拟硬件,也不需要模拟一个完整的操作系统,容器内的所有进程都依赖于 宿主机 的内核 ! 因此 ,容器技术比 传统虚拟化技术更受欢迎,更加轻便!
传统虚拟机(虚拟硬件上 再运行一个操作系统):
4、容器 和 传统虚拟机 的对比:
对比图:
5、Docker 的优缺点:
优点:
1、更快的部署 和 交付:
使用 Docker ,开发人员可以使用镜像来快速的构建一套标准的开发环境! 开发完成之后,还可以直接对该环境进行打包;测试及运维人员可以使用完全相同的环境来部署代码!
节约开发、测试、部署的大量时间!
2、资源利用率高:
Docker 是内核级别的虚拟化,不需要虚拟硬件、独立OS 的支持,对资源的额外需求也很低!
3、启动速度快…
4、易于 扩展 和 移植 !
Docker 几乎可以在任意平台上运行,包括:物理机、虚拟机、云平台(公私云)、个人电脑、服务器… 等,同时还支持主流的 操作系统发行版本! 这种兼容性可以让我们在不同平台、不同服务器之间轻松的迁移 !
5、更方便的管理:
使用 Dockerfile ,只需要小小的配置修改,就可以替代以往 大量的更新工作 !
缺点:
1、隔离性差:
因为 传统虚拟化为 OS 隔离, 容器技术的隔离是 进程隔离,虽然有好处,但是隔离性说到底还是不如 OS 隔离 !尽管如此,进程隔离也是安全的!
2、调试工具:
传统的服务运行架构在一个kernel 、一个namespace 上,所有 服务共用一个调试工具 !
在容器技术中,每个服务运行在单独的容器中,每个容器都是一个单独的 namespace,所以每个容器都需要一套独立的调试工具!
6、百花齐放的容器技术 :
上面提到了: 由于 传统虚拟化存在:占用资源多、启动速度慢…等等缺点,慢慢根据这些缺点发展出了另一种虚拟化技术 —— LXC (Linux Caontainer ),现在的 Docker 技术 就是站在 LXC 的肩膀上 !
注意:Docker 并不是最早的容器技术,却是最火的容器技术。
7、Docker 的组件 :
8、Docker 工作原理:
1)、Docker引擎创建容器映像
2)、将容器映像传递给 containerd (容器运行时)
3)、containerd 调用 containerd-shim(本地编排工具)
4)、containerd-shim 使用 runC(命令行工具)来运行容器