Docker 简介


  • 什么是 Docker

首先 Docker 是一个在 2013 年开源的应用程序并且是一个基于 go 语言编写是一个开源的 pass 服务 (Platform as a Service,平台即服务的缩写),go 语言是由google 开发,docker 公司最早叫 dotCloud 后由于 Docker 开源后大受欢迎就将公司改名为 Docker Inc,总部位于美国加州的旧金山,Docker 是基于 linux 内核实现,Docker 最早采用 LXC 技术 (LinuX Container 的简写,LXC 是 Linux 原生支持的容器技术,可以提供轻量级的虚拟化,可以说 docker 就是基于 LXC 发展起来的,提供 LXC 的高级封装,发展标准的配置方法),而虚拟化技术 KVM (Kernel based Virtual Machine) 基于模块实现,Docker 后改为自己研发并开源的 runc 技术运行容器。
Docker 相比虚拟机的交付速度更快,资源消耗更低,Docker 采用客户端/服务端架构,使用远程 API 来管理和创建 Docker 容器,其可以轻松的创建一个轻量级的、可移植的、自给自足的容器,docker 的三大理念是 build(构建)、ship(运输)、 run(运行),Docker 遵从 aoache 2.0 协议,并通过(namespace 及cgroup 等)来提供容器的资源隔离与安全保障等,所以 Docke 容器在运行时不需要类似虚拟机(空运行的虚拟机占用物理机 6-8%性能)的额外资源开销,因此可以大幅提高资源利用率,总而言之 Docker 是一种用了新颖方式实现的轻量级虚拟机.类似于 VM 但是在原理和应用上和 VM 的差别还是很大的,并且 docker 的专业叫法是应用容器 (Application Container)。

IDC/IAAS/PAAS/SAAS 对比

image.png


  • Docker 组成
    1.Docker 客户端(Client):客户端使用 docker 命令或其他工具调用 docker API。
    2.Docker 服务端(Server):Docker 守护进程,运行 docker 容器。
    3.Docker 镜像(Images):镜像可以理解为创建实例使用的模板。
    4.Docker 容器(Container): 容器是从镜像生成对外提供服务的一个或一组服务。
    5.Docker 仓库(Registry): 保存镜像的仓库,类似于 git 或 svn 这样的版本控制系统,官方仓库: https://hub.docker.com/
    6.Docker 主机(Host):一个物理机或虚拟机,用于运行 Docker 服务进程和容器。
    image.png

  • 对比虚拟机
    1.资源利用率更高:一台物理机可以运行数百个容器,但是一般只能运行数十个虚拟机。
    2.开销更小:不需要启动单独的虚拟机占用硬件资源。
    3.启动速度更快:可以在数秒内完成启动。


    image.png

  • Docker 优势
    1.快速部署:短时间内可以部署成百上千个应用,更快速交付到线上。
    2.高效虚拟化:不需要额外的 hypervisor 支持,直接基于 linux 实现应用虚拟化,相比虚拟机大幅提高性能和效率。
    3.节省开支:提高服务器利用率,降低 IT 支出。
    4.简化配置:将运行环境打包保存至容器,使用时直接启动即可。
    5.快速迁移和扩展:可夸平台运行在物理机、虚拟机、公有云等环境,良好的兼容性可以方便将应用从 A 宿主机迁移到 B 宿主机,甚至是 A 平台迁移到 B 平台。

  • Docker 缺点
    1.隔离性:各应用之间的隔离不如虚拟机。

  • Docker (容器)的核心技术

1.容器规范

除了 docker 之外的 docker 技术,还有 coreOS 的 rkt,还有阿里的 Pouch,为了保证容器生态的标志性和健康可持续发展,包括 Google、Docker 等公司共同成立了一个叫 open container(OCI)的组织,其目的就是制定开放的标准的容器规范,目前 OCI 一共发布了两个规范,分别是 runtime spec 和 image format spec,有了这两个规范,不通的容器公司开发的容器只要兼容这两个规范,就可以保证容器的可移植性和相互可操作性。

2.容器 runtime

runtime 是真正运行容器的地方,因此为了运行不同的容器 runtime 需要和操作系统内核紧密合作相互在支持,以便为容器提供相应的运行环境。
目前主流的三种 runtime:
(1) Lxc:linux 上早期的 runtime,Docker 早期就是采用 lxc 作为 runtime。
(2) runc:目前 Docker 默认的 runtime,runc 遵守 OCI 规范,因此可以兼容 lxc。
(3) rkt:是 CoreOS 开发的容器 runtime,也符合 OCI 规范,所以使用 rktruntime 也可以运行 Docker 容器。

3.容器管理工具

管理工具连接 runtime 与用户,对用户提供图形或命令方式操作,然后管理工具将用户操作传递给 runtime 执行。
(1) Lxd 是 lxc 的管理工具。
(2) Runc 的管理工具是 docker engine,docker engine 包含后台 deamon 和 cli 两部分,大家经常提到的 Docker 就是指的 docker engine。
(3) Rkt 的管理工具是 rkt cli。

4.容器定义工具

容器定义工具允许用户定义容器的属性和内容,以方便容器能够被保存、共享和重建。
(1) Docker image:是 docker 容器的模板,runtime 依据 docker image 创建容器。
(2) Dockerfile:包含 N 个命令的文本文件,通过 dockerfile 创建出 docker image。
(3) ACI(App container image):与 docker image 类似,是 CoreOS 开发的 rkt 容器的镜像格式。

5.Registry

统一保存共享镜像的地方,叫做镜像仓库。
(1) Image registry:docker 官方提供的私有仓库部署工具。
(2) Docker hub:docker 官方的公共仓库,已经保存了大量的常用镜像,可以方便大家直接使用。
(3) Harbor:vmware 提供的自带 web 的镜像仓库,目前有很多公司使用。

6.编排工具

当多个容器在多个主机运行的时候,单独管理每个容器是相当负载而且很容易出错,而且也无法实现某一台主机宕机后容器自动迁移到其他主机从而实现高可用的目的,也无法实现动态伸缩的功能,因此需要有一种工具可以实现统一管理、动态伸缩、故障自愈、批量执行等功能,这就是容器编排引擎。 容器编排通常包括容器管理、调度、集群定义和服务发现等功能。
(1) Docker swarm:docker 开发的容器编排引擎。
(2) Kubernetes:google 领导开发的容器编排引擎,内部项目为 Borg,且其同时支持 docker 和 CoreOS。
(3) Mesos+Marathon:通用的集群组员调度平台,mesos 与 marathon 一起提供容器编排引擎功能。


  • Docker (容器) 的依赖技术

1.容器网络

docker 自带的网络 docker network 仅支持管理单机上的容器网络,当多主机运行的时候需要使用第三方开源网络,例如 calico、flannel 等。

2.服务发现

容器的动态扩容特性决定了容器 IP 也会随之变化,因此需要有一种机制开源自动识别并将用户请求动态转发到新创建的容器上,kubernetes 自带服务发现功能,需要结合 kube-dns 服务解析内部域名

3.容器监控

可以通过原生命令 docker ps/top/stats 查看容器运行状态,另外也可以使 heapster/ Prometheus 等第三方监控工具监控容器的运行状态。

4.数据管理

容器的动态迁移会导致其在不通的 Host 之间迁移,因此如何保证与容器相关的数据也能随之迁移或随时访问,可以使用逻辑卷/存储挂载等方式解决。

5.日志收集

docker 原生的日志查看工具 docker logs,但是容器内部的日志需要通过 ELK 等专门的日志收集分析和展示工具进行处理。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354

推荐阅读更多精彩内容

  • 什么是docker Docker 相比虚拟机的交付速度更快,资源消耗更低,Docker 采用客户端/服务端架构,使...
    强出头阅读 978评论 0 1
  • 概述 虚拟化技术 真一次编译到处运行 Docker 最初是 dotCloud 公司创始人 Solomon Hyke...
    isuntong阅读 216评论 0 0
  • 1 Docker简介 1.1 什么是虚拟化 ​ 在计算机中,虚拟化(英语:Virtualization)是一种...
    吻中求胜阅读 302评论 0 1
  • 一、什么是Docker?   提到容器化技术,就必须提到docker,下面从历史来源、功能作用、技术本质几方面谈谈...
    小胡_鸭阅读 565评论 0 0
  • 单身生活,偶尔羡慕,偶尔庆幸 单身久了,有时候会羡慕其他情侣,有时候也会庆幸,小情侣在一起的时候。有甜蜜,但更多的...
    子清视界阅读 1,993评论 4 12