Docker 入门系列(一)-- Docker 的架构与优势


在这里插入图片描述

出现的问题

相信大家经常会遇到这样的事情,代码在我的机器上是可以跑的,但是同事复制一份代码到他的电脑上,却运行不了。出现这种情况,其实是我与同事电脑环境配置并不相同,代码想要跑起来,得操作系统,各种库,各类组件,甚至还要环境变量全部正确,才能正确运行。

可见,环境配置是非常麻烦的,严重影响了我们的工作效率。如果,我们在安装软件的时候直接带上环境,换言之,在安装的时候,我们直接 copy 一份环境过来,这样是不是可以从根本上解决问题呢?

虚拟机与 Linux 容器

带环境安装的一种解决方案便是使用虚拟机,它可以在一种操作系统里面运行另一种操作系统,而应用程序对此是没有感知的。从用户的角度来说,虚拟机与真实系统无异,而对于底层系统,虚拟机便是一个普通文件罢了,是不会影响其他部分的。

看起来虚拟机方案是那么的完美,这难道便是解决我们问题的终极答案嘛?说实话,虽然虚拟机确实可以解决我们的问题,但它的缺点也不少:

  1. 占用资源多:虚拟机会独占一部分内存和硬盘空间
  2. 冗余步骤多:虚拟机是完整的操作系统,一些系统级别的操作步骤是无法跳过的(例如用户登录)
  3. 启动慢:启动虚拟机所需要的时间跟启动操作系统的时间是相同的

显然,我们的答案不是虚拟机,那么另外一种虚拟化技术 Linux 容器能否解决我们的问题呢?

Linux 容器并不会像虚拟机一样模拟一个完整的操作系统,而是对进程进行隔离。你可以这么理解,Linux 容器在正常进程的外面套了一个保护层,对于容器里面的进程来说,它所接触到的资源都是虚拟的,实现了与底层系统的隔离。

Linux 容器与虚拟机相比,具备一定的优势:

  1. 启动快:启动容器相当于启动本机的一个进程,而不是一个操作系统,所以比较快
  2. 资源占用少:容器只占用需要的资源,虚拟机由于是一个完整的操作系统,故会占用全部资源。多个容器之间可以共享资源,而虚拟机之间是独占资源的
  3. 体积小:容器只需要包含用到的组件,而虚拟机打包了整个操作系统

总而言之,容器与虚拟机相比,开销更小。

Docker

Docker 是 Linux 容器的一种封装,是当前最流行的 Linux 容器解决方案。

Docker 将应用程序与相关依赖,打包到一个文件里面,运行这个文件会产生一个虚拟容器,程序在这个虚拟容器运行,就好像在真实的物理机上运行一样,所以我们使用 Docker 可以解决环境问题。

Docker 架构

Docker 有三个基本的概念:

  1. 镜像:创建 Docker 容器的模板
  2. 容器:镜像和容器的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体
  3. 仓库:用于保存镜像

Docker 使用客户端-服务器架构模式,使用远程 API 来管理和创建 Docker 容器。Docker 容器通过 Docker 镜像来创建。

Docker 具有客户端与服务端,Docker 守护进程作为服务端接受来自客户端的请求,并处理这些请求,例如创建、运行、分发容器,它一般在宿主主机后台运行,等待接收来自客户端的消息。

Docker 客户端通过命令行或者其他工具使用 Docker SDK 与 Docker 的守护进程通信。

Docker 为我们提供了 API 来操作 Docker 的守护进程,我们可以通过自己的程序来控制 Docker 的运行。客户端和服务端既可以运行在一个机器上,也可通过 socket 或者 RESTful API 来进行通信。

在这里插入图片描述

Docker 的一些优势

  1. 更快速的交付和部署。只需要一次创建或配置,便可以在任意地方正常运行。开发可以使用一个标准的镜像来构建一套开发容器,在开发完成之后,运维可以直接使用这个容器来部署代码
  2. 更高效的虚拟化:有着更高的性能和效率
  3. 更轻松的迁移和扩展:Docker 容器可以在任意平台运行
  4. 更简单的管理:Docker 所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理

分层存储

由于镜像包含了操作系统完整的 root 文件系统,其体积相当庞大,所以在 Docker 设计之初便把他设计为分层存储的架构。所以说,镜像并非是一个打包文件,而是由一组文件系统组成,或者说,由多层文件系统联合组成。

镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。

例如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像。因此,在构建镜像的时候,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。

分层存储的特征还使得镜像的复用、定制变的更为容易。甚至可以用之前构建好的镜像作为基础层,然后进一步添加新的层,以定制自己所需的内容,构建新的镜像。

参考:Docker 入门教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值