Docker开发指南pdf

图书网 2018年8月30日08:59:40
评论
1.9K

Docker容器给软件的开发、发布和运行提供了简单、快速和可靠的方法,尤其是在动态和分布式的环境中。通过这本实战指南,你将学习到为什么容器如此重要,Docker能带来哪些好处,以及怎样把它变成开发流程的一部分。

本书适合软件开发者、运维工程师和系统管理员,尤其适合对DevOps模式感兴趣的读者。作者将带领你从基础知识出发,直到了解如何在多主机系统上运行数十个拥有联网和调度能力的容器系统,重在让你掌握使用Docker来开发、测试以及部署Web应用。

- 从构建和部署简单Web应用开始了解Docker

- 使用持续部署技术,把应用一天多次推送到生产环境

- 学习各种不同的选项和技术,实现多容器的日志记录和监控

- 剖析联网和服务发现:容器之间如何寻找对方,以及怎样把它们连接起来

- 通过运用容器的编排和集群功能,解决负载均衡、扩展、故障切换以及调度的问题

- 遵守纵深防御和zui小权限的原则,确保系统安全

- 利用容器构建微服务架构

Docker开发指南 内容简介

Docker容器轻量和可移植的特性尤其适用于动态和分布式的环境,它的兴起给软件开发流程带来了一场革命。Docker开发指南对Docker进行了全面讲解,包括开发、生产以至维护的整个软件生命周期,并对其中可能出现的一些问题进行了探讨,如软件版本差异、开发环境与生产环境的差异、系统安全问题,等等。

Docker开发指南 目录

第一部分 背景与基础

第1章 何谓容器,为何需要它

1.1 容器与虚拟机的比较

1.2 Docker与容器

1.3 Docker的历史

1.4 插件与基础设施

1.5 64位Linux

第2章 安装

2.1 在Linux上安装Docker

2.1.1 将SELinux置于宽容模式下运行

2.1.2 不使用sudo命令执行Docker

2.2 在Mac OS及Windows上安装Docker

2.3 快速确认

第3章 迈出第一步

3.1 运行第一个镜像

3.2 基本命令

3.3 通过Dockerfile创建镜像

3.4 使用寄存服务

3.5 使用Redis官方镜像

3.6 总结

第4章 Docker基本概念

4.1 Docker系统架构

4.1.1 底层技术

4.1.2 周边技术

4.1.3 Docker托管

4.2 镜像是如何生成的

4.2.1 构建环境的上下文

4.2.2 镜像层

4.2.3 缓存

4.2.4 基础镜像

4.2.5 Dockerfile指令

4.3 使容器与世界相连

4.4 容器互联

4.5 利用数据卷和数据容器管理数据

4.5.1 共享数据

4.5.2 数据容器

4.6 Docker常用命令

4.6.1 run命令

4.6.2 容器管理

4.6.3 Docker信息

4.6.4 容器信息

4.6.5 镜像管理

4.6.6 使用寄存服务器

4.7 总结

第二部分 Docker与软件生命周期

第5章 在开发中应用Docker

5.1 说声“Hello World!”

5.2 通过Compose实现自动化

5.3 总结

第6章 创建一个简单的Web应用

6.1 创建一个基本网页

6.2 利用现有镜像

6.3 实现缓存功能

6.4 微服务

6.5 总结

第7章 镜像分发

7.1 镜像及镜像库的命名方式

7.2 Docker Hub

7.3 自动构建

7.4 私有分发

7.4.1 运行自己的寄存服务

7.4.2 商业寄存服务

7.5 缩减镜像大小

7.6 镜像出处

7.7 总结

第8章 Docker持续集成与测试

8.1 为identidock添加单元测试

8.2 创建Jenkins容器

8.3 推送镜像

8.3.1 给镜像正确的标签

8.3.2 准生产及生产环境

8.3.3 镜像数量激增的问题

8.3.4 使用Docker部署Jenkins slaves

8.4 备份Jenkins数据

8.5 持续集成的托管解决方案

8.6 测试与微服务

8.7 总结

第9章 部署容器

9.1 通过Docker Machine配置资源

9.2 使用代理

9.3 执行选项

9.3.1 shell脚本

9.3.2 使用进程管理器(或用systemd控制所有进程)

9.3.3 使用配置管理工具

9.4 主机配置

9.4.1 选择操作系统

9.4.2 选择存储驱动程序

9.5 专门的托管方案

9.5.1 Triton

9.5.2 谷歌容器引擎

9.5.3 亚马逊EC2容器服务

9.5.4 Giant Swarm

9.6 持久性数据和生产环境容器

9.7 分享秘密信息

9.7.1 在镜像中保存秘密信息

9.7.2 通过环境变量传递密钥

9.7.3 通过数据卷传递密钥

9.7.4 使用键值存储

9.8 网络连接

9.9 生产环境的寄存服务

9.10 持续部署/交付

9.11 总结

第10章 日志记录和监控

10.1 日志记录

10.1.1 Docker默认的日志记录

10.1.2 日志汇总

10.1.3 使用ELK进行日志记录

10.1.4 通过syslog实现日志管理

10.1.5 从文件抓取日志

10.2 监控和警报

10.2.1 使用Docker工具进行监测

10.2.2 cAdvisor

10.2.3 集群解决方案

10.3 商用的监听及日志记录解决方案

10.4 总结

第三部分 工具和技术

第11章 联网和服务发现

11.1 大使容器

11.2 服务发现

11.2.1 etcd

11.2.2 SkyDNS

11.2.3 Consul

11.2.4 服务注册

11.2.5 其他解决方案

11.3 联网选项

11.3.1 网桥模式

11.3.2 主机模式

11.3.3 容器模式

11.3.4 未联网模式

11.4 全新的Docker联网功能

11.5 网络解决方案

11.5.1 Overlay

11.5.2 Weave

11.5.3 Flannel

11.5.4 Calico项目

11.6 总结

第12章 编排、集群和管理

12.1 集群和编排工具

12.1.1 Swarm

12.1.2 fleet

12.1.3 Kubernetes

12.1.4 Mesos和Marathon

12.2 容器管理平台

12.2.1 Rancher

12.2.2 Clocker

12.2.3 Tutum

12.3 总结

第13章 容器安全与限制容器

13.1 需要考虑的事项

13.2 纵深防御

13.3 如何保护identidock

13.4 以主机隔离容器

13.5 进行更新

13.6 镜像出处

13.6.1 Docker摘要

13.6.2 Docker的内容信任机制

13.6.3 可复制及可信任的Dockerfile

13.7 安全建议

13.7.1 设置用户

13.7.2 限制容器联网

13.7.3 删除setuid和setgid的二进制文件

13.7.4 限制内存使用

13.7.5 限制CPU使用

13.7.6 限制重新启动

13.7.7 限制文件系统

13.7.8 限制内核能力

13.7.9 应用资源限制

13.8 运行加固内核

13.9 Linux安全模块

13.9.1 SELinux

13.9.2 AppArmor

13.10 审核

13.11 事件响应

13.12 未来特性

13.13 总结

作者简介

关于封面

附录

Docker开发指南 精彩文摘

容器从根本上改变了人们开发、发布以及运行软件的方式。软件开发者可以在本地构建软件,因为他们知道软件能够在任何主机环境下运行,无论是IT 部门的机房、用户的笔记本电脑,还是云端集群,而且运行时并无差异。运维工程师只需专注于维护网络和资源,保证正常运行时间,减少了花在配置环境及解决系统依赖关系上的时间。从规模很小的创业公司,到规模庞大的企业,容器的使用率和理解程度正以惊人的速度提升。可以预见,在未来几年,开发者和运维工程师将以不同形式广泛使用容器技术。

容器是对应用程序及其依赖关系的封装。乍一看容器只是个轻量级的虚拟机,它和虚拟机一样拥有一个被隔离的操作系统实例,用来运行应用程序。

但容器拥有一些优点,使它能实现一些传统虚拟机很难实现甚至无法实现的用例。

• 容器能与主机的操作系统共享资源,因而它的效率高出一个数量级。启动和停止容器均只需一瞬间。相比在主机上直接运行程序,容器的性能损耗非常低,甚至是零损耗。

• 容器具有可移植性,这极有可能彻底解决由于运行环境的些许改变而导致的问题,甚至有可能彻底终止开发者的抱怨:“可是程序在我的计算机上能正常工作!”

• 容器是轻量的,这意味着开发者能同时运行数十个容器,并能模拟分布式系统在真实运行环境下的情况。运维工程师在一台主机上能运行的容器数量,远远超过仅使用虚拟机时。

• 对于最终用户及开发者而言,容器的优势不仅仅体现在云端部署。用户可以下载并执行复杂的应用程序,而无需花费大量时间在配置和安装的问题上,也无需担心对系统本身的改动。另一方面,应用程序的开发者不用再操心用户环境的差异,以及依赖关系是否满足。

更重要的是,虚拟机和容器的根本目标不尽相同。虚拟机的目的是要完整地模拟另一个环境,而容器的目的则是使应用程序能够移植,并把所有依赖关系包含进去。

1.1 容器与虚拟机的比较

虽然容器和虚拟机乍一看很相似,但它们之间有着重大的差异,用图就能轻松解释这些差异。

图1-1 中有三个应用程序,分别运行在主机的不同虚拟机上。这里需要一个虚拟机管理程序( hypervisor)1 来创建及运行虚拟机,控制访问底层操作系统及硬件的权限,以及在必要时解析系统调用接口。每个虚拟机需要一个完整的操作系统、用来运行的应用程序以及所需的程序库。

相比之下,图1-2 展示了上述三个应用程序在容器化系统中运行的情况。与虚拟机不同,主机的内核2 与容器共享,这意味着容器只能运行与主机一样的内核。应用程序Y 和Z 使用相同的程序库,该程序库可以被不同的应用程序同时使用,只需一份,不用复制。容器引擎(container engine)负责启动及停止容器,与虚拟机管理程序差不多。但是,容器中执行的进程与主机自身的进程是等价的,因此没有类似虚拟机管理程序执行所带来的损耗。

虚拟机与容器都可以把主机上的应用程序隔离开来。虚拟技术中的虚拟机管理程序能带来更高一级的隔离性能,是已被公认且千锤百炼的技术。容器技术相对较新,很多公司在取得充分可靠的运行记录前,无法完全信任容器的隔离性能。因此,不难发现有些系统同时采用这两种技术,将容器运行在虚拟机内,这样就能鱼与熊掌兼得。

图1-1:运行在同一台主机上的3 个虚拟机

注1: 图中表达的是第二类虚拟机管理程序,如Virtualbox 和VMWare Workstation,它运行在操作系统之上。也有第一类虚拟机管理程序,如Xen,它直接运行在裸机上。

注2:内核是操作系统的核心部分,负责为应用程序提供关于内存、CPU 以及设备访问的基本系统功能。一个完整的操作系统包括内核和各种系统程序,如启动(init)系统、编译器和窗口管理器。

图书网:Docker开发指南pdf

继续阅读

→→→→→→→→→→→→→→→→→→→→查找获取

程序设计

重构 改善既有代码的设计(中文版)pdf

《重构:改善既有代码的设计》(中文版)所提的这些重构准则将帮助你一次一小步地修改你的代码,这就减少了过程中的风险。很快你就会把这些重构准则和其名称加入自己的开发词典中,并且朗朗上口...
程序设计

数据结构 C语言版 第2版pdf

适读人群 :普通高校电子信息大类本科生学习、考研,同时也适合零售和培训。 采用“案例驱动”的编写模式。书中结合实际应用,将各章按照“案例引入——数据结构及其操作——案例分析与实现”...
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: