Docker简介

1,178次阅读
没有评论

共计 2442 个字符,预计需要花费 7 分钟才能阅读完成。

一、为什么要有 Docker?

1. 一个软件从开发到部署的问题:运行环境的配置

2. 软件是否可以带环境安装:安装时将 开发的环境 一模一样的 复制 过来?

一款产品从开发到上线,从操作系统,到运行环境,再到应用配置
作为开发 + 运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题
特别是各种版本的迭代之后,不同版本环境的兼容,对运维人员都是考验
"Docker" 之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案

二、什么是 Docker?

  • 基于 Go 语言实现的云开源项目
  • docker 是一个开源的软件部署解决方案
🎅示例 1
你在金鱼店的鱼缸里买一条小金鱼回去, 养在家里的盆子里, 那么小金鱼有可能水土不服, 如果你把连鱼带缸的买回去就不会出现这种情况了, 因为生存环境没有改变 
🎅夸张示例 2
如果我们搬家, 一般是把家具之类的一件一件的搬到新房子里去, 然后到新房子里有重新布置,"Docker" 的理念就是直接把房子铲起来放置到新的住址, 那么里面的配置都不用动了, 直接可以入住
  • 解决了 运行环境 配置问题 的软件容器,方便 持续集成 并有助于整体发布的容器虚拟化技术

PS:docker理念: 一次构建处处运行

三、Docker 能做什么?

1. 运行环境的配置

  • 只需要一次配置好环境,可以移至任意机器上做到一键部署,大大简化了操作

2. 虚拟机技术

  • 在一个操作系统之上运行 / 安装另一种操作系统
  • 应用程序, 操作系统和硬件三者之间的关系不变
🎅缺点:
1. 资源占用多
2. 冗余步骤多
3. 启动慢(分钟级)

3. 容器虚拟化技术

  • 不是模拟一个完整的操作系统,他是将软件运行所需的所有资源打包到一个 隔离的容器
  • 只需要 软件工作 所需的 资源库和设置
  • 因此系统变得 高效轻量 ,且能保证 任何环境 中软件都能始终 如一的运行

Docker 简介

4. 虚拟机技术与容器虚拟化技术

  • 不同之处
🎅传统虚拟技术:
🔰虚拟出一堆硬件, 运行一个完整的操作系统
🔰然后在该系统上再运行一系列的应用程序

🎅容器虚拟化技术:
🔰容器内的应用进程直接运行在宿主的内核, 容器内没有机子的内核
🔰并且没有进行硬件的虚拟, 因此更轻便 (只包含业务所需要的环境:"docker" 基础镜像就 "170M")
🔰每个容器之间相互隔离, 每个容器都有自己的文件系统, 容器之间不会相互影响, 能区分计算资源

5. 底层原理

  • Docker 是怎么工作的
Docker 是一个 Client-Server 结构的系统
Docker 守护进程运行在主机上,然后通过 Socket 连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器
容器,就是一个运行时的环境
  • 为什么 Docker 比 VM 快
🔰docker 有着比虚拟机更少的抽象层
由于 docker 不需要 Hypervisor 实现硬件资源虚拟化, 运行在 docker 容器上的程序直接使用的都是实际物理机的硬件资源
因此在 CPU、内存利用率上 docker 将会在效率上有明显优势

🔰docker 利用的是宿主机的内核, 而不像虚拟机在宿主机上再运行一个内核
因此当新建一个容器时,docker 不需要和虚拟机一样重新加载这个操作系统内核
进而避免寻找、加载操作系统内核比较费时费资源的过程

🔰当新建个虚拟机时,虚拟机软件需要加载 Centos, 这个新建过程是 "分钟级别的"
docker 由于直接利用宿主机的操作系统,则省略了这个个过程因此新建一个 docker 容器只需要 "几秒钟"

6. 开发和运维问题解决

Docker理念:一次构建处处运行

  • 更快的应用交付和部署
🎅传统的应用开发完成后,需要提供一堆安装程序和配置说明文档,安装部署后需根据配置文档进行繁杂的配置才能正常运行

🎅Docker 化之后只需要交付少量容器镜像文件,在正式生产环境加载镜像并运行即可,应用安装配置在镜像里已经内置好,大大节省部署配置和测试验证时间
  • 更便捷的升级和扩缩容
🎅随着微服务架构和 Docker 的发展,大量的应用会通过微服务方式架构,应用的开发构建将变成搭乐高积木一样,每个 "Docker 容" 器将变成一块 "积木","应用的升级将变得非常容易"

🎅当现有的容器不足以支撑业务处理时,可通过镜像运行 "新的容器进行快速扩容",使应用系统的扩容从原先的天级变成分钟级甚至秒级
  • 更简单的系统运维
🎅应用容器化运行后,生产环境运行的应用可与开发、测试环境的应用 "高度一致",容器会将应用程序相关的环境和状态完全封装起来,不会因为底层基础架构和操作系统的不一致性给应用带来影响,产生新的 BUG

🎅当出现程序异常时,也可以通过测试环境的相同容器进行快速定位和修复
  • 更高效的计算资源利用
🎅Docker 是内核级虚拟化,其不像传统的虚拟化技术一样需要额外的 Hypervisor 支持, 所以在一台物理机上 "可以运行很多个容器实例",可大大 "提升物理服务器的 CPU 和内存的利用率"

四、容器的基本组成

1. 结构图

Docker 简介

2. 镜像:Image

  • 一个只读模板,一个镜像可以创建出来很多个容器
  • 类似于一个系统 U 盘,一个系统 U 盘可以装出很多台不同的电脑

3. 容器:Container

  • 独立运行的一个或一组应用,是由镜像实例化出来的
  • 可以把它看成是一个迷你版的 Linux 环境,基础镜像 170M
  • 它可以被启动、开始、停止、删除。每个容器都是相互隔离互不干扰的

4. 仓库:Repository

  • 集中存放镜像文件的场所
  • 仓库有两种区分
🎅仓库注册服务器:
🔰存放着多个仓库

🎅仓库:
🔰 每个仓库包含多个镜像, 每个镜像有不同的标签('tag': 类似于版本号)
🔰仓库分为公开仓库(Public)和私有仓库(Private)两种形式
🔰最大的公开仓库是 "Docker Hub:(https://hub.docker.com/)"

5. 总结

  • Docker 本身是一个容器运行载体或称之为 管理引擎
  • Image 文件生成的容器实例本身也是一个文件,称为 镜像文件
  • 同一个 Image 文件可以 生成多个同时运行 的容器实例
  • 一个容器运行一种服务,当我们需要的时候,就可以通过 docker 客户端创建一个对应的运行实例,也就是我们的容器
  • 至于仓库,就是 放了一堆镜像的地方,我们可以把镜像发布到仓库中,需要的时候从仓库中拉下来就可以了

正文完
 12
TheStars
版权声明:本站原创文章,由 TheStars 于2024-04-23发表,共计2442字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)

星光博客

随机文章