赞
踩
Docker使用Google公司推出的Go语言进行开发实现,基于Linux内核cgroup,namespace,对进程技术进行封装与隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其他的隔离的进程,因此也称其为容器
Docker在容器的基础上,进行了进一步的封装,从文件系统、网络互连到进程隔离等等,极大的简化了容器的创建和维护
传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整的操作系统,在该系统上再运行所需用的应用进程;而容器内的应用进行直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟
Docker容器与传统虚拟机对比总结
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为 MB |
一般为 GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
操作系统分为内核和用户空间。对于Linux而言,内核启动后,会挂载root文件系统为其提供用户空间支持
Docker镜像(Image),就相当于是一个root文件系统。比如官方镜像 ubuntu:18.04就包含了完整的一套ubuntu:18.04最小系统的root文件系统
Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)
镜像不包含任何动态数据,其内容在构建之后也不会被改变
因为镜像包含操作系统完整的root文件
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等
容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户ID空间。容器内的进程是运行在一个隔离的环境里,使用起来就像是在一个独立于宿主的系统下操作一样。该特性使得容器封装的应用比直接在宿主机运行更安全
镜像使用的是分层存储,容器也是如此。每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储曾,可以称这个为容器运行时读写而准备的存储层为 容器存储层
容器存储层的生命周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失
按照Docker最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性会更高
数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器删除或者重新运行之后,数据不会丢失
Docker Registry(Docker 注册服务器)
注册服务器是管理仓库的具体服务器,每个服务器上有多个仓库,每个仓库下面由多个镜像
对于仓库地址
docker.io/ubuntu 来说, docker.io 是注册服务器地址, ubuntu 是仓库名
镜像构建完成之后,可以很容易的在当前宿主机上运行,但是,如果需要其在其他服务器上使用这个镜像,需要一个集中的存储、分发镜像的服务,D
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。