什么是Docker?与虚拟机有什么区别?

Docker 概述Docker 是一个开源的应用容器引擎 , 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中 , 然后发布到任何流行的 linux 机器上 , 也可以实现虚拟化 。容器是完全使用沙盒机制 , 相互之间不会有任何接口(类似 iphone 的 App) 。几乎没有性能开销,可以很容易地在机器和数据中心中运行 。最重要的是,他们不依赖于任何语言、框架或包装系统 。

扩展:沙盒
沙盒也叫沙箱 , 英文 sandbox 。在计算机领域指一种虚拟技术 , 且多用于计算机安全技术 。安全软件可以先让它在沙盒中运行 , 如果含有恶意行为 , 则禁止程序的进一步运行 , 而这不会对系统造成任何危害 。
Docker 是 dotCloud 公司开源的一个基于 LXC 的高级容器引擎 , 源代码托管在 Github 上, 基于 Go语言并遵从 Apache2.0 协议开源 。
Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的 container 中 , 然后发布到任何流行的 Linux 机器上 。
官方网站:
https://www.docker.com/

什么是Docker?与虚拟机有什么区别?

文章插图
docker官方网站
docker [?d?k?(r)] 码头工人
logo:
什么是Docker?与虚拟机有什么区别?

文章插图
logo
注:docker 服务相当于鲸鱼 , container 容器就是集装箱 。
container :集装箱 , 容器
docker: 码头工人
源代码下载:
https://github.com/docker/docker
扩展:
集装箱是海上运货的一个创新 。
什么是Docker?与虚拟机有什么区别?

文章插图
 
源代码下载:
https://github.com/docker/docker
docker 容器技术和虚拟机对比:相同点:docker 容器技术和虚拟机技术 , 都是虚拟化技术 。
什么是Docker?与虚拟机有什么区别?

文章插图
docker 容器技术和虚拟机对比
总结:docker 相对于 VM 虚拟机 , 少了虚拟机操作系统这一层 , 所以 docker 效率比虚拟机高
Docker 架构
什么是Docker?与虚拟机有什么区别?

文章插图
Docker架构
工作流程:服务器 A 上运行 docker Engine 服务 , 在 docker Engine 上启动很多容器container , 从外网Docker Hub上把image操作系统镜像下载来 , 放到container容器运行 。这样一个容器的实例就运行起来了 。最后 , 通过Docker client对docker容器虚拟化平台进行控制 。
Image 和 Container 的关系:image 可以理解为一个系统镜像 , Container 是 Image 在运行时的一个状态 。如果拿虚拟机作一个比喻的话 , Image 就是关机状态下的磁盘文件 , Container 就是虚拟机运行时的磁盘文件 , 包括内存数据 。
dockerhub:dockerhub 是docker官方的镜像存储站点 , 其中提供了许多常用的镜像供用户下载 , 如 ubuntu, centos 等系统镜像 。通过dockerhub用户也可以发布自己的docker镜像 , 为此用户需要注册一个账号 , 在网站上创建一个docker仓库 。
Docker 核心技术1.Namespace — 实现Container的进程、网络、消息、文件系统和主机名的隔离 。
2.Cgroup — 实现对资源的配额和度量 。
注:Cgroup 的配额 , 可以指定实例使用的cpu个数 , 内存大小等 。就像如下图 , vmware 虚拟机中的硬件配置参数 。
什么是Docker?与虚拟机有什么区别?

文章插图
虚拟机配置
Docker特性文件系统隔离:每个进程容器运行在一个完全独立的根文件系统里 。
资源隔离:系统资源 , 像CPU 和内存等可以分配到不同的容器中 , 使用cgroup 。
网络隔离:每个进程容器运行在自己的网络空间 , 虚拟接口和IP地址 。
日志记录:Docker 将会收集和记录每个进程容器的标准流(stdout/stderr/stdin) , 用于实时检索或批量检索 。
变更管理:容器文件系统的变更可以提交到新的镜像中 , 并可重复使用以创建更多的容器 。无需使用模板或手动配置 。
交互式shell:Docker 可以分配一个虚拟终端并关联到任何容器的标准输入上 , 例如运行一个一次性交互 shell 。
优点:


推荐阅读