Docker简介
什么是Docker
Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,并于2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护,后来还加入了 Linux 基金会,并成立推动 开放容器联盟(OCI)。
Docker 最初是在 Ubuntu 12.04 上以Go 语言 进行开发实现的, Red Hat 则从 RHEL 6.5 开始对 Docker 进行支持(换句话说不支持CentOS6.5以下)。
Docker 是一种 容器化技术 ,类似虚拟机的概念,但不同的是传统虚拟机是在虚拟硬件的基础上,完整模拟一整个操作系统,而Docker是以单个应用(容器)为单位进行虚拟。
Docker特点
Docker具有以下特点:
- 文件系统隔离 :每个进程容器运行在完全独立的根文件系统里。
- 资源隔离 :可以使用cgroup为每个进程容器分配不同的系统资源,例如CPU和内存。
- 网络隔离 :每个进程容器运行在自己的网络命名空间里,拥有自己的虚拟接口和IP地址。
- 写时复制 :采用写时复制方式创建根文件系统,这让部署变得极其快捷,并且节省内存和硬盘空间。
- 日志记录 :Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。
- 变更管理 :容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器。无需使用模板或手动配置。
- 交互式Shell :Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell。
为什么要使用Docker
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为 MB |
一般为 GB |
性能 | 接近原生 | 弱于原生 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
更高效的利用系统资源 :由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。
更快速的启动时间 :Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。
一致的运行环境 : Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现 「这段代码在我机器上没问题啊」 这类问题。
持续交付和部署 :对
DevOps
人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过 Dockerfile 来进行镜像构建,并结合持续集成(Continuous Integration)
系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合持续部署(Continuous Delivery/Deployment)
系统进行自动部署。更轻松的迁移 :由于 Docker 确保了执行环境的一致性,使得应用的迁移更加容易。Docker 可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。