第一部分 Docker 容器技术基础及其应用场景介绍

1.1 Docker 的基本概念
1.2 为什么使用 Docker
1.3 Docker 体系结构简介
1.4 Docker 容器技术的应用场景

第二部分 核心概念与安装配置

2.1 核心概念
2.2 安装 Docker
2.2.1 在 Red Hat Enterprise Linux 上安装 Docker
2.2.2 在 Windows 上安装 Docker
2.2.3 在 CentOS 环境下安装 Docker

第三部分 使用 Docker 镜像

3.1 获取镜像
3.2 查看镜像信息
3.3 搜寻镜像
3.4 删除镜像
3.5 创建镜像
3.6 存出和载入镜像
3.7 上传镜像

第四部分 操作 Docker 容器

4.1 创建容器
4.2 终止容器
4.3 进入容器
4.4 删除容器
4.5 导入和导出容器
4.6 实现容器的网络端口映射

第五部分 Docker 容器实现 Web 服务与应用

5.1 Docker 容器实现 Apache 服务
5.2 Docker 容器实现 Nginx 服务
5.3 Docker 容器实现 Python 应用
5.4 Docker 容器实现 MySQL 服务

第六部分 Docker 的运行监控

6.1 容器的监控方案
6.2 单台主机上容器的监控
6.3 跨多台主机上容器的监控
6.4 Kubernetes 上容器的监控
6.5 Mesos 的监控方案
6.6 性能采集工具的对比

第一部分 Docker 容器技术基础及其应用场景介绍

1.1 Docker 的基本概念

Docker 容器是资源分割和调度的基本单位,封装整个服务的运行时环境,用于构建、发布和运行分布式应用的一个框架。它是一个跨平台、可移植并且简单易用的容器解决方案。Docker 的源代码托管在 GitHub 上,基于 Go 语言开发并遵从 Apache 2.0 协议。

Docker 容器可以快速自动化地部署应用,并通过操作系统内核技术(namespaces、 cgroups等)为容器提供资源隔离与安全保障。Docker 作为轻量级的虚拟化方式,实现了 PaaS 平台的高效部署、运行和维护。

图片
1.2 为什么使用 Docker

图片
持续部署与测试
Docker 消除了线上线下的环境差异,保证了应用生命周期的环境一致性和标准化。开发人员使用镜像实现标准开发环境的构建,开发完成后通过封装着完整环境和应用的镜像进行迁移,由此,测试和运维人员可以直接部署软件镜像来进行测试和发布,大大简化了持续集成、测试和发布的过程。

Docker 是革命性的,它重新定义了软件开发、测试、交付和部署的流程。我们交付的东西不再只是代码、配置文件、数据库定义等,而是整个应用服务及其运行环境。

优异的跨平台性
Docker 在原有 Linux 容器的基础上进行大胆革新,为容器设定了一 整套标准化的配置方法,将应用及其依赖的运行环境打包成镜像。Docker 是可移植(或者说跨平台)的,可以在各种主流操作系统上使用。Java 可以做到“一次编译,到处运行”,而 Docker 可以 “构建一次,在各平台上运行”(Build once,run anywhere)。越来越多的云平台都支持 Docker,用户再也无需担心受到云平台的捆绑,同时也让应用多平台混合部署成为可能。

高资源利用率与隔离
Docker 容器没有管理程序的额外开销,与底层共享操作系统,性能更加优良,系统负载更低,在同等条件下可以运行更多的应用实例,可以更充分地利 用系统资源。同时,Docker 拥有不错的资源隔离与限制能力,可以精确地对应用分配 CPU、 内存等资源,保证了应用间不会相互影响。Docker 是轻量级虚拟化技术。与传统的 VM 相比,它更轻量,启动速度更快,单台硬件上可以同时跑成百上千个容器,所以非常适合在业务高峰期通过启动大量容器进行横向扩展。Docker 容器技术的直接虚拟化不仅在技术方面使 CPU 利用率得到显著提升,还因 80:20 法则可在业务上更大程度发挥 CPU 利用率,真正体现了虚拟化精髓。

环境标准化和版本控制
可以使用 Git 等工具对 Docker 镜像进行版本控制,相比基于代码的版本控制来说,能够对整个应用运行环境实现版本控制,一旦出现故障可以快速回滚。相比以前的虚拟机镜像,Docker 压缩和备份速度更快,镜像启动也像启动一个普通进程一样快速。

应用镜像仓库
Docker 官方构建了一个镜像仓库,组织和管理形式类似于 GitHub,其上 已累积了成千上万的镜像。因为 Docker 的跨平台适配性,相当于为用户提供了一个非常 有用的应用商店,所有人都可以自由地下载微服务组件,这为开发者提供了巨大便利。

1.3 Docker 体系结构简介

图片
Docker 是一个客户/服务器(CIient/Server,CS)架构(见上图) 。Docker 客户端是远程控制器,可通过 TCP REST 向 Docker Host 发送请求,包括创建容器、运行容器、保存容器、删除容器等请求。Docker 服务端的 Daemon 对客户端的请求进行相应的管理,随后通过 driver 转发至容器中的 libcontainer 执行环境。libcontainer 提供与不同 Linux 内核隔离的接口,类似命名空间及控制组。这种架构允许多个容器在共享同一个 Linux 内核的情况下完全隔离地运行。

图片
1.4 Docker 容器技术的应用场景

一般认为 Docker 技术有以下 8 个主要的应用场景,参见下图:

图片
应用场景 1:简化配置
这是 Docker 公司宣传的 Docker 的主要使用场景。Docker 能将运行环境和配置放在代码中然后部署,同一个 Docker 的配置可以在不同的环境中使用,这样就降低了硬件要求和应用环境之间耦合度。

应用场景 2:代码流水线(Code Pipeline)管理
代码从开发者的机器到最终在生产环境上的部署,需要经过很多的中间环境。而每一个中间环境都有微小的差别,Docker 给应用提供了一个从开发到上线均一致的环境,让代码的流水线变得简单不少。

应用场景 3:提高开发效率
Docker 能提升开发者的开发效率。不同的开发环境中,Docker 都可以把两件事做好,一是可以在开发环境、生产环境之间直接迁移,二是可以让我们快速搭建开发环境。开发环境的机器通常内存比较小,之前使用虚拟的时候,我们经常需要为开发环境的机器加内存,而现在Docker 可以轻易的让几十个服务在 Docker 中跑起来。

应用场景 4:隔离应用
有很多种原因会让我们选择在一个机器上运行不同的应用,Docker 非常适合在较低的成本下实现多种应用的隔离。

应用场景 5:整合服务器
Docker 隔离应用的能力使得 Docker 可以整合多个服务器以降低成本。由于没有操作系统的内存占用,以及能在多个实例之间共享没有使用的内存,Docker 可以比虚拟机提供更好的服务器整合解决方案。通常数据中心的服务器资源利用率只有 30%,通过使用 Docker 并进行有效的资源分配可以大幅提高服务器资源的利用率。

应用场景 6:调试能力
Docker 提供了很多的工具,包括可以为容器设置检查点、设置版本和查看两个容器之间的差别,这些特性可以帮助调试 Bug。

应用场景 7:多租户环境
另外一个 Docker 的使用场景是在多租户的应用中,它可以避免关键应用的重写。我们一个特别的关于这个场景的例子是为物联网的应用开发一个快速、易用的多租户环境。这种多租户的基本代码非常复杂,很难处理,重新规划这样一个应用不但消耗时间,也浪费金钱。

使用 Docker,可以为每一个租户的应用层的多个实例创建隔离的环境,这不仅简单而且成本低廉,当然这一切得益于 Docker 环境的启动速度和其高效的 diff 命令。

应用场景 8:快速部署
在虚拟机之前,购入部署新的硬件资源需要消耗几天的时间。虚拟化技术(Virtualization)将这个时间缩短到了分钟级别。而 Docker 通过为进程仅仅创建一个容器而无需启动一个操作系统,再次将这个过程缩短到了秒级。这正是 Google 和 Facebook 都看重的特性。我们可以创 建销毁 Docker 容器而无需担心重新启动带来的开销。

第二部分 核心概念与安装配置

本部分首先介绍 Docker 的三大核心概念。

镜像(Image)
容器(Container)
仓库(Repository)
只有理解了这三个核心概念,才能顺利地理解 Docker 容器的整个生命周期。随后将介绍如何在常见的操作系统平台上安装 Docker,包括 Redhat Linux、Windows、Centos 等主流操作系统平台。

2.1 核心概念

Docker 的大部分操作都围绕着它的三大核心概念——镜像、容器和仓库而展开。因此,准确把握这三大核心概念对于掌握 Docker 技术尤为重要。

Docker 镜像
Docker 镜像类似于虚拟机镜像,可以将它理解为一个只读的模板。例如,一个镜像可以包含一个基本的操作系统环境,里面仅安装了 Apache 应用程序(或用户需要的其他软件)。可以把它称为一个Apache 镜像。

镜像是创建 Docker 容器的基础。通过版本管理和增量的文件系统,Docker 提供了一套十分简单的机制来创建和更新现有的镜像,用户甚至可以从网上下载一个已经做好的应用镜像, 并直接使用 。

Docker 容器
Docker 容器类似于一个轻量级的沙箱,Docker 利用容器来运行和隔离应用。容器是从镜像创建的应用运行实例。可以将其启动、开始、停止、删除,而这些容器都是彼此相互隔离的、互不可见的。

可以把容器看做是一个简易版的 Linux 系统环境(包括 root 用户权限、进程空间、用户空间和网络空间等)以及运行在其中的应用程序打包而成的盒子。

Docker 仓库
Docker 仓库类似于代码仓库,它是 Docker 集中存放镜像文件的场所。

有时候会看到有资料将 Docker 仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器是存放仓库的地方,其上往往存放着多个仓库。每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签(tag)来进行区分。例如存放 ubuntu操作系统镜像的仓库称为 ubuntu 仓库,其中可能包括 14.04、12.04 等不同版本的镜像。

根据所存储的镜像公开分享与否,Docker 仓库可以分为公开仓库(Public)和私有仓库(Private)两种形式。目前,最大的公开仓库是官方提供的 Docker Hub,其中存放了数量庞大的镜像供用户下载。国内不少云服务提供商(如时速云、阿里云等)也提供了仓库的本地源,可以提供稳定的国内访问。

当然,用户如果不希望公开分享自己的镜像文件,Docker 也支持用户在本地网络内创建一个只能自己访问的私有仓库。当用户创建了自己的镜像之后就可以使用 push 命令将它上传到指定的公有或者私有仓库。这样用户下次在另外一台机器上使用该镜像时,只需要将其从仓库上 pull 下来就可以了。

可以看出,Docker 利用仓库管理镜像的设计理念与 Git 非常相似,实际上在理念设计上借鉴了 Git 的很多优秀思想。
 

需要的小伙伴,扫描下方公众号二维码,关注公众号

回复关键字:dzsn-rq-docker 即可免费无套路获取,持续更新中~。