Docker 简介

1 背景知识

Docker 图标|700

2010年  dotCloud公司成立于(旧金山),开发了 Docker(码头工人) 的核心技术。
2013 年 Docker 开源,很快火爆全球。dotCloud 公司更是把公司名改成了 Docker Inc. 。
本文主要介绍 Docker 的特点、Docker 架构、适用场景。

2 Docker 概述

2.1 为什么要使用Docker ?

  1. Docker 原本是指将靠港后的商品进行装货和卸货的码头工人。
  2. 有经验的码头工人能够提高装卸效率,所以码头工人能够挣得更多得报酬。
  3. 而 Docker 就是经验丰富的集装箱,能够为客户节省时间和金钱。
需要将不同形状物品
装载到船只上的码头
工人队伍
需要将不同形状物品装载到船只上的码头工人队伍...
装载物品的船只
装载物品的船只
船只可以设计成能够更有效运送、
装载和卸载形状可预见的物品。
船只可以设计成能够更有效运送、装载和卸载形状可预见的物品。
操作用于移动容器的机器
只需要一个码头工人。
操作用于移动容器的机器只需要一个码头工人。
内置不同物品的单个集装箱。对于承运人而言,
集装箱内是什么并不重要。承运人可在其他
地方装载,减少港口装载的瓶颈。。
内置不同物品的单个集装箱。对于承运人而言,集装箱内是什么并不重要。承运人可在其他地方装载,减少港口装载的瓶颈。。...
Text is not SVG - cannot display

2.1.1 Docker 出现之前

在Docker出现之前,部署软件到不同的环境所需的工作量巨大。用户必须应对那些复杂的管理工具。这些用户非常迫切的想拥有一个简单运维环境。

2.1.2 Docker 出现之后

使用Docker后,可以将配置工作从资源管理工作分离。部署将会变得简单。

测试服务器
测试服务器
开发机
开发机
生产服务器
生产服务器
安装、配置和维护复杂的应用程序
安装、配置和维护复杂的应用程序
安装、配置和维护复杂的应用程序
安装、配置和维护复杂的应用程序
安装、配置和维护复杂的应用程序
安装、配置和维护复杂的应用程序
Docker 出现之前
Docker 出现之前
3倍的管理部署工作量
3倍的管理部署工作量
开发机
开发机
测试服务器
测试服务器
开发机
开发机
开发机
开发机
生产服务器
生产服务器
安装、配置和维护复杂的应用程序
安装、配置和维护复杂的应用程序
Docker 出现之后
Docker 出现之后
单一的管理部署工作量
单一的管理部署工作量
docker run
docker run
docker runt
docker runt
docker run
docker run
Docker 镜像
Docker 镜像
测试服务器
测试服务器
Text is not SVG - cannot display

2.2 Docker 能做什么?

Docker 是一个允许用户"在任何地方构建、分发以及运行应用“的平台。它在极短的时间内发展壮大,目前已经成为最经济的一种部署框架。

  1. 在Docker出现以前的问题
    开发流水线通常使用不同的软件组合而成,如虚拟机、配置管理工具、不同的包管理系统。所有的这些工具都需要专业的工程师管理和运维,并且多数工具都有自己的独特的配置方式。

  2. 在Docker出现以后。
    允许不同的工程师参与到这个过程。所有东西通过一个共同的流水线,在任何平台都可部署的软件。再也不需要维护一堆让人眼花缭乱的工具配置。如下图所示。

代码
代码
Vagrant
Vagrant
Jenkins
Jenkins
Chef
Chef
开发
开发
测试
测试
上线
上线
配置
配置
代码
代码
Docker 构建
Docker 构建
开发
开发
测试
测试
上线
上线
配置
配置
系统输入,需要手工维护——这里输入越少说明维护负担越小
系统输入,需要手工维护——这里输入越少说明维护负担越小
使用这些输入来创建软件开发环境的工具
使用这些输入来创建软件开发环境的工具
软件开发的各个阶段,需要一个用于运行的环境
软件开发的各个阶段,需要一个用于运行的环境
Text is not SVG - cannot display

2.2.1 vagrant

Vagrant - 一款用于管理虚拟机的命令行实用软件,用 Ruby 语言开发而成。换言说,可以省去你使用虚拟机创建操作系统的所有操作,比如创建虚拟机,挂载镜像文件,一步步点击安装;使用 Vagrant ,这些都不需要做了,简简单单 2 行命令,快速创建属于你个人的系统。

2.2.2 Jenkins

Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。

Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。

2.2.3 Chef

Chef Infra 是一种配置管理工具,旨在为您的整个基础架构带来自动化

2.3 Docker 与VMware虚拟机的对比

Application
Application
Application
Application
Guest
Operation
System
Guest...
VM
VM
Application
Application
Application
Application
Guest
Operation
System
Guest...
VM
VM
Hypervisor
Hypervisor
Operating System
Operating System
Physical Server
Physical Server
Docker
Docker
Operating System
Operating System
Physical Server
Physical Server
ServiceA
ServiceA
Bins/Libs
Bins/Libs
Container
Container
ServiceA
ServiceA
Bins/Libs
Bins/Libs
Container
Container
ServiceA
ServiceA
Bins/Libs
Bins/Libs
Container
Container
ServiceA
ServiceA
Bins/Libs
Bins/Libs
Container
Container
Text is not SVG - cannot display
Container VM
启动速度 秒级 分钟级
运行性能 接近原生 5%左右损失
磁盘占用 MB GB
数量 成百上千 一般几十台
隔离性 进程级 系统级(更彻底)
操作系统 主要支持Linux(win/mac也可) 几乎所有

3 Docker 优点

Docker 是一个允许用户“在任何地方构建、分发及运行任何应用”的平台。

3.1 替代虚拟机(VM)

Docker 可以在很多情况替代虚拟机。

  1. 用户只关心应用程序,而不是操作系统,那么可以使用 Docker 替代虚拟机。
  2. Docker 不仅启动速度比虚拟机块,迁移时也更为轻量。
  3. 由于它的分层系统,让其他人分享变得更简单。
  4. 命令行操作方式非常丰富,非常适合脚本化。

3.2 软件原型

  1. Docker 可以在几秒之内提供一个沙箱环境。
  2. 省去了配置一个虚拟机的麻烦。

3.3 打包软件

  1. 对于LInux 用户而言,Docker 镜像没有相关操作系统依赖。所以非常适合打包软件。
  2. 用户可以构建镜像,确保可以运行在任何的Linux 机器上。例如就像JAVA 一样,但是不需要JVM。

3.4 让微服务架构成为可能

  1. Docker 有助于将一个复杂系统分解成一系列可组成的部分。
  2. 可以使用更离散的方式思考其服务。
  3. 用户可以不影响全局的前提下重组软件,进行热插拔。

3.5 网络建模

可以在一台机器上启动成百上千的隔离容器。进行网络测试。

3.6 离线时启用全栈生产力

因为可以将系统的所有部分捆绑在Docker容器中,所以用户可以将其编排运行在笔记本电脑中移动办公,即便在离线时也没问题。

3.7 降低调试成本

Docker降低团队之间的软件交付复杂讨论成本是非常有效的。这类问题有:

  1. 失效的依赖库;
  2. 有问题的依赖库;
  3. 更新错误。
  4. 操作时的顺序错误。
  5. 无法重现错误。
    而Docker 可以在一统一环境中进行调试,错误和环境的重现将会变得更简单。

3.8 清晰化软件依赖

通过结构化方式构建镜像,为迁移到不同的环境做好准备。
Docker强制用户从一个基本镜像明确记录了软件依赖包,这种记录的方式对于手工部署软件也有极大的帮助。

3.9 启用持续交付

  1. 持续交付(continuous delivery,CD)是一个基于流水线的软件交付模型。
  2. 这个流水线通过一个自动化(或半自动化)自动重新构建系统然后部署到生产环境中。
  3. 自动化构建方式相比传统软件构建方式更具有可重复性和可复制性。

4 Docker 整体架构

  1. Docker 守护进程是用户与Docker 交互的枢纽。
  2. Docker 守护进程控制用户机器上Docker 的访问权限。
  3. Docker守护进程通过HTTPD 协议接收请求。
  4. Docker守护进程还负责处理用户的镜像和容器。
  5. Docker Hub 是Docker 公司运营的一个公共注册中心。Docker守护进程将连接互联网获取镜像。
  6. 私有Docker 注册中心处于私有网络中,不能够被其他Docker 客户端所访问。
Docker 客户端
Docker 客户端
HTTP
HTTP
HTTP
HTTP
Docker 守护进程
Docker 守护进程
私有Docker
注册中心
私有Docker...
Docker Hub
Docker Hub
另一个公共的Docker
注册中心
另一个公共的Docker...
私有网络
私有网络
互联网
互联网
Docker Hub是由Docker 公司运营的一个公共注册中心。
Docker Hub是由Docker 公司运营的一个公共注册中心。
互联网上也存在其他公共的注册中心。
互联网上也存在其他公共的注册中心。
私有Docker注册中心存储Docker镜像。
私有Docker注册中心存储Docker镜像。
Docker 守护进程使用HTTP协议接收来自Docker 客户端的请求并返回响应
Docker 守护进程使用HTTP协议接收来自Docker 客户端的请求并返回响应
调用Docker客户端可以从守护进程获取信息或向其发送指令。
调用Docker客户端可以从守护进程获取信息或向其发送指令。
安装了Docker 的宿主机。宿主机一般放在一个私有网络上。
安装了Docker 的宿主机。宿主机一般放在一个私有网络上。
Text is not SVG - cannot display