文章目录
- 前言
- 一、虚拟化概述
- 1.虚拟化三种模式
- 2.虚拟化功能
- 3.三个层面
- 二、Docker容器概述
- 1.6大名称空间
- 2.Docker和虚拟化的区别
- 3.使用docker有什么意义
- 4、应用场景
- 三、docker的核心概念
- 1.镜像(Image)
- 2.容器(Container)
- 3.仓库(Repository)
前言
Docker 是在 Linux 容器里运行应用的一种开源工具,是一种轻量级的虚拟机
-
以linux而言,linux操作系统会有一个主进程pid=1派生出其他进程来控制不同服务
-
例如: pid=2 ——> python pid=3——>java pid4——>php,三个服务可能会相互影响
-
使用者期望将这三个不同的服务,跑在不同的运行时环境中实现相互不影响,同时不会增加服务器成本
——> 延伸出——>能否将这三种服务分别封装起来——>KVM虚拟化技术,实现了一个操作系统模拟多个操作系统/不同的运行时环境 -
随着技术发展——>虚拟化技术开销较大(例如:只 要运行一个py脚本,想要使用虚拟化方式实现,还需要安装一个操作系统,并不方便/合理)
——>延伸出容器技术
-
虚拟化层的抽象层(用户层)剥离,使用docker engine来替代(来宾操作系统去除),只要通过引擎就可以直接连接到宿主机操作系统中,极大减小了开销
一、虚拟化概述
虚拟化:将应用程序和系统内核资源进行解耦,以操作系统级别进行隔离,目的是提高资源利用率
1.虚拟化三种模式
- 全虚拟化(50%)
- 半虚拟化(软、硬件结合的方式)
- 直通(以全硬件的方式实现虚拟化的功能)
2.虚拟化功能
- 在一个操作系统内,模拟多个操作系统
- 以软件的方式模拟物理设备的功能
3.三个层面
- 操作系统层
- 抽象层
- 内核层
二、Docker容器概述
名称空间:以不同空间划分不同资源
1.6大名称空间
namespace资源隔离——用容器技术封装
mount | 文件系统,挂载点——>一个文件系统内,不能重复挂载一个指定目录 |
---|---|
user | 操作进程的用户和用户组 |
pid | 进程编号 |
uts | 主机名和主机域 |
ipc | 信号量、消息队列、共享内存(不同的应用调用内存资源的时候应该使用不同的内存空间) |
net | 网络设备、网络协议栈、端口等 |
ipc:把内存资源划分开来,给不同的进程去用,每个应用的进程会给它分配一块资源,它只能用自己的(进程级别隔离)
net:网络资源
2.Docker和虚拟化的区别
小而灵活,效率至上!
特性 | Docker 容器 | 虚拟机虚拟化 |
---|---|---|
启动速度 | 秒级 | 分钟级 |
运行性能 | 接近原生(直接在内核中运行)10%-20% | 50%左右损失 |
磁盘占用 | 50-100MB | 3-5G |
数量 | 成百上千,每个进程可控制一个容器 | 几十个 |
隔离性 | 进程级别 | 操作系统(更彻底) |
操作系统 | 主要支持Linux | 几乎所有 |
封装程度 | 只封装目标代码和依赖关系,共享宿主机内核 | 完整的操作系统,与宿主机隔离 |
容器是依赖于内核来隔离,彼此的关系像共享一样,所以安全性较之虚拟机差一些,毕竟不是完全隔离。所以若一个容器被黑客攻破,宿主机基本也就没了~
这里也不是完全没有办法,那就是 cgroup 资源分配,其能提供一定的安全机制
Docker 拥有的众多优势与操作系统虚拟化的特点是分不开的:
- 传统虚拟机需要有额外的虚拟机管理程序和虚拟机操作系统层
- 而 Docker 容器是直接再操作系统层面之上实现的虚拟化
3.使用docker有什么意义
①相同版本的docker引擎
②打包成镜像包,拖到另一个操作系统中(把引擎放在镜像中,带着镜像到处跑)
③利用引擎把这个镜像再去运行为之前的相同的一模一样的容器了
镜像——>封装的某一时刻的服务/应用状态
容器——>应用跑起来的状态(正常提供服务的状态—运行时running)
4、应用场景
-
打包应用程序简单部署
-
可脱离底层硬件任意迁移(实现了应用的隔离,将应用拆分并进行解耦)例如:需要把服务器从腾讯云迁移到阿里云,如果采用的是 Docker 容器技术,整个迁移的过程只需要在新的服务器上启动我们需要的容器就可以了
三、docker的核心概念
1.镜像(Image)
docker镜像是创建容器的基础,类似于虚拟机的快照
- 可以理解为是一个面向 Docker 容器引擎的只读模板,比如:
- 一个镜像可以是一个完整的 CentOS 操作系统环境,称之为一个 CentOS 镜像
- 一个安装了 MySQL 的应用程序,称之为是一个 MySQL 镜像
- …
- Docker 提供了简单的机制来创建和更新现有的镜像,用户也可以从网上下载已经做好的应用镜像来直接使用
2.容器(Container)
Docker 的【容器】是【从镜像创建的运行实例】,它可以被【启动、停止和删除】,容器即服务
- 创建的每一个容器都是相互隔离、互不可见的,相互之间隔离性超强,从而保证平台的安全性
- 可以把容器看做是一个简易版本的 Linux 环境,Docker 可以利用容器来运行和隔离一个个应用
3.仓库(Repository)
Docker 仓库时用来集中保存镜像的地方
- 创建完自己的镜像后,可以使用【push】命令将其上传至【公共仓库(public)】或【私有仓库(Private)】
- 之后,在另一台机器上使用这个镜像,直接【pull】下来就可以了
仓库注册服务器【Registry】是存放仓库的地方,其中包含了多个仓库,每个仓库存放某一类镜像,并使用不同的标签【tag】来区分它们
目前最大的公共仓库是【Docker Hub】