-
Notifications
You must be signed in to change notification settings - Fork 0
Docker Learning Report csd
- 容器镜像是轻量的,可执行的独立软件包。
- 容器化软件适用于基于Linux和Windows的应用,在任何环境中都能够运行。
- 容器赋予了软件独立性。
容器就是将软件打包成标准化单元,以用于开发、交付和部署。
- 每个虚拟机中都有一个独立的Kernel,而容器只有一个独立Kernel。
- 容器虚拟化的是操作系统而不是硬件,容器之间共享同一套操作系统 —— 应用层抽象
- 虚拟机先虚拟出一套硬件,再在其上运行一个完整的操作系统 ——物理硬件层抽象
- 对比表
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用 | MB | GB |
性能 | 接近原生 | 弱于原生 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
隔离 | 隔离不同应用 | 彻底隔离运行环境 |
适用场景 | 前端、后端、数据库 | 云服务器供应商隔离不同用户 |
-
架构图
-
容器与虚拟机可共存
- Docker是对进程进行封装隔离的操作系统层面的虚拟化技术。隔离的进程独立于宿主和其他的隔离进程,因此也称为容器。
- Docker能够自动执行重复性任务,如:搭建和配置开发环境
- Docker可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
-
轻量
- 多个Docker容器共享Kernel。
- 启动速度快,计算和内存资源占用少。
- 镜像共享一些公共文件(镜像通过文件系统层构造),降低磁盘使用量,下载速度快。
-
标准
Docker 容器基于开放式标准(OCF, Open Container Format),能够在所有主流 Linux 版本、Microsoft Windows 以及包括 VM、裸机服务器和云在内的任何基础设施上运行。
容器标准化宗旨: 操作标准化、内容无关、基础设施无关、为自动化量身定制、工业级交付
-
安全
Docker容器彼此隔离,且相互独立于底层的基础设置。单个容器的应用出现问题,不会影响整台机器
- 镜像提供一致的运行环境(除Kernel外)
- 启动速度快:节约开发、测试、部署的时间
- 迁移方便
- 隔离性好
- 持续交付和部署:通过定制应用镜像来实现持续集成、持续交付、部署
- 弹性收缩,快速扩展:善于处理集中爆发的服务器使用压力
Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。其不含有任何动态数据,且构建后,内容不变。
镜像——分层存储架构——多层文件系统联合组成——L层是L+1层的基础,但L+1层对L层不会产生影响——易于复用——可基于已有镜像构建新的镜像来实现定制。
容器与镜像的关系:镜像是静态的,容器是动态的。容器是镜像运行时的实体,可以被创建、启动、停止、删除、暂停等。
容器的实质——进程,但区别于直接运行在宿主机上的进程,容器进程运行于属于自己的、独立的命名空间。
容器——分层存储架构:容器存储层的生命周期和容器一样,容器消亡,容器存储层消亡。
Docker最佳实践的要求:
容器不应该向其存储层内写入任何数据 ,容器存储层要保持无状态化。
所有的文件写入操作,都应该使用数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。
数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此, 使用数据卷后,容器可以随意删除、重新 run ,数据却不会丢失。
Docker Registry:集中的存储、分发镜像的服务
一个Docker Registry——包含多个Repository;
一个Repository——包含多个Tag;
一个Tag——一个镜像;
仓库与镜像的关系:仓库用于集中存放镜像文件。一个仓库可以包含同一个软件不同版本的镜像(常用Tag来指定软件的版本<RepositoryName><Tag>
,latest
为默认标签)。