Skip to content

Docker Learning Report csd

YagoToasa edited this page Oct 19, 2019 · 1 revision

Docker 官网

Docker 文档

容器

基本概念

  1. 容器镜像是轻量的,可执行的独立软件包
  2. 容器化软件适用于基于Linux和Windows的应用,在任何环境中都能够运行。
  3. 容器赋予了软件独立性

容器就是将软件打包成标准化单元,以用于开发、交付和部署。

与虚拟机的区别

  1. 每个虚拟机中都有一个独立的Kernel,而容器只有一个独立Kernel。
  2. 容器虚拟化的是操作系统而不是硬件,容器之间共享同一套操作系统 —— 应用层抽象
  3. 虚拟机先虚拟出一套硬件,再在其上运行一个完整的操作系统 ——物理硬件层抽象
  • 对比表
特性 容器 虚拟机
启动 秒级 分钟级
硬盘使用 MB GB
性能 接近原生 弱于原生
系统支持量 单机支持上千个容器 一般几十个
隔离 隔离不同应用 彻底隔离运行环境
适用场景 前端、后端、数据库 云服务器供应商隔离不同用户
  • 架构图 图1

  • 容器与虚拟机可共存 图2

Docker

简要介绍

  1. Docker是对进程进行封装隔离的操作系统层面的虚拟化技术。隔离的进程独立于宿主和其他的隔离进程,因此也称为容器。
  2. Docker能够自动执行重复性任务,如:搭建和配置开发环境
  3. Docker可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

Docker容器特点

  1. 轻量

    • 多个Docker容器共享Kernel。
    • 启动速度快,计算和内存资源占用少。
    • 镜像共享一些公共文件(镜像通过文件系统层构造),降低磁盘使用量,下载速度快。
  2. 标准

    Docker 容器基于开放式标准(OCF, Open Container Format),能够在所有主流 Linux 版本、Microsoft Windows 以及包括 VM、裸机服务器和云在内的任何基础设施上运行。

    容器标准化宗旨: 操作标准化、内容无关、基础设施无关、为自动化量身定制、工业级交付

  3. 安全

    Docker容器彼此隔离,且相互独立于底层的基础设置。单个容器的应用出现问题,不会影响整台机器

Docker的优势

  • 镜像提供一致的运行环境(除Kernel外)
  • 启动速度快:节约开发、测试、部署的时间
  • 迁移方便
  • 隔离性好
  • 持续交付和部署:通过定制应用镜像来实现持续集成、持续交付、部署
  • 弹性收缩,快速扩展:善于处理集中爆发的服务器使用压力

基本概念

镜像(Image)

Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。其不含有任何动态数据,且构建后,内容不变。

镜像——分层存储架构——多层文件系统联合组成——L层是L+1层的基础,但L+1层对L层不会产生影响——易于复用——可基于已有镜像构建新的镜像来实现定制。

容器(Container)

容器与镜像的关系:镜像是静态的,容器是动态的。容器是镜像运行时的实体,可以被创建、启动、停止、删除、暂停等。

容器的实质——进程,但区别于直接运行在宿主机上的进程,容器进程运行于属于自己的、独立的命名空间

容器——分层存储架构:容器存储层的生命周期和容器一样,容器消亡,容器存储层消亡。

Docker最佳实践的要求:

  • 容器不应该向其存储层内写入任何数据 ,容器存储层要保持无状态化。

  • 所有的文件写入操作,都应该使用数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。

  • 数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此, 使用数据卷后,容器可以随意删除、重新 run ,数据却不会丢失。

仓库(Repository)

Docker Registry:集中的存储、分发镜像的服务

一个Docker Registry——包含多个Repository;

一个Repository——包含多个Tag;

一个Tag——一个镜像;

仓库与镜像的关系:仓库用于集中存放镜像文件。一个仓库可以包含同一个软件不同版本的镜像(常用Tag来指定软件的版本<RepositoryName><Tag>latest为默认标签)。