参考了网上的一些内容:javaGuide等
目录
容器相关概念
什么是容器
容器概念
将软件打包成标准单元,用于开发、交付和部署
- 容器镜像是轻量的、可执行的独立软件包
- 在任何环境都可以始终如一的运行(Windows、Linux)
- 容器赋予了软件独立性,有助于避免环境配置差异和不同人员软件版本对开发过程的影响
物理机、虚拟机和容器的差异
物理机就是个人电脑,资源是完全相互独立的
虚拟机是虚拟一套硬件,在硬件之上运行完整的操作系统,共享物理机的硬件资源
容器是虚拟化的操作系统,而非硬件,容器之间共享同一操作系统的资源,隔离性比虚拟机低
物理机:
虚拟机:
容器:
什么是docker
概念
- 软件容器平台
- 利用Go开发,基于CGroup功能和namespace实现,对进程进行了封装隔离,属于操作系统层面的虚拟化技术
- 可自动执行重复化任务
- 用户可以方便的创建和使用容器,把自己的应用放入容器。还可以进行版本管理、复制、分享、修改
特点
- 一致性运行环境:确保应用环境一致性
- 更快的启动时间
- 隔离性
- 弹性扩展:能够处理集中爆发的服务器压力
- 迁移方便
- 持续交付和部署
容器和虚拟机的对比
简单来说,容器和虚拟机都是通过对资源的虚拟化实现隔离和分配的,但功能有所不同,容器虚拟化的是操作系统而虚拟机虚拟化的是硬件,因此,容器的隔离级别稍低,但可移植性更高
- 虚拟机是虚拟化一套硬件之后,在其上运行完整的操作系统,在该系统内运行所需应用进程,适用于将单服务器通过隔离变成多服务器,隔离不同用户
- 容器内的应用进程直接运行在宿主内核上(用户空间),容器没有自己的内核,容器相对来讲更轻便
docker基本概念
docker主要有三个基本概念:
- 镜像(Image)
- 容器(Container)
- 仓库(Repository)
镜像(Image):特殊的文件系统
操作系统分为内核和用户态,内核启动后,会挂载root文件系统挂在用户空间支持。
Docker中的镜像(Image)就相当于是root文件系统
docker镜像是一个特殊的文件系统,除了提供容器运行时的程序、库、资源、配置等文件外,还包括运行时准备的一些配置参数(匿名卷、环境变量、用户等)。
镜像不包含任何动态数据,其内容构建之后也不会改变
docker的镜像利用了Union FS技术,采用分层存储架构,因此镜像实际上是由多层文件系统联合组成
镜像构建时,一层一层构建,前一层是后一层的基础,每层构建完之后就不在改变,后一层的任何改变都只发生在自己的层上。
容器(Container):镜像运行的实体
容器是镜像运行的实体,可以被创建、运行、暂停、删除等
属于自己独立的namespace
仓库(Repository):镜像存储文件的地方
存储和分发镜像的服务
docker底层原理
虚拟化技术
虚拟化技术是一种资源管理技术,通过对cpu、内存、磁盘空间的抽象和转换,呈现出可供分割、组合的一个或多个电脑配置环境。虚拟化资源一般包括计算能力和数据存储
docker基于LXC虚拟容器技术
LXC技术(Linux Container)主要是借助Linux内核中的CGroup功能和namespace来实现的,为软件提供一个独立的操作系统运行环境。
- namespace:是Linux内核用来隔离内核资源的方式,进程只能看到自己namespace范围内的资源
- CGroup (Control Group):是内核提供的一种可以限制、记录、隔离进程组(process group)所使用的物力资源(cpu、memory、i/o等)的机制
cgroup和namespace对比:
namespace是为了隔离进程组之间的资源;
cgroup是为了对一组进程进行统一的资源监控和限制;