Docker开发指南

尾调薄雾
• 阅读 183

网站

更多书籍点击进入>> <font color=blue>CiCi岛</font>

下载

<font color=red>电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍</font>

封页

Docker开发指南

编辑推荐

Docker容器给软件的开发、发布和运行提供了简单、快速和可靠的方法,尤其是在动态和分布式的环境中。通过这本实战指南,你将学习到为什么容器如此重要,Docker能带来哪些好处,以及怎样把它变成开发流程的一部分。 本书适合软件开发者、运维工程师和系统管理员,尤其适合对DevOps模式感兴趣的读者。作者将带领你从基础知识出发,直到了解如何在多主机系统上运行数十个拥有联网和调度能力的容器系统,重在让你掌握使用Docker来开发、测试以及部署Web应用。 · 从构建和部署简单Web应用开始了解Docker · 使用持续部署技术,把应用一天多次推送到生产环境 · 学习各种不同的选项和技术,实现多容器的日志记录和监控 · 剖析联网和服务发现:容器之间如何寻找对方,以及怎样把它们连接起来 · 通过运用容器的编排和集群功能,解决负载均衡、扩展、故障切换以及调度的问题 · 遵守纵深防御和*小权限的原则,确保系统安全 · 利用容器构建微服务架构

内容简介

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

作者简介

Adrian Mouat Container Solutions公司首席科学家。参与过很多软件项目,既有小型的Web应用,也有大型数据分析软件。 译者简介 : 黄彦邦(Anthony Wong) Linux开发专家,热衷于开源技术,从事Linux相关开发工作十多年,曾参与多个大型开源项目,如Debian GNU/Linux和Ubuntu,提交补丁无数。以推动Debian系统中文化以及网站和文档翻译为目标,1998年成为中国首位Debian计划官方开发者。 个人网站:http://blog.anthonywong.net

目 录

前言 xi


第一部分 背景与基础


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


1.1 容器与虚拟机的比较 4


1.2 Docker与容器 5


1.3 Docker的历史 7


1.4 插件与基础设施 8


1.5 64位Linux 9


第 2 章 安装 10


2.1 在Linux上安装 Docker 10


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


2.1.2 不使用sudo命令执行Docker 11


2.2 在Mac OS及Windows上安装Docker 12


2.3 快速确认 13


第 3 章 迈出第一步 15


3.1 运行第一个镜像 15


3.2 基本命令 16


3.3 通过Dockerfile创建镜像 20


3.4 使用寄存服务 22


3.5 使用Redis官方镜像 24


3.6 总结 27


第 4 章 Docker基本概念 28


4.1 Docker系统架构 28


4.1.1 底层技术 29


4.1.2 周边技术 30


4.1.3 Docker托管 31


4.2 镜像是如何生成的 32


4.2.1 构建环境的上下文 32


4.2.2 镜像层 33


4.2.3 缓存 35


4.2.4 基础镜像 35


4.2.5 Dockerfile指令 37


4.3 使容器与世界相连 39


4.4 容器互联 40


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


4.5.1 共享数据 43


4.5.2 数据容器 44


4.6 Docker常用命令 45


4.6.1 run命令 46


4.6.2 容器管理 48


4.6.3 Docker信息 50


4.6.4 容器信息 50


4.6.5 镜像管理 52


4.6.6 使用寄存服务器 54


4.7 总结 55


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


第 5 章 在开发中应用Docker 59


5.1 说声“Hello World!” 59


5.2 通过Compose实现自动化 67


5.3 总结 69


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


6.1 创建一个基本网页 72


6.2 利用现有镜像 73


6.3 实现缓存功能 78


6.4 微服务 81


6.5 总结 81


第 7 章 镜像分发 82


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


7.2 Docker Hub 83


7.3 自动构建 85


7.4 私有分发 86


7.4.1 运行自己的寄存服务 86


7.4.2 商业寄存服务 92


7.5 缩减镜像大小 92


7.6 镜像出处 94


7.7 总结 94


第 8 章 Docker持续集成与测试 95


8.1 为identidock添加单元测试 95


8.2 创建Jenkins容器 100


8.3 推送镜像 106


8.3.1 给镜像正确的标签 106


8.3.2 准生产及生产环境 108


8.3.3 镜像数量激增的问题 108


8.3.4 使用Docker部署Jenkins slaves 109


8.4 备份Jenkins数据 109


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


8.6 测试与微服务 110


8.7 总结 111


第 9 章 部署容器 113


9.1 通过Docker Machine配置资源 114


9.2 使用代理 117


9.3 执行选项 122


9.3.1 shell脚本 122


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


9.3.3 使用配置管理工具 127


9.4 主机配置 130


9.4.1 选择操作系统 130


9.4.2 选择存储驱动程序 130


9.5 专门的托管方案 132


9.5.1 Triton 132


9.5.2 谷歌容器引擎 134


9.5.3 亚马逊EC2容器服务 135


9.5.4 Giant Swarm 136


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


9.7 分享秘密信息 139


9.7.1 在镜像中保存秘密信息 139


9.7.2 通过环境变量传递密钥 139


9.7.3 通过数据卷传递密钥 140


9.7.4 使用键值存储 140


9.8 网络连接 141


9.9 生产环境的寄存服务 141


9.10 持续部署 / 交付 141


9.11 总结 142


第 10 章 日志记录和监控 143


10.1 日志记录 144


10.1.1 Docker默认的日志记录 144


10.1.2 日志汇总 145


10.1.3 使用ELK进行日志记录 146


10.1.4 通过syslog实现日志管理 155


10.1.5 从文件抓取日志 160


10.2 监控和警报 161


10.2.1 使用Docker工具进行监测 161


10.2.2 cAdvisor 162


10.2.3 集群解决方案 163


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


10.4 总结 166


第三部分 工具和技术


第 11 章 联网和服务发现 169


11.1 大使容器 170


11.2 服务发现 173


11.2.1 etcd 173


11.2.2 SkyDNS 177


11.2.3 Consul 181


11.2.4 服务注册 185


11.2.5 其他解决方案 186


11.3 联网选项 187


11.3.1 网桥模式 187


11.3.2 主机模式 188


11.3.3 容器模式 188


11.3.4 未联网模式 188


11.4 全新的Docker联网功能 188


11.5 网络解决方案 190


11.5.1 Overlay 191


11.5.2 Weave 193


11.5.3 Flannel 196


11.5.4 Calico项目 201


11.6 总结 205


第 12 章 编排、集群和管理 207


12.1 集群和编排工具 208


12.1.1 Swarm 208


12.1.2 fleet 214


12.1.3 Kubernetes 219


12.1.4 Mesos和Marathon 226


12.2 容器管理平台 235


12.2.1 Rancher 236


12.2.2 Clocker 237


12.2.3 Tutum 238


12.3 总结 239


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


13.1 需要考虑的事项 242


13.2 纵深防御 244


13.3 如何保护identidock 245


13.4 以主机隔离容器 246


13.5 进行更新 246


13.6 镜像出处 249


13.6.1 Docker摘要 250


13.6.2 Docker的内容信任机制 250


13.6.3 可复制及可信任的Dockerfile 254


13.7 安全建议 256


13.7.1 设置用户 256


13.7.2 限制容器联网 257


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


13.7.4 限制内存使用 259


13.7.5 限制CPU使用 260


13.7.6 限制重新启动 261


13.7.7 限制文件系统 261


13.7.8 限制内核能力 262


13.7.9 应用资源限制 263


13.8 运行加固内核 264


13.9 Linux安全模块 265


13.9.1 SELinux 265


13.9.2 AppArmor 268


13.10 审核 268


13.11 事件响应 269


13.12 未来特性 269


13.13 总结 270


作者简介 271


关于封面 271




媒体评论

“《Docker开发指南》详尽、实用,尤为难能可贵的是,书中介绍了怎样在Docker的生态系统中把容器化的微服务从开发/测试环境迁移到生产环境。”——Adrian Cockcroft,Battery Ventures技术分析师 “《Docker开发指南》对Docker和容器生态进行了深入而全面的介绍。这本书注重实践,包含大量范例,因此把其中的概念和技巧运用到实际项目中将非常容易。”——Pini Reznik,Container Solutions CTO


本篇文章由一文多发平台ArtiPub自动发布

点赞
收藏
评论区
推荐文章
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Stella981 Stella981
3年前
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解2016年09月02日00:00:36 \牧野(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fme.csdn.net%2Fdcrmg) 阅读数:59593
Stella981 Stella981
3年前
ASMSupport教程4.7 生成关系运算符
<p在java中,关系运算符是很常用的,分别是&gt;,,&lt;,&gt;,&lt;,!这六种,我们按照惯例看看我们需要生成的代码:</p<divid"scid:9D7513F9C04C4721824A2B34F0212519:dfec0f1ca2ec4ebabc9b91c161fbfa47"class"wlWri
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
4,MongoDB 之 $关键字 及 $修改器 $set $inc $push $pull $pop MongoDB
MongoDB中的关键字有很多,$lt$gt$lte$gte等等,这么多我们也不方便记,这里我们说说几个比较常见的一.查询中常见的等于大于小于大于等于小于等于等于:在MongoDB中什么字段等于什么值其实就是":"来搞定比如"name":"路飞学城"!(https://oscimg.oschin
Wesley13 Wesley13
3年前
MongoDB 范围查询
查询价格在2009000  $gt 大于   $lt  小于//查询价格2009000范围的数据db.prodgory.find({"price":{$gt:"200",$lt:"9000"}})查询给定范围数据  $in//给定范围查询db.product1.find({"categor
Stella981 Stella981
3年前
Python 为什么只需一条语句“a,b=b,a”,就能直接交换两个变量?
从接触Python时起,我就觉得Python的元组解包(unpacking)挺有意思,非常简洁好用。最显而易见的例子就是多重赋值,即在一条语句中同时给多个变量赋值:&gt;&gt;&gt;x,y1,2&gt;&gt;&gt;print(x,y)结果:12在此例中,赋值操作符“”号的右
小万哥 小万哥
1年前
资源描述框架的用途及实际应用解析
RDF(资源描述框架)是一种用于机器理解网络资源的框架,使用XML编写。它通过URI标识资源,用属性描述资源,便于计算机应用程序处理信息。RDF在语义网上促进信息的确切含义和自动处理,使得网络信息可被整合。RDF语句由资源、属性和属性值组成。RDF文档包括&lt;rdf:RDF&gt;根元素和&lt;rdf:Description&gt;元素,后者用about属性标识资源。RDF还支持容器(如&lt;Bag&gt;、&lt;Seq&gt;和&lt;Alt&gt;)来描述集合。RDFS是RDF的扩展,提供描述类和属性的框架,而达布林核心是一组预定义属性,用于描述文档。
小万哥 小万哥
1年前
RSS 解析:全球内容分发的利器及使用技巧
RSS(ReallySimpleSyndication)是一种XML格式,用于网站内容的聚合和分发,让用户能快速浏览和跟踪更新。RSS文档结构包括&lt;channel&gt;和&lt;item&gt;元素,允许内容创作者分享标题、链接和描述。通过RSS,用户可以定制新闻源,过滤不相关信息,提高效率。RSS支持不同版本,如RSS0.91和RSS2.0,其中RSS2.0语法简单且广泛使用。RSS提高网站流量,适用于新闻、博客、日历等频繁更新的站点。RSS的历史始于1997年,至今仍无官方标准,但已成为内容共享的重要工具。
尾调薄雾
尾调薄雾
Lv1
愿星河徜徉,一路有光。
文章
3
粉丝
0
获赞
0