1. 什么是docker

1.1个人主机时代----》云计算时代

1.个人主机时代大家比拼的关键是cpu主频的高低和内存的大小,
Cpu的性能指标:主频和缓存容量 (一级缓存,二级缓存等)
内存的性能指标:容量(缓存数据的多少)和频率(决定工作传输速度,内存数据的吞吐量i/o)
例如:程序,命令,脚本,进程都是在内存空间里
2.在云计算时代,虚拟化技术无疑是最核心的。
从上世纪60年代IBM推出的大型主机虚拟化到后来的x86平台上的虚拟化,虚拟化技术自身也在不断丰富和创新。
Ibm----推出时属于硬件虚拟化 X86----衍生为半硬件虚拟化

1.2单机多用户和专机专用户

  1. 单机多用户(服务器)—既有数据库用户管理数据库软件
    —也有应用用户管理应用程序
    缺点:会互相影响对方,各自使用的硬件是共享的
    2.专机专用
    专机专用(服务器)----就作为数据库服务器----相应的数据库用户管理对应的数据库软件
    专机专用(服务器)------作为应用服务器-----应用用户/管理对应的应用程序
    优点:各用各的硬件,互不影响

1.3ibm服务器和X86服务器

1)Ibm服务器—基于硬件进行资源划分,将不同的硬件资源划分到不同的逻辑分区上----有HMC软件链接硬件服务器
X86服务器----不能直接安装硬件----需要安装操作系统-----通过系统使用硬盘等
2)例如-----硬件资源-----IBM硬件虚拟化对硬件资源进行划分(HMC)
8个cpu 32g内存 6个硬盘插槽(2个硬盘适配器) 4个网卡
逻辑cpu=物理cpu*单颗cpu核心数
A)可以用ibm硬件虚拟化对硬件资源进行划分----可划分为:----单机多用户
4个cpu 16g内存 3个硬盘插槽(1个硬盘适配器)2个网卡-----逻辑分区1—安装操作系统(Aix)----作为数据库使用
4个cpu 16g内存 3个硬盘插槽(1个硬盘适配器)2个网卡-----逻辑分区2----安装操作系统Aix —作为应用程序使用
B)还可以划分成一个整体:----可以算是专机专用
8个cpu 32g内存 6个硬盘插槽(2个硬盘适配器) 4个网卡----逻辑分区1—安装操作系统Aix ----作为数据库使用
3).半硬件虚拟化—依赖于硬件但是又不完全依赖于硬件
服务器(宿主机)—操作系统(宿主机操作系统)—安装虚拟化管理程序/虚拟化软件(vmware)—构建虚拟环境(虚拟机)----操作系统(虚拟机操作系统)----应用
A)半硬件:
a)需要硬件支持虚拟化(cpu),启用虚拟化(在BIOS中设置虚拟化)----硬件
b)虚拟化管理程序(vmware) —软件

1.4.为什么会出现docker?

传统上认为,软件编码开发/测试结束后,所产生的成果既是程序或是能够编译执行的二进制字节,而为了让这些程序可以顺利执行,开发团队也的准备完整的部署文件,让运维团队得以部署应用程序,并且开发团队要清楚的告诉运维部署团队,用的全部配置文件+所有软件环境。即使是这样,也常常发生部署失败的情况。而docker的镜像的设计出现,让docker打破固有思维,通过镜像将作业系统除外,运作应用程序所需要的系统环境,由下而上打包,以此达到应用程序跨平台的无缝衔接。

1.5容器虚拟化

Docker 和k8s
在这里插入图片描述

1.6docker的主要理念

1)docker是基于go语言实现的云开源享目
2)Docker的主要目标是”(Build,ship an run any app,anywhere)”,即通过对应用组件的封装(Packaging),分发(Distribution),部署(Deployment),运行(Runtime)等生命周期的管理,达到应用组件级别的”一次封装,到处运行”.这里的应用组件,既可以是一个web应用,也可以是一套数据库服务,甚至是一个操作系统或编译器。
3)docker:就是解决了运行环境和配置问题的软件容器,方便做持续集成有助于整体发布的容器虚拟化技术
4)例如:–搭建数据库
A.物理机------安装操作系统----安装数据库软件----(生产环境使用)
优点:没有复杂的映射关系,性能高,硬件全部使用
新物理机----安装操作系统----安装数据库软件——迁移数据(要考虑数据的问题,比较麻烦和复杂)
缺点:迁移性低,需要具备较高的技术水平,
B.宿主机-----宿主机操作系统—虚拟机软件—虚拟机环境-----虚拟机操作系统—安装数据库软件
缺点:虚拟机的性能低,资源占用多,冗余步骤多,启动慢
新的宿主机-------宿主机操作系统—虚拟机软件—虚拟机拷贝
优点:迁移方便

1.7Linux容器技术

1)docker 引擎的基础就是Linux容器(Linux Containers-----LXC)技术,docker提供了各种容器管理工具(如分发,版本,移植等)
Linux容器部署模拟一个完整的操作系统,而是对进程进行隔离,有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器里。
不同的容器相互隔离,容器之间也可以建立通讯机制.容器的创建和停止都十分迅速,容器自身对资源的需求也十分有限,远远低于虚拟机,很多时候,甚至直接把容器当做应用本身也没有任何问题
容器和虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境种的软件都能始终如一的运行。
2)docker容器和传统虚拟化方式(半硬件虚拟化)的不同:
传统虚拟化技术是虚拟出一套硬件后,在其上运行一个完整的操作系统,在该系统上在
运行所需的应用进程。
容器内的应用进程直接运行于宿主的内核,容器内没有自动的内核,而且也没有进行硬
件虚拟,因此容器比传统虚拟机更轻便。
3)环境区别:
传统虚拟化场景:----半硬件虚拟化—会有损耗,性能差
宿主机(硬件)-----》宿主操作系统(内核)----》虚拟化管理程序(模拟硬件)----》虚拟机操作系统(内核)-----》运行环境(文件)----应用程序
(模拟硬件)+虚拟机操作系统(内核)+运行环境(文件)+应用程序==虚拟机
应用程序发起请求—》给虚拟机操作系统(内核)-----》虚拟机操作系统内核调用硬件(虚拟硬件)----内核调用虚拟硬件的请求会被虚拟化管理程序捕获----》转发到宿主机操作系统内核-----调用硬件
docker容器虚拟化场景:和一般场景使用没有区别
宿主机(硬件)-----》宿主操作系统(内核)----》安装docker引擎----》运行环境----》应用程序 运行环境+应用程序
=容器
应用程序发起请求----》宿主操作系统(内核)----》调用硬件
一般场景:
服务器(硬件)----》安装操作系统(提供内核)----应用程序
应用程序发起请求----》宿主操作系统(内核)----》调用硬件
在这里插入图片描述

1.8为什么使用docker

1)docker容器虚拟化的好处
例如:LAMP(Linux+Apache+MySQL+PHP)组合来运维一个网站,按照传统的做法,首先需要安装Linux操作系统+Apache+mysql和PHP以及他们各自运行所依赖的环境,之后分别对他们进行相应配置(包括创建合适的用户,配置参数等),经过大量的操作后,还需要进行功能测试,看是否工作正常,如果不正常,则意味着浪费更多的时间核面对不可控的风险。
一旦需要服务器迁移(云平台的迁移),往往需要重新部署核调试,这些琐碎的工作,极大的降低了工作效率。
Docker通过容器来打包应用,迁移时只需要在新的服务器上启动需要的容器就可以了,这样将节省大量的宝贵时间,并降低部署过程中出现问题的风险

1.9 docker在运维中的优势

1)更快速的交付和部署
2)更高效的资源利用 ----相对于虚拟机而言的
3)更轻松的迁移和扩展/缩容
4)更简单的更新管理/系统运维

1.10问题

1.宿主系统如果和容器系统不同的话,那不是和虚拟机一样,一层层的调用,那么 Docker 和虚拟机还有什么差别?
要把 Windows 和 Linux 分清楚,更要把内核(kernel)和 用户空间(userland)分清楚。
容器内的进程是直接运行于宿主内核的,这点和宿主进程一致,只是容器的用户空间(userland) 不同,容器的 userland 由容器镜像提供,也就是说镜像提供了 根文件系统(rootfs)。
假设宿主是 Ubuntu,容器是 CentOS。CentOS 容器中的进程会直接向 Ubuntu 宿主内核发送系统调用(syscall),而不会直接或间接的使用任何 Ubuntu 的 用户空间的库。 这点和虚拟机有本质的不同,虚拟机是虚拟环境,在现有系统上虚拟一套物理设备,然后在虚拟环境内运行一个虚拟环境的操作系统内核,在内核之上再跑完整系统,并在里面调用进程。
还以上面的例子去考虑,虚拟机中,CentOS 的进程发送 syscall 内核调用,该请求会被虚拟机内的 CentOS 的内核接到,然后 CentOS 内核访问虚拟硬件时,由虚拟机的服务软件截获,并使用宿主系统,也就是 Ubuntu 的内核及 userland 的库去执行。
而且,Linux 和 Windows 在这点上非常不同。Linux 的进程是直接发 syscall 的,而 Windows 则把 syscall 隐藏于一层层的 DLL 服务之后,因此 Windows 的任何一个进程如果要执行,不仅仅需要 Windows 内核,还需要一群服务来支撑,所以如果 Windows 要实现类似的机制,容器内将不会像 Linux 这样轻量级,而是非常臃肿。看一下微软移植的 Docker 就非常清楚了。 所以不要把 Docker 和虚拟机弄混,
Docker 容器只是一个进程而已,只不过利用镜像提供的 rootfs 提供了调用所需的 userland 库支持,使得进程可以在受控环境下运行而已,它并没有虚拟出一个机器出来。
Dock容器虚拟化场景
1)宿主机(硬件)-----》宿主操作系统(windows,内核)----》虚拟层(模拟Linux内核)----》安装docker引擎----》运行环境(Linux文件)----》应用程序(基于Linux开发)
如果宿主是Windows内核,应用程序是Linux开发的,宿主Windows内核是不能直接处理的,可以通过虚拟层模拟Linux内核的方式,运行应用程序,就和传统的虚拟化环境一样
2)宿主机(硬件)-----》宿主操作系统(Linux,内核)----》安装docker引擎----》运行环境(Linux文件)----》应用程序(基于Linux开发) 这是真正的dockr虚拟化
如果宿主是Linu内核,应用程序是Linux开发的,能直接找宿主Linux内核的
3)docker容器虚拟化技术本身原生于Linux操作系统。
容器虚拟化的前提都是Linux内核的中的lXC(Linux Containers-----LXC)技术
宿主机(硬件)-----》宿主操作系统(Ubuntu,内核)----》安装docker引擎----》运行环境(centos文件)----》应用程序(基于centos开发) 这个是可行的都是Linux内核
Centos软件无法在ubunt系统中运行
1…内核支持----》调用硬件
2.依赖运行环境.(文件)—
安装软件,要装a软件,必须先装b、c、d软件,–lib(函数库)–
而a软件在centos软件中有,ubuntu系统不一定有这些软件,那么依赖环境就不存在,就不能运行
2.下载网站
https://docs.docker.com/engine/install/
在这里插入图片描述

Docker-ce 社区版 docker-ee 企业版(收费)
3.关于docker的版本号
Docker 版本号在 2017 年以前,使用 <大版本号>.<小版本号>.<补丁版本号> 的结构,那时 Docker 基本会保持 3 个小版本号 之内的兼容性(如果一个特性宣布废弃,一般会在 3 个版本后才彻底移除)。 而从 2017 年春以后,Docker 使用了新版本号结构:<年>.<月>.<补丁版本号>,并且将每月发布一个前沿(Edge)版本,每季度发布一个稳定(Stable)版本。因此选择书籍也应该以介绍 2-3个季度以内版本 的书籍为准。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值