1、docker简介

[TOC]

简单、轻量的构建方式

Docker 依赖了"写时复制"模型,使得修改程序迅速。

鼓励面向服务的架构

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

当然,如果你愿意,当然不必拘泥于这种模式,你可以轻松地在一个容器内运行多个进程的应用程序。

组件

Docker 核心组件包括:

  • Docker 服务端和客户端
  • Registry
  • Docker 镜像
  • Docker 容器

Docker是一个客户-服务器(C/S)架构的程序。Docker客户端只需向 Docker服务器或守护进程发出请求,服务器或守护进程将完成所有工作并返回结果。 Docker提供了一个命令行工具 docker以及一整套 RESTFUL API。你可以在同一台宿主机上运行 Docker守护进程和客户端,也可以从本地的 Docker客户端连接到运行在另一台宿主机上的远程 Docker守护进程。下图描绘了 Docker的架构。
34ac113cb1ddf008a44a93154808c6de

Dokcer镜像

镜像是构建 Docker世界的基石。用户基于镜像来运行自己的容器。镜像也是 Docker生命周期中的“构建”部分。镜像是基于联合(Union)文件系统的一种层式的结构,由一系列指令一步一步构建出来。例如:

  • 添加一个文件
  • 执行一个命令
  • 打开一个端口
    也可以把镜像当作容器的“源代码”。镜像体积很小,非常“便携”,易于分享、存储和更新。

Registry

Docker用Registry来保存用户构建的镜像。 Registry分为公共和私有两种。 Docker公司运营的公共 Registry 叫做 Docker Hub。用户可以在 Docker Hub注册账号,分享并保存自己的镜像。
根据最新统计, Docker Hub上有超过10000注册用户构建和分享的镜像。需要 Nginx Web 服务器的 Docker镜像,或者 Asterix开源PABX系统的镜像,抑或是 MYSQL数据库的镜像?这些镜像在 Docker Hub上都有,而且具有多种版本。你也可以在 Docker Hub上保存自己的私有镜像。例如,包含源代码或专利信息等需要保密的镜像,或者只在团队或组织内部可见的镜像。你甚至可以架设自己的私有 Registry。私有 Registry 可以受到防火墙的保护,将镜像保存在防火墙后面,以满足一些组织的特殊需求。

容器

Docker可以帮你构建和部署容器,你只需要把自己的应用程序或服务打包放进容器即可。我们刚刚提到,容器是基于镜像启动起来的,容器中可以运行一个或多个进程。我们可以认为,镜像是 Docker生命周期中的构建或打包阶段,而容器则是启动或执行阶段。
总结起来, Docker容器就是:

  • 一个镜像格式:
  • 一系列标准的操作;
  • 一个执行环境。

Docker借鉴了标准集装箱的概念。标准集装箱将货物运往世界各地, Docker将这个模型运用到自己的设计哲学中,唯一不同的是:集装箱运输货物,而 Docker运输软件
每个容器都包含一个软件镜像,也就是容器的“货物”,而且与真正的货物一样,容器里的软件镜像可以进行一些操作。例如,镜像可以被创建、启动、关闭、重启以及销毁
和集装箱一样, Docker在执行上述操作时,并不关心容器中到底塞进了什么,它不管里面是Web服务器,还是数据库,或者是应用程序服务器什么的。所有容器都按照相同的方式将内容“装载”进去。
Docker也不关心你要把容器运到何方:你可以在自己的笔记本中构建容器,上传到Registry,然后下载到一个物理的或者虚拟的服务器来測试,再把容器部署到 Amazon EC2 主机的集群中去。像标准集装箱一样, Docker容器方便替换,可以叠加,易于分发,并且尽量通用。

Docker 的技术组件

Docker可以运行于任何安装了现代 Linux内核的x64主机上。我们推荐的内核版本是3.8 或者更高。 Docker I的开销比较低,可以用于服务器、台式机或笔记本。它包括以下几个部分。
一个原生的 Linux容器格式, Docker中称为1 1ibcontainer,或者很流行的容器平台lxc。1ibcontainer格式现在是 Docker 容器的默认格式。
Linxu 内核的命名空间( namespace),用于隔离文件系统、进程和网络。
* 文件系统隔离:每个容器都有自己的root文件系统
* 进程隔离:每个容器都运行在自己的进程环境中
* 网络隔离:容器间的虚拟网络接口和IP地址都是分开的。
* 资源隔离和分组:使用 groups°(即 control group, Linux的内核特性之一)将CPU 和内存之类的资源独立分配给每个 Docker容器。
* 写时复制:文件系统都是通过写时复制(多个进程在初始的时候共用的是一个资源,在读取资源的时候用的是同一份,修改资源的时候会复制一份出来进行修改)创建的,这就意味着文件系统是分层的、快速的,而且占用的磁盘空间更小。
* 日志:容器产生的 STDOUT、 STDERR和 STDIN这些1O流都会被收集并记入日志用来进行日志分析和故障排错。
* 交互式 shell!用户可以创建一个伪ty终端,将其连接到 STDIN,为容器提供一个交互式的 shell

Docker 资源

Docker官方主页
DockerHub
Docker官方博客
Docker官方文档
Docker快速入门指南
Docker的Github源代码
DockerForge:收集了各种Docker工具、组件和服务
Docker邮件列表
Docker的IRC频道
Docker的 Twitter主页
Docker的 Stackoverflow问答主页
Docker官网


   转载规则


《1、docker简介》 阿钟 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录