docker初识
虚拟化的实现形式
1、主机级虚拟化
Type-〡 :直接在硬件资源安装 Hyper-V ----> 虚拟机
Type-〢 :在HOSTOS ---> VMWARE ---> 虚拟机
# 硬件平台【HOSTOS】 --- > VMWARE --->虚拟机
? 减少中间环节--->提高效率(去掉内核--->资源隔离?)
2、容器级虚拟化
硬件平台--->虚拟的资源环境管理器--->容器
容器技术的实现有很多种(docker...)
如何实现虚拟化?
每个虚拟化的容器都需要单独的资源,这些资源包括(UTS,Mount,IPC,PID,User,Net)这些都要相互隔离,
这些内核级的Namespace原生支持
只不过其中User是在内核3.8以后才有的, centos7可以
资源控制 Control Groups
把系统级的资源分成多个组,然后把每个组的资源量分配到特定的用户空间的进程上
虚拟化的实现
1、LXC( Linux Container)
Lxc-create 快速创建一个容器,名称空间
Template,创建完一个名称空间会自动执行的脚本;指向了系统发行版的仓库
前提:Cgroups和namespace
缺点:1、要学好lxc的各种工具,2、定制模板、3迁移困难,批量创建也不容易,4、隔离性不高
优点:提高性能
2、Docker
容易迁移
轻量级
解决了软件调度分发
资源利用率更高
docker是lxc的增强版
早期版本:二次封装发行版,利用lxc做容器管理引擎,创建容器时不再是模板现场安装生成的,而是利用镜像技术,不会激活模板安装,而是连接镜像服务器,
下载一个匹配一个你所创建的容器的镜像
docker建议一个容器一个进程
缺点:
1、共享的文件多占空间
2、程序出现故障,调试工具需要准备多份(一个容器一份)
3、运维:编排工具来完成,增加了难度;
优点:
1、分发容易,部署环境只需要有docker,到处可以运行
2、降低了开发难度
3、批量创建容易:(分层构建、联合挂载、数据脱离容器存储在外部)
4、
运维编排:能在docker之上,把应用程序依赖关系、按顺序执行反映在启动、关闭时的应用逻辑之中
容器编排工具:
docker的swarm+machine+composer
Mesos+marathon
Kubernets --- > k8s
docker是golang开发的
DockerHub是docker默认registry
docker的架构
client 与docker_host分别是客户端、服务端
之间采用 unix.socket方式通信; 不是ip+port的方式
镜像:静态的
容器:动态的,有生命周期
docker registry:
为什么不是repository
1、提供镜像服务的仓库
2、用户来获取镜像的认证工作
3、存放所有镜像的一个索引