Docker
Docker容器虚拟化平台。
Docker,翻译过来就是码头工人
Docker是一个开源 的应用容器引擎 ,让开发者可以打包他们的应用以及依赖包到一个可抑制的容器中 ,然后发布到任何流行的Linux 机器上 ,也可以实现虚拟化 。容器完全使用沙盒机制,相互之间不会存在任何接口。几乎没有性能开销,可以很容易的在机器和数据中心运行。最重要的是,他们不依赖于任何语言、框架或者包装系统。
小知识:沙盒也叫沙箱(sandbox)。在计算机领域指一种虚拟技术,而且多用于计算机安全技术。安全软件可以让它在沙盒中运行,如果含有恶意行为,则禁止程序的进一步运行,而这不会对系统造成任何危害。
Docker是dotCloud公司开源的一个基于LXC的高级容器引擎,源码托管在Github上,基于go语言并且遵从Apache2.0协议开源。 GitHub地址:https://github.com/moby/moby
小知识:LXC为Linux Container的简写 。Linux Container 容器是一种内核虚拟化 技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。 LXC主要通过Kernel的namespace实现每个用户实例之间的项目隔离,通过cgroup实现对资源的配额和调度。
docker官网:https://www.docker.com
docker中文库:https://www.docker.org.cn/
Docker容器技术与虚拟机的区别。
相同点:docker和容器技术和虚拟机技术,都是虚拟化技术。
不同点 : 虚拟机技术:
容器技术:
通过图片,我们很明显的看到docker有着比虚拟机更少的抽象层。 由于docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。所以docker效率比虚拟机效率高。达到了秒级启动的地步。
docker相较于VM的优点:
1、比VM小、快,Docker容器的尺寸减小相比于整个虚拟机大大简化了分布
到云和分发时间的开销。Docker启动一个容器实例时间仅仅需要几秒钟。
2、Docker是一个开放的平台,构建、发布和运行分布式应用程序。
3、开发人员不需要关系具体是哪个Linux操作系统
4、Google、微软(azure)、亚马逊、IBM等都支持docker。
5、Docker支持Unix/Linux操作系统,也支持Windows和Mac。
这里。。。。。。VM虚拟机与JVMjava虚拟机
虚拟机(Virtual Machine),就是一台虚拟的计算机。它是一款软件,用来执行一系列虚拟计算机指令。大体上,虚拟机可以分为系统虚拟机和程序虚拟机。
- 系统虚拟机:Visual Box,VMware就属于系统虚拟机,他们完全是对物理计算机的仿真,提供了一个可运行完成操作系统的软件平台。
- 程序虚拟机:代表就是典型的Java虚拟机,它专门为执行单个计算机程序而设计,在Java虚拟中执行的指令我们称之为Java字节码指令。
无论是系统虚拟机还是程序虚拟机,在上面运行的软件都被限制于虚拟机提供的资源中。
。。。。。。。。。。。。。。。。。。。。。。。
- JVM
- Java虚拟机(JVM)是一台执行Java字节码的虚拟计算机,它拥有独立的运行机制,其运行的Java字节码也未必由Java语言编写而成。
- JVM平台的各种语言可以共享Java虚拟机带来的跨平台性、优秀的垃圾回收器,以及可靠的即时编译器。
- Java技术的核心就是Java虚拟机,因为所有的Java程序都运行在Java虚拟机内部。
Docker局限性:
Docker用于应用程序时是最有用的,但并不包含数据 。日志、数据库等通常放在Docker容器外 。一个容器的镜像通常都很小,不用和存储大量数据,存储可以通过外部挂载等方式使用,比如:NFS、ipsan、MFS等 ,或者docker命令 ,-v映射磁盘分区。
总之,docker只用于计算,存储交给别人。
通过docker架构图初步了解docker。
docker的工作流程。
- 启动docker
- 下载镜像到本地
- 启动docker容器实例
提示:大家可以去注册一个dockerhub,之后会详细给大家讲解它的作用(非常重要!连docker hub账号都没有,玩什么docker!)。
Docker核心技术:
1、Namespace ---> 实现Container的进程、网络、消息、文件系统 和主机名的隔离。
2、Cgroup ---> 实现对资源的配额和调度。 注意:Cgroup的配额,可以指定实例使用的CPU个数,内存大小等。
Docker特性。
-
文件系统隔离:每个进程容器运行在一个完全独立的根文件系统里。
-
资源隔离:系统资源,像CPU和内存等可以分配到不同的容器中,使用cgroup。
-
网络隔离:每个进程容器运行在自己的网路空间,虚拟接口和IP地址。
-
日志记录:Docker将收集到和记录的每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或者批量检索
-
变更管理:容器文件系统的变更可以提交到新的镜像中,并可重复使用以创建更多的容器。无需使用模板或者手动配置。
-
交互式shell:Docker可以分配一个虚拟终端并且关联到任何容器的标准输出上,例如运行一个一次性交互shell。
1、yum -y install docker
2、yum -y install docker-engine
3、yum -y install docker-ce
以上三种下载方式都正确。。Docker最早的版本名是docker和docker-engin,现在的名字是docker-ce和docker-ee。