【Docker】介绍

推荐视频课程配套食用:https://www.bilibili.com/video/BV1gr4y1U7CY/?vd_source=6d95a05fa9867baaa8ea7c5c52faf4e6
https://www.yuque.com/leifengyang/oncloud/mbvigg

1、Docker概念

  • Docker,容器虚拟化技术,为系统平滑移植提供了一个标准化的解决方案。
  • 通过镜像(Images)将应用程序和其所需的系统环境(系统核心除外)打包,实现软件带环境安装,使得应用及其运行环境做到一次镜像,处处运行。
  • Docker是基于Go语言实现的云开源项目,是基于Linux容器技术发展而来。
  • Docker容器在任何操作系统上都是一致的,应用通过镜像成为运行在Docker容器上面的实例,实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。
  • 一句话:解决了应用运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。

2、 虚拟机和容器

1、虚拟机

  • 虚拟机(Virtual Machine)是带环境安装的一种解决方案。
  • 通过VM可以实现在一种操作系统里面运行另一种操作系统。比如在Windows10系统里面运行Linux系统CentOS7。
  • 虚拟机的缺点:资源占用多、冗余步骤多、启动慢。

2、容器

  • Linux容器(Linux Containers,LXC)不是模拟一个完整的操作系统,而是对进程进行隔离。
  • 容器是与系统其他部分隔离开的一系列进程,由镜像提供进程所需的全部文件。
  • 可以将软件运行所需的所有资源打包到一个隔离的容器中。
  • 容器提供的镜像包含了运行应用的所有依赖项,因而在从开发到测试再到生产的整个过程中,它都具有可移植性和一致性

3、对比

  • 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程。
  • 容器不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。高效轻量并保证部署在任何环境中的软件都能始终如一地运行。
  • 容器内的应用进程直接运行于宿主主机的内核,容器内没有自己的内核且也没有进行硬件虚拟。
  • 每个容器之间互相隔离,每个容器有自己的文件系统,容器之间进程不会相互影响,能区分计算资源。
    在这里插入图片描述

3、 Docker 底层原理

在这里插入图片描述
1、Docker有着比虚拟机更少的抽象层。

由于Docker不需要Hypervisor(虚拟机)实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上Docker将会在效率上有明显优势。

2、Docker利用的是宿主机的内核,而不需要加载操作系统OS内核。

当新建一个容器时,Docker不需要和虚拟机一样重新加载一个操作系统内核。进而避免引寻、加载操作系统内核返回等比较费时费资源的过程。
当新建一个虚拟机时,虚拟机软件需要加载OS,返回新建过程是分钟级别的。
docker直接利用宿主机的操作系统,省略了返回过程,新建一个Docker容器只需要几秒钟。

3、Docker并非是通用容器工具,依赖于已存在的Linux内核环境。

Docker实质上是在已运行的Linux下制造了隔离的文件环境,因此执行效率几乎等同于所部属的Linux主机。

4、Docker 优点

  • 1、更快速的应用交付和部署

传统的应用开发完成后,需要提供一堆安装程序和配置说明文档,安装部署后需根据配置文档进行繁杂的配置才能正常运行。Docker化之后只需要交付少量容器镜像文件,在正式生产环境加载镜像并运行即可,应用安装配置在镜像里已经内置好,大大节省部署配置和测试验证时间。

  • 2、更便捷的升级和扩缩容

随着微服务架构和Docker的发展,大量的应用会通过微服务方式架构,应用的开发构建将变成搭乐高积木一样,每个Docker容器将变成一块“积木”,应用的升级将变得非常容易。当现有的容器不足以支撑业务处理时,可通过镜像运行新的容器进行快速扩容,使应用系统的扩容从原先的天级变成分钟级甚至秒级。

  • 3、更简单的系统运维

应用容器化运行后,生产环境运行的应用可与开发、测试环境的应用高度一致,容器会将应用程序相关的环境和状态完全封装起来,不会因为底层基础架构和操作系统的不一致性给应用带来影响,产生新的BUG。当出现程序异常时,也可以通过测试环境的相同容器进行快速定位和修复。

  • 4、更高效的计算资源利用

Docker是内核级虚拟化,其不像传统的虚拟化技术一样需要额外的Hypervisor支持,所以在一台物理机上可以运行很多个容器实例,可大大提升物理服务器的CPU和内存的利用率。

5、Docker 镜像

1、UnionFS(联合文件系统)

  • Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。
  • 特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录
  • Union 文件系统是镜像的基础。

2、Docker镜像

  • 镜像 Image是一种轻量级、可执行的独立软件包。
  • 镜像 Image包含应用程序及其运行所需的配置依赖:包括代码、运行时需要的库、环境变量和配置文件等。
  • 只有通过这个镜像文件才能生成Docker容器实例。
  • 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

3、Docker镜像加载原理

  • 镜像实际上由一层一层的文件系统UnionFS组成。
  • bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引导加载kernel, Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是引导文件系统bootfs。这一层与典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。
  • rootfs (root file system) ,在bootfs之上。包含的就是典型 Linux 系统中的 /dev, /proc, /bin, /etc 等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。

4、镜像分层

  • 镜像分层,支持通过扩展现有镜像,创建新的镜像。

类似Java继承于一个Base基础类,自己再按需扩展。新镜像是从 base 镜像一层一层叠加生成的。每安装一个软件,就在现有镜像的基础上增加一层。

  • 镜像分层最大的一个好处就是共享资源,方便复制迁移,就是为了复用。

比如说有多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需在磁盘上保存一份 base 镜像;
同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。

5、重点理解

  • Docker镜像层都是只读的,容器层是可写的。
  • 当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。
  • 当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。
    所有对容器的改动 - 无论添加、删除、还是修改文件都只会发生在容器层中。只有容器层是可写的,容器层下面的所有镜像层都是只读的。

6、平时我们安装进虚拟机的CentOS都是好几个G,为什么docker这里才200M??

对于一个精简的OS,rootfs可以很小,只需要包括最基本的命令、工具和程序库就可以了,因为底层直接用Host的kernel,自己只需要提供 rootfs 就行了。由此可见对于不同的linux发行版, bootfs基本是一致的, rootfs会有差别, 因此不同的发行版可以公用bootfs。

6、关键技术

1、镜像
Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。
docker镜像文件类似于Java的类模板,而docker容器实例类似于java中new出来的实例对象。

2、容器
容器为镜像提供了一个标准的和隔离的运行环境,它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
容器,是一个运行时环境,就是我们前面说到的集装箱。

3、仓库
仓库(Repository)是集中存放镜像文件的场所。
仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
最大的公开仓库是 Docker Hub(https://hub.docker.com/)
需要的时候再从仓库中拉下来就可以了。

4、小结
Docker 本身是一个容器运行载体或管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就是image镜像文件。只有通过这个镜像文件才能生成Docker容器实例。
image文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。

image 文件生成的容器实例,本身也是一个文件,称为镜像文件。
一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是我们的容器。

Docker是一个Client-Server结构的系统,Docker的后台守护进程运行在主机上,然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值