您的位置:首页 > 运维架构 > Docker

Docker简介

2016-09-26 23:24 375 查看

概述

容器和管理程序虚拟化(HV)不同,HV通过中间层将一台或者多台独立的机器虚拟运行在物理硬件之上,而容器是直接运行在操作系统内核之上的用户空间。

容器技术可以让多个独立的用户控件运行在同一台宿主机上。

对于Docker来讲,得益于现代Linux内核特性,如控件组control group,命名空间namespace技术,容器和宿主机之间的隔离更加彻底, 容器有独立的网络和存储栈, 还拥有自己的资源管理能力,使得同一台宿主机中的多个容器可以友好的共存。

和传统的虚拟化以及办虚拟化相比,容器运行不需要模拟层emulation layer 和管理成 hypervisor layer,而是使用操作系统的系统调用接口,这降低了运行单个容器所需的开销,也使得宿主机中可以运行更多的容器。

Docker简介

Docker是一个能够把开发的应用程序自动的部署到容器的开源引擎,基于Apache2.0开源授权协议发行。

Docker在虚拟化的容器执行环境中增加了一个应用程序部署引擎,提供一个轻量、快速的环境。

Docker极其简介,它所需要的全部环境只是一台仅仅安装了兼容版本的Linux内核和二进制文件最小限的宿主机。

Docker的目标如下所示:

提供一个简单轻量的建模方式

1.上手快,只需几分钟就可以将自己的程序”Docker化”

2.大多数的Docker容器只需要不到1S就可以启动,因为去除了管理程序的开销,Docker容器拥有很高的性能,同时一台宿主机也可以更多的容器,充分利用系统资源。

职责的逻辑分离

使用Docker后,开发人员只需要关心容器中运行的应用程序,

而运维人员只需要关心如何管理容器。

Docker设计的目的就是要加强开发人员写代码的开发环境和应用程序要部署的生产环境一致,避免那种“开发时一切正常,肯定是运维的问题”的风险。

快速高效的开发生命周期

缩短代码从开发、测试到部署、上线运行的周期。

鼓励使用面向服务的架构

Docker推荐单个容器只运行一个应用程序或者进程,这样就形成了一个分布式的应用程序模型,在这种模型下,应用程序或者服务都可以表示为一系列内部互联的容器,从而使分布式部署应用程序,扩展或者调试应用程序都变得非常简单,同时也提高了程序的内省性。

当然你也可以在一个容器内运行多个进程的应用程序,如果你愿意的话…

Docker组件

核心组件:

Docker客户端和服务端(Docker引擎)

Docker镜像

Registry

容器

Docker客户端和服务端

Docker是一个客户端服务端(C/S )建构的程序。

Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有的工作并返回结果。

Docker守护进程有时候也称为Docker引擎。

Docker提供了一个命令行工具
docker
和一整套的RESTful API来与守护进程交互。

用户可以在同一台宿主机上运行Docker守护进程和客户端,也可以在本地运行客户端连到运行在另一台宿主机上的远程Docker守护进程。



Docker镜像

镜像是构建Docker世界的基石。

用户基于镜像来运行自己的容器。

镜像也是Docker生命周期中“构建”部分。

镜像是基于联合(Union)文件系统的一种层式的结构,由一系列指令一步一步构建出来。

例如:

添加一个文件

执行一个命令

打开一个端口

也可以把镜像当做容器的“源代码”。 镜像体积很小,非常“便携”,易于分享存储和更新。

Registry

Docker用Registry来保存用户构建的镜像。

Registry 分为公共和私有两种。

Docker公司运营的公共Registry叫做Docker Hub,我们可以自己注册账号,分享并保存自己的镜像。

比如有很多出名的镜像,如Nginx web服务器的Docker镜像,MySql数据库的镜像等等……

用户可以在Docker Hub上保存自己私有的镜像。

用户也可以自己架设私有的Registry

容器

Docker可以帮用户构建和部署容器,用户只需要把自己的应用程序或服务打包放进容器即可。

容器是基于镜像启动起来的,容器中可以运行一个或者多个进程。

我们可以认为,镜像是Docker生命周期中的构建或者打包阶段,而容器则是启动或者执行阶段。

总结起来,Docker容器就是

一个镜像格式

一系列标准的操作

一个执行环境

Docker借鉴了标准集装箱的概念,Docker运输的是软件。

能用Docker做什么

使用Docker可以快速的构建出一个应用程序的服务器、一个消息总线、一套实用工具、一个持续集成(continuous integration ,CI)测试环境或者任意一种用用程序、服务或者工具。

可以在本地构建出一个完整的测试环境,也可以为生产或者开发快速复制出一套复杂的应用程序栈。

Docker与配置管理

Docker的镜像是分层的,可以对其进行迅速的迭代。

Docker本身还是需要在主机上安装管理和部署的,而主机也要被管理起来。

这样Docker容器需要编配、管理和部署,也经常需要与外部服务和工具进行通信。

Docker的技术组件

Docker可以云运行于任何安装了现代Linux内核的x64主机上。

推荐的内核版本是3.8+。

Docker开销比较低,可以用于服务器、台式机、笔记本

包括以下部分:

一个原生的Linux容器格式,Docker中称为libcontainer

Linux内核的命名空间(namespace),用于隔离文件系统、进程和网络

文件隔离系统,每个容器都有自己的root文件系统

进程隔离,每个容器都运行在自己的进程环境中

网络隔离,容器间的虚拟网络接口和IP地址都是分开的

资源隔离和分组,使用cgroups将cpu和内存等资源独立分配给每个Docker容器

写时复制,文件系统是分层的、快速的,占用磁盘空间更小

日志

交互式shell,用户可以创建一个伪tty终端
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: