Docker学习历程(一):容器相关基础知识
一.虚拟化技术:
1.主机虚拟化:虚拟化整个硬件平台,例如vmware、virtual box,这些虚拟出来的是一个完整的物理裸机,可以在这个裸机上任意的安装os或软件
2.KVM和Docker的对比:
- KVM:基于硬件虚拟化技术,需要CPU支持,虚拟出整个虚拟机,虚拟机管理器需要占用额外系统资源,即使不运行任何虚拟机,也需占用6%的系统资源
- Docker:基于内核虚拟化技术,没有虚拟任何东西,通过隔离技术实现,不会给系统带来额外开销
3.Docker和OpenStack对比:
类别 | Docker | OpenStack |
部署难度 | 简单 | 组件繁多,部署复杂 |
启动速度 | 秒级 | 分级 |
执行性能 | 和物理机别无二致 | VM会占用一些额外资源 |
镜像体积 | MB级别 | GB级别 |
管理效率 | 简单 | 组件耦合性高,管理复杂 |
隔离性 | 隔离性高 | 彻底隔离 |
可管理性 | 单进程 | 完整系统管理 |
网络连接 | 较弱 | 借助Neutron可以灵活组件各类网络架构 |
4.虚拟机的必要性:
- 复用性:例如需要运行两个tomcat,让其工作在虚拟机中,就可以解决8080套接字的冲突问题
- 隔离性:一个进程在虚拟机中进行任何操作,对于其他虚拟机中的进程和物理机中的进程没有任何影响
5.相对隔离的方案:
- 一个主机在运行起来之后,分为内核空间和用户空间,在用户空间中运行用户空间进程
- 默认所有用户进程在同一用户空间,此时想要隔离多个进程的运行环境,可以创造多个用户空间,且用户空间是互相隔离的
- 这里相对独立的用户空间就是linux容器
二.容器:
1.隔离层:Linux的内核原生支持6种名称空间,在构建容器的时候,从这6种名称空间种抽取出一部分构成容器
namespace | 系统调用参数 | 隔离内容 | 内核版本 |
UTS | CLONE_NEWUTS | 主机名和域名 | 2.6.19 |
IPC | CLONE_NEWIPC | 消息队列、共享内存、信号量 | 2.6.19 |
PID | CLONE_NEWPID | 进程编号 | 2.6.24 |
Network | CLONE_NEWNET | 网络设备、网络栈、端口等 | 2.6.29 |
Mount | CLONE_NEWNS | 挂载点 | 2.4.19 |
User | CLONE_NEWUSER | 用户和用户组 | 3.0 |
2.LXC:LXC即为Linux Container,这是一种基于模板的方式实现容器技术应用的解决方案,在其中包含了一组工具例如lxc-create是用来快速创建容器的命令
3.Docker:
- Docker其实是LXC的二次封装发行版,是利用LXC作为容器引擎,同时使用镜像技术,将一个操作类型容器所需要的文件提取打包
- 当创建容器时,只需将该文件包复制若干份并启动容器,大大提高了容器创建的速度
- 在使用Docker创建容器时,其实就是利用lxc-create来创建容器,所以Docker极大的降低了容器的使用难度
- Docker用来存放镜像的服务器被称为Docker仓库,可在创建容器时按需拉取镜像
- Docker的工作设计:每个容器仅运行一个进程,不同容器间的进程通信使用通信逻辑进行,这种方案对于每个进程的安全隔离性也做出了保证
- Docker的另一优势:跨平台;同一Docker镜像在任一平台只要Docker版本相同就可以忽略不同平台的兼容性差异
4.Docker镜像的构建方式:分层构建,联合挂载
- 以一个底层的基础镜像为基础,在此镜像上部署所需应用后即为一层新镜像
- 启动容器时挂载基础镜像和新镜像层即可使用;当多个镜像的基础镜像为同一个时,只需下载一个基础镜像即可
5.Docker的容器工作模式:底层镜像为只读层,当需要在容器中进行写入修改等操作时,将底层资源复制一份在当前层进行修改,这种机制称为写时复制
三.容器编排工具:按序批量管理容器,可根据算法进行容器的管理
- Docker官方编排工具:machine+swarm+compose
- ASF编排工具:meos+marathon
- Google提供编排工具:kubernetes
四.Docker架构
架构层次(各部分间基于http或https通信):
- 客户端:client
- 服务器端:docker_hosts
- 仓库端:registery
1.Docker_hosts:服务器端靠运行docker daemon来维持在守护进程模式下,此时Docker会监听在一个套接字上,Docker支持ipv4、ipv6、unix socket三种套接字
2.Docker仓库:
- Docker的registery中提供了Docker镜像的存储功能,而且还提供了用户登录下载镜像时的认证功能
- 在Docker的registery中,还包括repository,一个repository就是一个目录,在一个目录中只存储一个应用的镜像
- 标识镜像:标识唯一的一个镜像,需要借助于tag(标签),通过repo名称和tag即可指定一个镜像
- Docker官方提供镜像仓库,但也可以使用第三方仓库或者私人搭建
五.Docker的应用场景:
- 简化配置:在不同环境下所需配置各不相同,使用Docker可以忽略这些差异,简化配置,用统一的镜像完成部署上线
- 生产环境:预生产环境、生产环境
- 测试环境:功能测试、性能测试
- 开发环境:此处因了解不多暂时略过
- 代码流水线管理:开发人员完成开发后,上传代码至服务器后由测试人员进行测试后进行灰度发布乃至正式发布
- 开发效率:可以用Docker进行统一的生产环境部署,进而使生产环境的部署自动化,降低新进开发人员的开发门槛
- 应用隔离:使用Docker的话可以便捷的隔离各个容器中的应用
- 服务器资源整合分离:用一台服务器实现多个实例部署
- 调试能力;对于BUG的处理能力
- 多用户共同协作平台的提供
- 灵巧性:Docker的启动速度在秒级,可以在极短时间内通过编排工具大量启动
六.已有一定规模的公司选择Docker的理由:
- 技术储备
- 提升自身技术,紧随技术趋势(主要原因)
- 符合业务需求