《天天5分钟玩转Docker容器技术》是一个有关容器技术的教程,有下面两个特色:java
简单回答是:容器技术很是热门,但门槛高。docker
容器技术是继大数据和云计算以后又一煊赫一时的技术,并且将来至关一段时间内都会很是流行。ubuntu
对 IT 行业来讲,这是一项很是有价值的技术。而对 IT 从业者来讲,掌握容器技术是市场的须要,也是提高自我价值的重要途径。浏览器
拿我本身的工做经从来说,毕业后的头几年是作 J2EE 应用开发。后来到一家大型IT公司,公司的产品从中间件到操做系统、从服务器到存储、从虚拟化到云计算都有涉及。安全
我所在的部门是专门作 IT 基础设施实施服务的,最开始是作传统的 IT 项目,包括服务器配置,双机 HA 等。随着虚拟化技术成熟,工做上也开始涉及各类虚拟化技术的规划和实施,包括 VMWare、KVM、PowerVM等。后来云计算兴起,在公司业务和我的兴趣的驱动下,开始学习和实践 OpenStack,在这个过程当中写了《天天5分钟玩转OpenStack》教程并获得你们的承认。服务器
如今以 Docker 为表明的容器技术来了,并且关注度愈来愈高,这一点能够从 Google Trend 中 Docker 的搜索上升趋势(蓝色曲线)中清楚看到。微信
每一轮新技术的兴起,不管对公司仍是我的既是机会也是挑战。网络
我我的的见解是:若是某项新技术将来将成为主流,就应该及早尽快掌握。
由于:架构
机会讲过了,我们再来看看挑战。app
新技术每每意味着技术上的突破和创新,会有很多新的概念和方法。
并且从大数据,云计算和容器技术来看,这些新技术都是平台级别,覆盖的技术范围很是广,包括了计算、网络、存储、高可用、监控、安全等多个方面,要掌握这些新技术对 IT 老兵尚有不小难度,更别说新人了。
因为对技术一直保持着很高的热诚和执着,在掌握了 OpenStack 相关 IaaS 技术后,我便开始调研 PaaS 技术栈。正好这时 Docker 也愈来愈流行,天然而然便开始了容器相关技术的学习研究和实践。
学习容器技术的过程能够说是惊喜不断,常常惊叹于容器理念的先进和容器生态环境的完整和强大。不少传统软件开发和运维中的难题在容器世界里都能轻松解决,也渐渐理解了容器为什么如此受到青睐。
不夸张地说,容器为我打开了一扇通往另外一个软件世界的大门,让我沉浸其中,激动不已。高兴之余,我也火烧眉毛地想把我所看到所学到和所想到的有关容器的知识介绍给更多的人,让更多的IT工程师可以从容器技术中受益。
我但愿这个教程也能为你们打开这扇门,下降学习的曲线,系统地学习和掌握容器技术。
这套教程的目标读者包括:
软件开发人员
相信微服务架构(Microservice Architectur)会逐渐成为开发应用系统的主流。而容器则是这种架构的基石。市场将须要更多可以开发出基于容器的应用程序的软件开发人员。
IT 实施和运维工程师
容器为应用提供了更好的打包和部署方式。愈来愈多的应用将以容器的方式在开发、测试和生产环境中运行。掌握容器相关技术将成为实施和运维工程师的核心竞争力。
我本身
我坚信最好的学习方法是分享。编写这个教程同时也是对本身学习和实践容器技术的总结。对于知识,只有把它写出来并可以让其余人理解,才能说明真正掌握了这项知识。
本系列教程分为《天天5分钟玩转Docker容器技术》和《天天5分钟玩转Docker容器平台》两本,包括如下三大块内容:
下面分别介绍各部分包含的内容。
启程
“启程”会介绍容器的生态系统,让你们先从总体上了解容器都包含哪些技术,各类技术之间的相互关系是什么,而后再来看咱们的教程都会涉及生态中的哪些部分。
为了让你们尽快对容器有个感性认识,咱们会搭建实验环境并运行第一个容器,为以后的学习热身。
容器技术
这是教程的主要内容,包含“容器核心知识”和“容器进阶知识”两部分。
核心知识主要回答有关容器 what, why 和 how 三方面的问题。 其中以 how 为重,将展开讨论架构、镜像、容器、网络和存储。
进阶知识包括将容器真正用于生产所必需的技术,包括多主机管理、跨主机网络、监控、数据管理、日志管理和安全管理。
这部份内容将在本书《天天5分钟玩转Docker容器技术》中详细讨论。
容器平台技术
以下图所示,“容器平台技术”包括容器编排引擎、容器管理平台和基于容器的 PaaS。容器平台技术在生态环境中占据着举足轻重的位置,对于容器是否可以落地,是否能应用于生产相当重要。
咱们将在本系列教程的另外一本书《天天5分钟玩转Docker容器平台》中详细讨论容器编排引擎、容器管理平台和基于容器的 PaaS,学习和实践业界最具表明性的开源产品。
我会继续采用《天天5分钟玩转OpenStack》的方式,经过大量的实验由浅入深地探讨和实践容器技术,力求达到以下目标:
在内容的发布上仍是经过微信公众号(cloudman6)每周 一、三、5 按期分享。欢迎你们经过公众号提出问题和建议,进行技术交流。
为了下降学习的难度而且考虑到移动端碎片化阅读的特色,每次推送的内容你们只须要花5分钟就能看完(注意这里说的是看完,有时候要彻底理解可能须要更多时间哈),每篇内容包含1-3个知识点,这就是我把教程命名为《天天5分钟玩转Docker容器技术》的缘由。虽然是碎片化推送,但整个教程是系统、连贯和完整的,只是化整为零了。
好了,今天这5分钟算是开了个头,下次咱们正式开始玩转容器技术。
对于像容器这类平台级别的技术,一般涉及的知识范围会很广,相关的软件,解决方案也会不少,初学者每每容易迷失。
那怎么办呢?
咱们能够从生活经验中寻找答案。
当咱们去陌生城市旅游想了解一下这个城市通常咱们会怎么作?
我想大部分人应该会打开手机看一下这个城市的地图:
一样的道理,学习容器技术咱们能够先从天上鸟瞰一下:
首先得对容器技术有个总体认识,以后咱们的学习才可以有的放矢,才可以分清轻重缓急,作到心中有数,这样就不容易迷失了。
接下来我会根据本身的经验帮你们规划一条学习路线,一块儿探索容器生态系统。
学习新技术获得及时反馈是很是重要的,因此咱们立刻会搭建实验环境,并运行第一个容器,感觉什么是容器。
千里之行始于足下,让咱们从了解生态系统开始吧。
容器生态系统
一谈到容器,你们都会想到 Docker。
Docker 如今几乎是容器的代名词。确实,是 Docker 将容器技术发扬光大。同时,你们也须要知道围绕 Docker 还有一个生态系统。Docker 是这个生态系统的基石,但完善的生态系统才是保障 Docker 以及容器技术可以真正健康发展的决定因素。
大体来看,容器生态系统包含核心技术、平台技术和支持技术。
下面分别介绍。
容器核心技术
容器核心技术是指可以让 container 在 host 上运行起来的那些技术。
这些技术包括容器规范、容器 runtime、容器管理工具、容器定义工具、Registry 以及 容器 OS,下面分别介绍。
容器规范
容器不光是 Docker,还有其余容器,好比 CoreOS 的 rkt。为了保证容器生态的健康发展,保证不一样容器之间可以兼容,包含 Docker、CoreOS、Google在内的若干公司共同成立了一个叫 Open Container Initiative(OCI) 的组织,其目是制定开放的容器规范。
目前 OCI 发布了两个规范:runtime spec 和 image format spec。
有了这两个规范,不一样组织和厂商开发的容器可以在不一样的 runtime 上运行。这样就保证了容器的可移植性和互操做性。
容器 runtime
runtime 是容器真正运行的地方。runtime 须要跟操做系统 kernel 紧密协做,为容器提供运行环境。
若是你们用过 Java,能够这样来理解 runtime 与容器的关系:
Java 程序就比如是容器,JVM 则比如是 runtime。JVM 为 Java 程序提供运行环境。一样的道理,容器只有在 runtime 中才能运行。
lxc、runc 和 rkt 是目前主流的三种容器 runtime。
lxc 是 Linux 上老牌的容器 runtime。Docker 最初也是用 lxc 做为 runtime。
runc 是 Docker 本身开发的容器 runtime,符合 oci 规范,也是如今 Docker 的默认 runtime。
rkt 是 CoreOS 开发的容器 runtime,符合 oci 规范,于是可以运行 Docker 的容器。
容器管理工具
光有 runtime 还不够,用户得有工具来管理容器啊。容器管理工具对内与 runtime 交互,对外为用户提供 interface,好比 CLI。这就比如除了 JVM,还得提供 java
命令让用户可以启停应用不是。
lxd 是 lxc 对应的管理工具。
runc 的管理工具是 docker engine。docker engine 包含后台 deamon 和 cli 两个部分。咱们一般提到 Docker,通常就是指的 docker engine。
rkt 的管理工具是 rkt cli。
容器定义工具
容器定义工具容许用户定义容器的内容和属性,这样容器就可以被保存,共享和重建。
docker image 是 docker 容器的模板,runtime 依据 docker image 建立容器。
dockerfile 是包含若干命令的文本文件,能够经过这些命令建立出 docker image。
ACI (App Container Image) 与 docker image 相似,只不过它是由 CoreOS 开发的 rkt 容器的 image 格式。
Registry
容器是经过 image 建立的,须要有一个仓库来统一存放 image,这个仓库就叫作 Registry。
企业能够用 Docker Registry 构建私有的 Registry。
Docker Hub(https://hub.docker.com) 是 Docker 为公众提供的托管 Registry,上面有不少现成的 image,为 Docker 用户提供了极大的便利。
http://Quay.io(https://quay.io/)是另外一个公共托管 Registry,提供与 Docker Hub 相似的服务。
容器 OS
因为有容器 runtime,几乎全部的 Linux、MAC OS 和 Windows 均可以运行容器。但这不并无妨碍容器 OS 的问世。
容器 OS 是专门运行容器的操做系统。与常规 OS 相比,容器 OS 一般体积更小,启动更快。由于是为容器定制的 OS,一般它们运行容器的效率会更高。
目前已经存在很多容器 OS,CoreOS、atomic 和 ubuntu core 是其中的杰出表明。
容器核心技术使得容器可以在单个 host 上运行。而容器平台技术可以让容器做为集群在分布式环境中运行。
容器平台技术包括容器编排引擎、容器管理平台和基于容器的 PaaS。
容器编排引擎
基于容器的应用通常会采用微服务架构。在这种架构下,应用被划分为不一样的组件,并以服务的形式运行在各自的容器中,经过 API 对外提供服务。为了保证应用的高可用,每一个组件均可能会运行多个相同的容器。这些容器会组成集群,集群中的容器会根据业务须要被动态地建立、迁移和销毁。
你们能够看到,这样一个基于微服务架构的应用系统其实是一个动态的可伸缩的系统。这对咱们的部署环境提出了新的要求,咱们须要有一种高效的方法来管理容器集群。而这,就是容器编排引擎要干的工做。
所谓编排(orchestration),一般包括容器管理、调度、集群定义和服务发现等。经过容器编排引擎,容器被有机的组合成微服务应用,实现业务需求。
docker swarm 是 Docker 开发的容器编排引擎。
kubernetes 是 Google 领导开发的开源容器编排引擎,同时支持 Docker 和 CoreOS 容器。
mesos 是一个通用的集群资源调度平台,mesos 与 marathon 一块儿提供容器编排引擎功能。
以上三者是当前主流的容器编排引擎。
容器管理平台
容器管理平台是架构在容器编排引擎之上的一个更为通用的平台。一般容器管理平台可以支持多种编排引擎,抽象了编排引擎的底层实现细节,为用户提供更方便的功能,好比 application catalog 和一键应用部署等。
Rancher 和 ContainerShip 是容器管理平台的典型表明。
基于容器的 PaaS
基于容器的 PaaS 为微服务应用开发人员和公司提供了开发、部署和管理应用的平台,使用户没必要关心底层基础设施而专一于应用的开发。
Deis、Flynn 和 Dokku 都是开源容器 PaaS 的表明。
下面这些技术被用于支持基于容器的基础设施。
容器网络
容器的出现使网络拓扑变得更加动态和复杂。用户须要专门的解决方案来管理容器与容器,容器与其余实体之间的连通性和隔离性。
docker network 是 Docker 原生的网络解决方案。除此以外,咱们还能够采用第三方开源解决方案,例如 flannel、weave 和 calico。不一样方案的设计和实现方式不一样,各有优点和特色,须要根据实际须要来选型。
服务发现
动态变化是微服务应用的一大特色。当负载增长时,集群会自动建立新的容器;负载减少,多余的容器会被销毁。容器也会根据 host 的资源使用状况在不一样 host 中迁移,容器的 IP 和端口也会随之发生变化。
在这种动态的环境下,必需要有一种机制让 client 可以知道如何访问容器提供的服务。这就是服务发现技术要完成的工做。
服务发现会保存容器集群中全部微服务最新的信息,好比 IP 和端口,并对外提供 API,提供服务查询功能。
etcd、consul 和 zookeeper 是服务发现的典型解决方案。
监控
监控对于基础架构很是重要,而容器的动态特征对监控提出更多挑战。针对容器环境,已经涌现出不少监控工具和方案。
docker ps/top/stats 是 Docker 原生的命令行监控工具。除了命令行,Docker 也提供了 stats API,用户能够经过 HTTP 请求获取容器的状态信息。
sysdig、cAdvisor/Heapster 和 Weave Scope 是其余开源的容器监控方案。
数据管理
容器常常会在不一样的 host 之间迁移,如何保证持久化数据也可以动态迁移,是 Rex-Ray 这类数据管理工具提供的能力。
日志管理
日志为问题排查和事件管理提供了重要依据。
docker logs 是 Docker 原生的日志工具。而 logspout 对日志提供了路由功能,它能够收集不一样容器的日志并转发给其余工具进行后处理。
安全性
对于年轻的容器,安全性一直是业界争论的焦点。
OpenSCAP 可以对容器镜像进行扫描,发现潜在的漏洞。
本教程覆盖的知识范围
前面咱们已经鸟瞰了整个容器生态系统,对容器所涉及的技术体系有了全面的认识。那咱们的系列教程会讨论其中的哪些内容呢?
会覆盖容器生态系统 91.6% 的技术!
为了让你们对容器有个感性认识,咱们将尽快让一个容器运行起来。首先咱们须要搭建实验环境。
容器须要管理工具、runtime 和操做系统,咱们的选择以下:
本节咱们将在 ubuntu 16.04 虚拟机中安装 Docker。由于安装过程须要访问 internet, 因此虚拟机必须可以上网。
Docker 支持几乎全部的 Linux 发行版,也支持 Mac 和 Windows。各操做系统的安装方法能够访问:https://docs.docker.com/engine/installation/
Docker 分为开源免费的 CE(Community Edition)版本和收费的 EE(Enterprise Edition)版本。下面咱们将按照文档,经过如下步骤在 Ubuntu 16.04 上安装 Docker CE 版本。
配置 Docker 的 apt 源
1.安装包,容许 apt
命令 HTTPS 访问 Docker 源。
2.添加 Docker 官方的 GPG key
3.将 Docker 的源添加到 /etc/apt/sources.list
安装 Docker
环境就绪,立刻运行第一个容器,执行命令:
其过程能够简单的描述为:
下面咱们能够经过浏览器验证容器是否正常工做。在浏览器中输入 http://[your ubuntu host IP]
能够访问容器的 http 服务了,第一个容器运行成功!咱们轻轻松松就拥有了一个 WEB 服务器。随着学习的深刻,会看到容器技术带给咱们更多的价值。
咱们已经完成了教程的第一部分。
咱们认识了容器生态系统,后面会陆续学习生态系统中的大部分技术。咱们在 Ubuntu 16.04 上配置好了实验环境,并成功运行了第一个容器 httpd。
容器大门已经打开,让咱们去探秘吧。