(二)Docker概念简介

1. Docker

Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的cgroup(资源限制),namespace(资源隔离),以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于操作
系统层面的虚拟化技术。

2. 为什么使用Docker?

  1. 更高效的利用系统资源;
  2. 更快速的启动时间;
  3. 开发、测试和发布一致的运行环境,消除线上线下的环境差异;
  4. 持续部署和测试,开发人员通过Dockerfile构建镜像,测试和运维人员可直接部署软件镜像来测试和发布;
  5. 跨(云)平台;
  6. 应用镜像仓库便于维护和扩展;

3. 基本概念

3.1 镜像(Image)

Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数( 如匿名卷、环境变量、用户等) 。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
因为镜像包含操作系统完整的 root 文件系统,其体积往往是庞大的,因此在 Docker 设计时,就充分利用 Union FS 的技术,将其设计为分层存储的架构。镜像构建时,会一层层构建,前一层是后一层的基础。分层存储的特征还使得镜像的复用、定制变的更为容易。甚至可以用之前构建好的镜像作为基础层,然后进一步添加新的层,以定制自己所需的内容,构建新的镜像。

3.2 容器(Container)

镜像(Image ) 和容器(Container ) 的关系,就像是面向对象程序设计中的 类 和 实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。

3.3 仓库(Repository)

一个 Docker Registry 中可以包含多个仓库(Repository ) ;每个仓库可以包含多个标签(Tag ) ;每个标签对应一个镜像。
通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。

  • 公开服务 Docker Hub
  • 私有Docker Registry, Docker 官方提供了Docker Registry 镜像,可以直接使用做为私有 Registry 服务。

4. Dockerfile

Dockerfile模板文件可以方便的定义一个单独的应用镜像;

5. Docker三剑客之Compose

Docker compose, Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。
可以通过 docker-compose.yml 模板文件( YAML 格式) 来定义一组相关联的应用容器为一个项目(project) 。

Compose 中有两个重要的概念:

  • 服务 ( service ):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
  • 项目 ( project ):由一组关联的应用容器组成的一个完整业务单元,在 dockercompose.yml 文件中定义。

Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。Compose 项目由 Python 编写,实现上调用了 Docker 服务提供的 API 来对容器进行管理。

6. Docker三剑客之Machine

Docker Machine 是 Docker 官方编排( Orchestration) 项目之一,负责在多种平台上快速安装 Docker 环境。

7. Docker三剑客之Swarm

Swarm 是使用 SwarmKit 构建的 Docker 引擎内置( 原生) 的集群管理和编排工具。
Docker Swarm 是 Docker 官方三剑客项目之一,提供 Docker 容器集群服务,是 Docker 官方对容器云生态进行支持的核心方案。用户可以将多个 Docker 主机封装为单个大型的虚拟 Docker 主机,快速打造一套容器云平台。

Swarm mode 内置 kv 存储功能,提供了众多的新特性,比如:具有容错能力的去中心化设计、内置服务发现、负载均衡、路由网格、动态伸缩、滚动更新、安全传输等。使得 Docker原生的 Swarm 集群具备与 Mesos、Kubernetes 竞争的实力。

1) 节点
运行 Docker 的主机可以主动初始化一个 Swarm 集群或者加入一个已存在的 Swarm 集群,这样这个运行 Docker 的主机就成为一个 Swarm 集群的节点 ( node ) 。
节点分为管理 ( manager ) 节点和工作 ( worker ) 节点。

  • 管理节点,用于 Swarm 集群的管理, docker swarm 命令基本只能在管理节点执行( 节点退出集群命令 docker swarm leave 可以在工作节点执行) 。一个 Swarm 集群可以有多个管理节点,但只有一个管理节点可以成为 leader , leader 通过 raft 协议实现。
  • 工作节点是任务执行节点,管理节点将服务 ( service ) 下发至工作节点执行。管理节点默认也作为工作节点。你也可以通过配置让服务只运行在管理节点。

Docker 官网中集群中管理节点与工作节点的关系:

2) 服务和任务

  • 任务 (Task ) 是 Swarm 中的最小的调度单位,目前来说就是一个单一的容器。
  • 服务 (Services ) 是指一组任务的集合,服务定义了任务的属性。服务有两种模式:
    • replicated services 按照一定规则在各个工作节点上运行指定个数的任务。
    • global services 每个工作节点上运行一个任务。
      两种模式通过 docker service create 的 --mode 参数指定。
      Docker 官网的这张图片形象的展示了容器、任务、服务的关系
posted @ 2018-08-04 15:33  yvhqbat  阅读(227)  评论(0编辑  收藏  举报