写完发现阮一峰的Docker入门教程写的更好
www.ruanyifeng.com/blog/2018/0…
一、Docker
!!!!跨平台、可移植、轻量级虚拟化技术
什么是Docker
Docker: 处理集装箱的码头工人
Docker源代码托管与GitHub,基于Go语言开发,并遵从Apache2.0
首先了解三层服务
-
IaaS: Infrastructure as a Service(基础设施即服务)
IaaS层为基础设施运维人员服务,提供计算,存储,网络及其他基础资源,云平台使用者可以在上面部署和运行包括操作系统和和应用程序在内的任意软件,无需再为基础设施的管理而分心。
-
PaaS:Platform as a Service(平台即服务)
Paas层为应用开发人员服务,提供支撑应用运行所需软件运行时环境、相关工具与服务,如数据库服务、日志服务、监控服务等,让应用开发者可以专注于核心业务的开发。
-
SaaS:Software as a Service(软件即服务)
SaaS层为一般用户服务,提供了一套完整可用的软件系统,让一般用户无需关注技术细节,只需通过浏览器、应用客户端等方式就能使用部署在云上的应用服务
这三层服务基本上概括了一个软件从开发到部署再到应用的整个过程,
docker的出现,模糊了IaaS和Paas的界限,为云计算的服务形式带来了无限可能。
个人理解是docker可以使运维人员不用直接面对基础设施,而是通过docker平台操作基础设施服务,这样的话其实开发人员就可以把运维的活干了,就不需要运维了。
优势
- docker相比于虚拟机,在资源利用率上和性能上有着巨大优势,而且使用起来高效便捷。只是虚拟出一个进程
- 构建一次,到处运行
- 可移植、跨平台
【注】docker更大的优势在于集群,微服务
www.ruanyifeng.com/blog/2018/0…
概念
1、容器
docker是以容器为资源分隔和调度的基本单位,封装整个软件运行环 境
特点
-
持续部署与测试,可移植,可复用
-
跨云平台支持
-
环境标准化和版本控制【代码版本控制和环境版本控制,方便回滚】
-
高资源利用率与隔离
-
容器跨平台性与镜像【构建一次,到处运行】
-
应用镜像仓库【Docker官方构建了一个镜像仓库,类似于Github,累计了很多镜像,所有人可以自由下载所需镜像】
-
通过操作系统内核技术(namespaces「资源隔离」、cgroups「资源配额」等)为容器提供资源隔离与安全保障
namespaces和cgroups是操作系统层面的东西,不做过多解释
2、镜像
站在巨人的肩膀上,可以在原有的镜像基础上构建自己的镜像
含有启动Docker容器所需的文件系统结构及内容
拉取的镜像也会保存到本地,也占用本地资源和空间
分层结构
镜像就像金字塔,是在原有的镜像基础上构建新的镜像
三层文件系统
- bootfs: Docker镜像最底层的引导文件系统
- rootfs:启动容器后内部可见的文件系统,即Docker容器的根目录
- 镜像:这一层就是该镜像中的特有环境,比如node的配置或apache的配置
技术特点
- 联合挂载技术
- 写时复制:
- 联合文件系统:使用联合挂载技术的文件系统通常被称为联合文件系统
docker镜像的文件挂载方式和传统的linux系统不同,传统方式是先挂载一个只读的rootfs,当系统检测其完整性之后,在切换为可读写模式;docker镜像的架构是利用联合挂载技术在已有的只读rootfs上再挂载一个读写层,这样,可读写层处于Docker容器文件系统的最顶层,其下可能联合挂载多个只读层,只有在Docker容器运行过程中文件发生变化时,才会把变化的文件内容写到可读层,并隐藏只读层中的老版本文件,这样的技术被称为写时复制。
3、registry
Docker镜像仓库,类似于Git仓库
Docker官方的公用registry:Docker Hub
Docker Hub
- user repository:用户仓库(用户创建)
- top-level repository:顶层仓库(Docker公司维护,该仓库下的镜像一般比较好,权威)
Docker三大核心内容
1、namespace 资源隔离
其实就是通过系统调用构建了一个相对隔离的shell环境
6项隔离(Linux内核)
- UTS: 主机名与域名
- IPC: 信息量、消息队列、共享内存
- PID: 进程编号
- Network: 网络设备、网络栈、端口等
- Mount: 挂载点(文件系统)
- User: 用户和用户组
2、cgroups 资源限制
cgroups是Linux内核提供的一种机制,这种机制可以根据需求把一系列任务及其子任务整合(或分割)到按资源划分等级的不同组内,从而为系统资源管理提供一个统一的框架。
其实就是对容器内进行各种限制,包括
- 资源限制:限制任务使用的资源总额,如内存等
- 优先级分配
- 资源统计
- 任务控制:任务的挂起、恢复等
3、写时复制机制(copy-on-write)
在多个容器之间共享镜像,每个容器在启动的时候并不需要单独复制一份镜像文件,而是将所有镜像层以只读的方式挂载到一个挂载点,再在上面覆盖一个可读写的容器层。在未更改文件内容时,所有容器共享同一份数据,只有在docker容器运行过程中文件系统发生变化时,才会把变化的文件内容写到可读写层,并隐藏只读层中的老版本文件。写时复制配合分层机制减少了镜像对磁盘空间的占用和容器启动时间。
使文件操作更加的高效
参考 www.cnblogs.com/sparkdev/p/…
【注】该文章参照《Docker容器与容器云》并结合自己的理解