1 什么是 Docker
Docker 使用 Google
公司推出的 Go 语言 进行开发实现,基于 Linux
内核的 cgroup,namespace,以及 OverlayFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器
Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker
技术比虚拟机技术更为轻便、快捷
2 为什么要用 Docker
- 更高效的利用系统资源:不需要进行硬件虚拟以及运行完整OS等额外开销
- 更快速的启动时间:直接运行于宿主内核(秒级、甚至毫秒级的启动时间)
- 一致的运行环境:提供了除内核外完整的运行环境,确保了应用运行环境一致性
- 持续交付和部署:一次创建或配置,可以在任意地方正常运行;开发人员可以通过 Dockerfile 来进行镜像构建并进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至自动部署
- 更轻松的迁移:在不同平台(物理机/虚拟机/公有云/私有云)上运行的结果是一致的
- 更轻松的维护和扩展:分层存储以及镜像的技术,简化了应用的复用和维护更新
Docker VS 传统虚拟机:
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为 MB |
一般为 GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
3 Docker 基本概念
镜像(Image):一个特殊的文件系统
- 提供容器运行时所需的程序、库、资源、配置等文件
- 包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)
- 镜像只是一个虚拟的概念,其实际是由一组文件系统组成(多层文件系统)
- 分层存储的特征还使得镜像的复用、定制变的更为容易
镜像(
Image
)和容器(Container
)的关系,就像是面向对象程序设计中的类
和实例
一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等
容器(Container):运行于属于自己独立命名空间的进程
- 可以拥有自己的
root
文件系统、网络配置、进程空间,甚至用户 ID 空间 - 容器内的进程是运行在一个隔离的环境里,独立于宿主的系统
- 容器不应该向其存储层内写入需要保存的数据,因为数据会随容器删除而消失
仓库(Repository):一个集中的存储、分发镜像的服务
- 一个仓库会包含同一个软件不同版本的镜像:<仓库名>:<标签>
- Docker Registry 公开服务允许用户免费上传、下载公开的镜像
- 最常使用的 Registry 公开服务是官方的 Docker Hub(国内访问较慢)
- 国内云服务商提供了针对 Docker Hub 的镜像服务(
Registry Mirror
) - 用户还可以在本地搭建私有 Docker Registry,后续章节会有更多介绍
4 安装 Docker
本书包含常用Ubuntu、Debian、Fedora、CentOS、Linux离线、macOS、Windows 10的安装教程;除此之外,还有镜像加速器的配置技巧、Docker 实验特性的开启