前言
以linux而言,linux操作系统会有一个主进程pid=1派生出其他进程来控制不同服务,例如: pid=2 ——> python pid=3——>java pid4——>php,三个服务可能会相互影响,使用者期望将这三个不同的服务,跑在不同的运行时环境中实现相互不影响,同时不会增加服务器成本 ——> 延伸出——>能否将这三种服务分别封装起来——>KVM虚拟化技术,实现了一个操作系统模拟多个操作系统/不同的运行时环境 随着技术发展——>虚拟化技术开销较大(例如:只 要运行一个py脚本,想要使用虚拟化方式实现,还需要安装一个操作系统,并不方便/合理) ——>延伸出容器技术 虚拟化层的抽象层(用户层)剥离,使用docker engine来替代(来宾操作系统去除),只要通过引擎就可以直接连接到宿主机操作系统中,极大减小了开销。
一、虚拟化
二、KVM虚拟化
三、Docker
1、docker是什么?
Docker是一种轻量级的”虚拟机”,在linux容器里运行应用的开源工具。是一个用于开发,交付和运行应用程序的开放平台,docker使应用程序和基础架构分开,从而可以快捷交付软件,还是一个开源的应用容器引擎,让开发者可以打包大门的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的linux或者windows机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会任何接口。什么是沙箱,在计算机安全领域,沙箱是一种程序的隔离运行机制,
2、docker的使用场景
2.1、打包应用程序简化部署 2.2、可脱离底层硬件任意迁移
3、使用docker有什么意义
3.1、docker引擎统一了基础设施环境–docker容器环境 3.2、docker引擎统一了程序打包(装箱)方式–docker镜像 3.3、docker引擎统一了程序部署(运行)方式–docker容器 镜像----->封装的某一个时刻的服务/应用状态 容器----->应用跑起来的状态(正常提供服务的状态[运行时])
4、docker的使用场景
4.1、打包应用程序简单部署,可脱离底层硬件任意迁移(实现了应用的隔离,将应用拆开并进行解耦),例如:服务器从腾讯云迁移到阿里云 4.2、持续集成和持续交付(CI/CD);开发到测试发布部署微服务 4.3、提供PAAS产品(平台即服务)
四、docker引擎
Docker Engine是具有以下主要组件的客户端-服务端应用程序,服务器是一种长期运行的程序,称为守护程序进程(dockerd命令),REST API:它指定程序可以用来与守护程序进行通信并指示其操作的接口。命令行界面(CU)客户端(docker命令)
五、docker和虚拟机的区别
容器是依赖于内核来隔离,彼此的关系像共享一样,所以安全性较之虚拟机差一些,毕竟不是完全隔离。所以若一个容器被黑客攻破,宿主机基本也就没了。这里也不是完全没有办法,那就是 cgroup 资源分配,其能提供一定的安全机制
六、docker的核心概念
1、镜像
docker镜像是创建容器的基础,类似于虚拟机的快照,可以理解为是一个面向 Docker 容器引擎的只读模板,比如:一个镜像可以是一个完整的 CentOS 操作系统环境,称之为一个 CentOS 镜像一个安装了 MySQL 的应用程序,称之为是一个 MySQL 镜像。Docker 提供了简单的机制来创建和更新现有的镜像,用户也可以从网上下载已经做好的应用镜像来直接使用
2、容器
Docker 的【容器】是【从镜像创建的运行实例】,它可以被【启动、停止和删除】,容器即服务
2.1、创建的每一个容器都是相互隔离、互不可见的,相互之间隔离性超强,从而保证平台的全性 2.2、可以把容器看做是一个简易版本的 Linux 环境,Docker 可以利用容器来运行和隔离一个个应用
3、仓库
Docker 仓库时用来集中保存镜像的地方 创建完自己的镜像后,可以使用【push】命令将其上传至【公共仓库(public)】或【私有仓库(Private)】之后,在另一台机器上使用这个镜像,直接【pull】下来就可以了,仓库注册服务器【Registry】是存放仓库的地方,其中包含了多个仓库,每个仓库存放某一类镜像,并使用不同的标签【tag】来区分它们,目前最大的公共仓库是【Docker Hub】
|