Docker概述
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全可以使用沙盒机制,互相之间不会有任何接口。 几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架或包装系统。
扩展:沙盒
沙盒也叫沙箱(sandbox)。一种虚拟技术,且多用于计算机安全技术,安全软件可以先让它在沙盒中运行,如果含有恶意行为,则禁止程序的进一步运行,而这不会对系统造成损害。
现在接触到的软件是怎么发布的?
Windows下的office2016,不能在xp上运行;mk.rpm在redhat系列Linux上运行,但不能在其他Linux版本上运行…… 这些软件都是有依赖关系的,不兼容其他的系统。
现在的软件包都是和操作系统息息相关的,而docker镜像一次编译,到处都可以运行。
类似于:
Android:linux -> JVM -> java程序app
linux -> docker -> 服务做成镜像就可以直接运行起来
windows -> docker -> 服务做成镜像就可以直接运行起来
扩展:
LXC为Linux Contianer的简写。Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。
docker容器技术和虚拟机对比:
- 相同点:都是虚拟化技术
- 不同点:docker相对于VM虚拟机,少了虚拟机操作系统这一层,所以docker效率比虚拟机高。
Docker架构
工作流程:
服务器A运行docker Engine服务,在docker Engine上启动很多容器container,从外网Docker Hub上把image操作系统镜像下载来,放到container容器运行。这样一个容器的实例就运行起来了。
最后,通过Docker client对docker容器虚拟化平台进行控制。
补充:
- Image和Container的关系:image可以理解为一个系统镜像,Container是Image在运行时的一个状态。如果拿虚拟机做一个比喻的话,Image就是关机状态下的磁盘文件,Container就是虚拟机运行时的磁盘文件,包括内存数据。
- Docker Hub:是docker官方的镜像存储站点,其中提供了很多常用的镜像供用户下载。
Docker核心技术
- 1.Namespace——实现Container的进程、网络、消息、文件系统和主机名的隔离。
- 2.Cgroup——实现对资源的配额和度量。
docker特性:
- 文件系统隔离:系统资源,像CPU和内存等可以分配到不同的容器中,使用cgroup。
- 网络隔离:每个进程容器运行在自己的网络空间,虚拟接口和IP地址。
- 日志记录:Docker将会手机和记录每个进程容器的标准流,用于实时检索或批量检索。
- 变更管理:容器文件系统的变更可以提交到更新的镜像中,并可重复用于创建更多的容器。无需使用模板或手动配置。
- 交互式shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互式shell。
缺点:
Docker用于应用程序时是最有用的,但并包含数据。日志,跟踪和数据库等通常应放在Docker容器外。一个容器的镜像通常都很小,不适合存大量数据,存储可以通过外部挂载的方式使用。比如应用:NFS,ipsan,MFS等,-v映射磁盘分区。
一句话:docker只用于计算,存储交给别人。