首页 > 代码库 > Docker简介

Docker简介

Docker简介

什么是Docker

正所谓Docker的英文本意为“搬运工”,所以在我们的世界里,可以理解为Docker搬运的是装满任意类型的APP的集装箱,开发者可以通过DockerAPP变成一种标准化的、可移动植的、自动管理的组件。它用一种新的方式实现了轻量级的虚拟机,专业术语成为应用容器(Application Container

 

Docker的优势:

1、利用率高

              ·Docker对系统资源的利用率很高,一台主机可以同时运行数千个Docker容器

2、可以快速的交付应用程序

·开发者使用一个标准的image来构建开发容器,开发完成之后,系统管理员就可以使用这种容器来部署代码

·Docker可以快速的创建容器,快速的迭代应用程序,并让整个过程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的

·Docker容器很轻,很快,启动时间堪称秒级,节约了开发、测试、部署的时间

3、更容易部署和扩展

·Docker容器几乎可以在所有的环境中运行,如物理机、虚拟机、云主机、个人PC、服务器等

·Docker容器兼容很多的平台,这样就可以吧一个应用程序从一个平台迁移到另一个

4、效率更高

·Docker容器不需要hypervisor,因为他是内核级的虚拟化

5、更简单的管理

·通常只需要小小的改变就可以替代以往巨型和大量的更新工作

 

Docker的常用案例:

u  自动打包和部署应用

u  创建轻量、私有的PaaS环境

u  自动化测试和持续集成/部署

u  部署并扩展Web应用、数据库和后端服务器

 

 

Docker的体系结构

Docker使用C/S架构,doceker daemon作为server端接受clinet的请求,并处理(创建、运行、分发容器),他们可以运行在一个机器上,也通过socket或者RESTful API通信

u  Docker守护进程(Docker daemon

Docker守护进程运行在一台主机上,用户并不直接和守护进程进行交互,而是通过Docker客户端间接可其通信

u  Docker客户端(Docker client

Docker客户端其实是docker的二进制程序,是用户与Docker交互方式,他接收用户指令并且与背后的Docker守护进程通信。

 

Docker镜像 -Docker images

Docker镜像是Docker容器运行时的只读模板,镜像可以用来创建Docker容器,每一个镜像用一系列的层(layers)组成

Docker仓库 -Docker registeries

Docker仓库用来保存镜像,可以理解为代码控制中的代码仓库,它分为公开仓库(public)和私有仓库(private)两种形式。

Docker容器 -Docker containers

容器是用来运行应用的,一个Docker容器包含可所有某个应用的运行所需的环境,每一个Docker容器都是从Docker镜像创建的,Docker容器可以实现运行、开始、停止、移动和删除。

 

Docker底层技术

pid namespace

不同用户的进程就是通过pidnamespace隔离开的,且不同 namespace 中可以有相同PID

net namespace

有了 pid namespace, 每个namespace中的pid能够相互隔离,但是网络端口还是共享host的端口。网络隔离是通过netnamespace实现的,每个net namespace有独立的 network devices, IP addresses, IP routing tables, /proc/net 目录。这样每个container的网络就能隔离开来。LXC在此基础上有5种网络类型,docker默认采用veth的方式将container中的虚拟网卡同host上的一个docker bridge连接在一起。

ipc namespace

container中进程交互还是采用linux常见的进程间交互方法(interprocess communication - IPC), 包括常见的信号量、消息队列和共享内存。然而同VM不同,container 的进程间交互实际上还是host上具有相同pid namespace中的进程间交互,因此需要在IPC资源申请时加入namespace信息 - 每个IPC资源有一个唯一的 32bit ID

mnt namespace

类似chroot,将一个进程放到一个特定的目录执行。mnt namespace允许不同namespace的进程看到的文件结构不同,这样每个 namespace 中的进程所看到的文件目录就被隔离开了。同chroot不同,每个namespace中的container/proc/mounts的信息只包含所在namespacemount point

uts namespace

UTS("UNIX Time-sharing System") namespace允许每个container拥有独立的hostnamedomain name,使其在网络上可以被视作一个独立的节点而非Host上的一个进程。

user namespace

每个container可以有不同的 user group id, 也就是说可以以container内部的用户在container内部执行程序而非Host上的用户。

 

本文出自 “乌云科技” 博客,请务必保留此出处http://wuyunkeji.blog.51cto.com/12028005/1909261

Docker简介