第一本Docker书

出版日期:2014-12
ISBN:9787115377332
作者:[澳]詹姆斯•特恩布尔(James Turnbull)
页数:252页

内容概要

James Turnbull是一位技术作家,还是一名开源极客。他最近的大作是一本讲述流行开源日志工具的书——The LogStash Book。James还写了两本关于Puppet的书,一本是Pro Puppet以,另一本是较早的Pulling Strings with Puppet: Configuration Management Made Easy。此外,James还写了Pro Linux System Administration、Pro Nagios 2.0和Hardening Linux这三本书。
James真正的工作是Kickstarter的工程副总裁。之前,James曾担任Docker公司服务与支持副总裁、Venmo公司工程副总裁和Puppet Labs的技术运维副总裁。James热爱美食、美酒、阅读、摄影,还很喜欢猫咪,但对在海滩上手牵手散步却并不热衷。
译者简介
李兆海 网名Googol Lee。使用Googol这个名字真的是因为“10的100次方”这个意思,和后来的Google公司没有一点儿关系。多年后端程序员,早期以C、C++为主,后来转向Python,现在以Go为生。曾写过《Golang初探》发表于2011年2月号《程序员》。Docker早期使用者。平时喜欢乱翻书,遇到感兴趣的都会研究一番。Twitter账户@googollee。
刘斌 具有10余年软件开发经验,关注后台开发技术和各种编程语言。做过电子商务、金融、企业系统以及Android手机开发;写过Delphi,也兼做系统管理员和DBA(现在都改叫DevOps了);既做后台应用,也要调用前台CSS和JavaScript,可还是不敢自称Full Stack;今又舶来Growth Hacker,我想我要做一个Growth Engineer。
巨震 北京大学软件工程硕士,服务器端开发者。目前就职于创业公司,使用Node.js、Golang进行服务器端开发。2013年底开始研究Docker,是Docker中文社区的活跃贡献者,负责Docker技术文章和视频的翻译、校对工作。生活中喜欢美食、骑行,热衷于PC硬件,喜爱折腾,热爱一切计算机相关的技术,坚信技术改变世界。最崇拜的技术传奇人物是前id Software首席程序员、现Oculus VR首席技术官John Carmack。

书籍目录

第1 章 简介····································1
1.1 Docker 简介·····························2
1.1.1 提供一个简单、轻量的建模方式·························2
1.1.2 职责的逻辑分离················3
1.1.3 快速、高效的开发生命周期··3
1.1.4 鼓励使用面向服务的架构·····3
1.2 Docker 组件·····························3
1.2.1 Docker 客户端和服务器·······4
1.2.2 Docker 镜像······················4
1.2.3 Registry ···························5
1.2.4 容器·······························5
1.3 我们能用Docker 做什么·············6
1.4 Docker 与配置管理····················7
1.5 Docker 的技术组件····················8
1.6 本书的内容·····························9
1.7 Docker 资源··························· 10
第2 章 安装Docker ······················· 11
2.1 安装Docker 的先决条件··········· 12
2.2 在Ubuntu 中安装Docker ·········· 13
2.2.1 检查前提条件················· 14
2.2.2 安装Docker ···················· 16
2.2.3 Docker 与UFW ··············· 17
2.3 在Red Hat 和Red Hat 系发行版中安装Docker ···························17
2.3.1 检查前提条件················· 18
2.3.2 安装Docker···················· 19
2.3.3 在Red Hat 系发行版中启动Docker 守护进程·············· 20
2.4 在OS X 中安装Boot2Docker ····· 21
2.4.1 在OS X 中安装Boot2Docker ··················· 21
2.4.2 在OS X 中启动Boot2Docker ··················· 22
2.4.3 测试Boot2Docker ············ 23
2.5 在Windows 中安装Boot2Docker 23
2.5.1 在Windows 中安装Boot2Docker ··················· 23
2.5.2 在Windows 中启动Boot2Docker ··················· 24
2.5.3 测试Boot2Docker ············ 25
2.6 使用本书的Boot2Docker 示例···· 25
2.7 Docker 安装脚本····················· 26
2.8 二进制安装··························· 27
2.9 Docker 守护进程····················· 28
2.9.1 配置Docker 守护进程······· 28
2.9.2 检查Docker 守护进程是否正在运行······················· 30
2.10 升级Docker ························· 31
2.11 Docker 图形用户界面············· 31
2.12 小结··································· 32
第3 章 Docker 入门······················ 33
3.1 确保Docker 已经就绪·············· 33
3.2 运行我们的第一个容器············ 34
3.3 使用第一个容器····················· 36
3.4 容器命名······························ 38
3.5 重新启动已经停止的容器·········· 39
3.6 附着到容器上························ 39
3.7 创建守护式容器····················· 40
3.8 容器内部都在干些什么············ 41
3.9 查看容器内的进程·················· 42
3.10 在容器内部运行进程·············· 43
3.11 停止守护式容器···················· 44
3.12 自动重启容器······················· 44
3.13 深入容器····························· 45
3.14 删除容器····························· 46
3.15 小结··································· 47
第4 章 使用Docker 镜像和仓库······· 49
4.1 什么是Docker 镜像················· 49
4.2 列出镜像······························ 51
4.3 拉取镜像······························ 54
4.4 查找镜像······························ 56
4.5 构建镜像······························ 57
4.5.1 创建Docker Hub 账号······· 58
4.5.2 用Docker 的commit 命令创建镜像······················· 59
4.5.3 用Dockerfile构建镜像······················· 61
4.5.4 基于Dockerfile构建新镜像····················· 64
4.5.5 指令失败时会怎样············ 66
4.5.6 Dockerfile 和构建缓存·· 67
4.5.7 基于构建缓存的Dockerfile模板····························· 67
4.5.8 查看新镜像···················· 68
4.5.9 从新镜像启动容器··········· 69
4.5.10 Dockerfile 指令········· 72
4.6 将镜像推送到Docker Hub········· 83
4.7 删除镜像······························ 88
4.8 运行自己的Docker Registry······· 90
4.8.1 从容器运行Registry ········· 90
4.8.2 测试新Registry ··············· 91
4.9 其他可选Registry 服务············· 92
4.10 小结··································· 92
第5 章 在测试中使用Docker··········· 93
5.1 使用Docker 测试静态网站········ 93
5.1.1 Sample 网站的初始Dockerfile ················· 94
5.1.2 构建Sample 网站和Nginx镜像····························· 96
5.1.3 从Sample 网站和Nginx 镜像构建容器······················· 97
5.1.4 修改网站······················ 100
5.2 使用Docker 构建并测试Web应用程序·············································· 101
5.2.1 构建Sinatra 应用程序······ 101
5.2.2 创建Sinatra 容器············ 102
5.2.3 构建Redis 镜像和容器····· 104
5.2.4 连接到Redis 容器··········· 106
5.2.5 连接Redis····················· 108
5.2.6 让Docker 容器互连········· 110
5.2.7 使用容器连接来通信······· 114
5.3 Docker 用于持续集成·············· 116
5.3.1 构建Jenkins 和Docker服务器························· 117
5.3.2 创建新的Jenkins 作业······121
5.3.3 运行Jenkins 作业············124
5.3.4 与Jenkins 作业有关的下一步·························126
5.3.5 Jenkins 设置小结·············126
5.4 多配置的Jenkins····················126
5.4.1 创建多配置作业·············126
5.4.2 测试多配置作业·············130
5.4.3 Jenkins 多配置作业小结····132
5.5 其他选择·····························132
5.5.1 Drone ···························132
5.5.2 Shippable ······················132
5.6 小结···································132
第6 章 使用Docker 构建服务·········133
6.1 构建第一个应用····················133
6.1.1 Jekyll 基础镜像···············134
6.1.2 构建Jekyll 基础镜像········135
6.1.3 Apache 镜像···················135
6.1.4 构建Jekylll Apache 镜像···136
6.1.5 启动Jekylll 网站·············137
6.1.6 更新Jekyll 网站··············140
6.1.7 备份Jekyll 卷·················141
6.1.8 扩展Jekyll 示例网站········142
6.2 使用Docker 构建一个Java应用服务·····························143
6.2.1 WAR 文件的获取器·········143
6.2.2 获取WAR 文件··············144
6.2.3 Tomecat7 应用服务器·······145
6.2.4 运行WAR 文件··············146
6.2.5 基于Tomcat 应用服务器的构建服务······················147
6.3 多容器的应用栈····················150
6.3.1 Node.js 镜像··················150
6.3.2 Redis 基础镜像··············· 153
6.3.3 Redis 主镜像·················· 154
6.3.4 Redis 从镜像·················· 155
6.3.5 创建Redis 后端集群········ 156
6.3.6 创建Node 容器·············· 160
6.3.7 捕获应用日志················ 161
6.3.8 Node 程序栈的小结········· 164
6.4 不使用SSH 管理Docker 容器··· 164
6.5 小结··································· 166
第7 章 使用Fig 编配Docker·········· 167
7.1 Fig ····································· 168
7.1.1 安装Fig ······················· 168
7.1.2 获取示例应用················ 169
7.1.3 fig.yml 文件··············· 172
7.1.4 运行Fig ······················· 173
7.1.5 使用Fig ······················· 175
7.1.6 Fig 小结······················· 178
7.2 Consul、服务发现和Docker ····· 178
7.2.1 构建Consul 镜像············ 179
7.2.2 在本地测试Consul 容器··· 182
7.2.3 使用Docker 运行Consul集群···························· 184
7.2.4 启动具有自启动功能的Consul 节点··················· 186
7.2.5 启动其余节点················ 188
7.2.6 配合Consul,在Docker里运行一个分布式服务···· 193
7.3 其他编配工具和组件·············· 201
7.3.1 Fleet 和etcd··················· 202
7.3.2 Kubernetes····················· 202
7.3.3 Apache Mesos················· 202
7.3.4 Helios ·························· 202
7.3.5 Centurion ······················ 203
7.3.6 Libswarm ······················203
7.4 小结···································203
第8 章 使用Docker API ················205
8.1 Docker API ···························205
8.2 初识Remote API····················206
8.3 测试Docker Remote API ··········207
8.3.1 通过API 来管理Docker镜像····························208
8.3.2 通过API 管理Docker容器····························211
8.4 改进TProv 应用····················213
8.5 对Docker Remote API 进行认证··217
8.5.1 建立证书授权中心···········218
8.5.2 创建服务器的证书签名请求和密钥·························220
8.5.3 配置Docker 守护进程······222
8.5.4 创建客户端证书和秘钥·····223
8.5.5 配置Docker 客户端开启认证功能······················224
8.6 小结···································226
第9 章 获得帮助和对Docker进行改进··························· 227
9.1 获得帮助····························· 227
9.1.1 Docker 用户和开发邮件列表······················ 228
9.1.2 IRC 上的Docker ············· 228
9.1.3 GitHub 上的Docker ········· 228
9.2 报告Docker 的问题················ 229
9.3 搭建构建环境······················· 229
9.3.1 安装Docker··················· 229
9.3.2 安装源代码和构建工具···· 229
9.3.3 检出源代码··················· 230
9.3.4 贡献文档······················ 230
9.3.5 构建开发环境················ 231
9.3.6 运行测试······················ 232
9.3.7 在开发环境中使用Docker··· 233
9.3.8 发起pull request ············· 234
9.3.9 批准合并和维护者·········· 236
9.4 小结··································· 236

作者简介

全球第一本Docker技术图书中文版,Docker中文社区鼎力支持!
Docker核心团队成员权威著作,在技术圈中很有影响力。
既是第一本Docker书,也非常适合作为学习Docker的第一本入门书。
Docker是一个开源的应用容器引擎,让开发者可以将他们的应用和依赖包打包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器完全使用沙箱机制,相互之间不会有任何接口。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,它不依赖于任何语言、框架或包装系统。
Docker 是一个开源的应用容器引擎,开发者可以利用Docker 打包自己的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux 机器上,也可以实现虚拟化。
本书由Docker 公司前服务与支持副总裁James Turnbull 编写,是权威的Docker 开发指南。本书会指导读者完成Docker 的安装、部署、管理和扩展,带领读者经历从测试到生产的整个开发生命周期,让读者了解Docker 适用于什么场景。书中先介绍Docker 及其组件的基础知识,然后用Docker 构建容器和服务来完成各种任务:利用Docker 为新项目建立测试环境,演示如何使用持续集成的工作流集成Docker,如何构建应用程序服务和平台,如何使用Docker 的API,如何扩展Docker。
本书适合对Docker 或容器开发感兴趣的系统管理员、运维人员和开发人员阅读。
图书评价:
DevOps未死,ContainerOps已到
发现Docker项目还是2013年中,我正在为构架一个Micro Service的游戏云而测试各种PaaS平台和产品。研究CloudFoundry的过程中,被Warden子项目吸引,转而在GitHub中寻找类似的、更容易使用和部署的容器虚拟化解决方案,最终一个Linux Container的框架Docker成为我的首选。2013年底在深圳举行的ECUG Con(实效云时效用户组大会)是我第一次在大型的技术会议上宣讲Docker开源技术,此时它已经被Golang社区评为2013年的十大杀手级应用,也是这次会议我开始了Docker技术布道之旅。从LXC的框架到Container引擎,再到如今的SaaS平台,Docker在开源社区的强大推动下快速向前演进,ContainerOps平台或是Docker的下一个里程碑。
对Docker研究得越多,就越容易被它在网络、安全方面的各种问题所困扰,忘却了Docker使用Union FileSystem技术带来的巨大技术变革的机会。当超越容器虚拟化引擎的标签去看Docker时,发现它是实现应用版本管理的最佳技术选择。比起从源代码的某个分支或标签起构建应用的版本,Union FileSystem更适于实现从开发到运维的版本管理。随着OverlayFS被Linux内核3.18合并到主干,Docker也会在最新的版本中支持它(也许在你读这本书的时候就已经支持了)。不管是AUFS还是OverlayFS,将摆脱被认为是嵌入式设备的文件格式,成为应用版本管理的技术基石。
在一次技术布道之后,有听众和我交流如何使用Gnome Desktop的Docker容器为团队提供标准的Android开发环境。正值Docker在刚刚发布的1.2版本中加入了Device特性,我建议他可以使用这个特性为Desktop加入真机的调试功能。此时我才意识到开发环境甚至是桌面环境是可以通过Docker容器来实现统一的。当微软公司和Docker深度合作的新闻震惊所有人时,才发现微软早在多年前就布局容器虚拟化的技术。Windows成为最后一个(FreeBSD有容器引擎Jails,Solaris有容器引擎Zones)能运行容器的主流操作系统。Windows操作系统可以通过容器化技术运行多个Windows的容器,Docker引擎也终于有了打通所有平台的机会。不管是Linux还是Windows,开发环境最终都可以被容器管理起来,开发配置管理将会变得非常简单。
当软件的开发环境、版本管理、交付和运行都以Docker为工具Container为基础进行流转时,就构成了以Container为核心的开发和运维流程,软件的构架也因此发生改变(Micro Service的构架方式可能会因此流行)。但持续集成、持续部署和自动化运维等生产理念没有改变,只是增加了Container的解决方案,未来必定会有基于Docker的平台来管理整个开发和生产的流程。
DevOps未死,ContainerOps已到。
在此感谢三位译者李兆海、刘斌和巨震的辛苦工作,把第一本Docker技术书籍带入中国。这不仅是一本Docker技术的入门书籍,也介绍了很多Docker的最佳实践,是学习Docker的绝佳选择。尽管没有参与此书的翻译,甚为遗憾,但我会继续努力在国内推广Docker开源技术。
马全一
Docker 中文社区和 docker.cn 项目创始人,Docker 开源技术布道师,资深构架师

这本书用了大量简短可操作的程序实例介绍Docker的工作原理,几乎页页都是满满的代码干货,程序员读者可跟着这些例子自己动手玩转Docker,这真是一部专为程序员写的好书!
——毛文波,道里云CEO,曾创建EMC中国实验室并担任首席科学家,曾参与创建HP中国实验室
这本书由曾任职于Docker公司的资深工程师编写,由国内社区以最快的速度完成翻译,是学习Docker的最佳入门书籍。如果你是一位希望让自己的代码运行在云端的程序员,现在就开始学习Docker吧!
——喻勇,Cloud Foundry社区创始人
正是因为Docker将对传统IT技术带来“革命性”的冲击,所以我们看到围绕Docker的创业项目如火如荼。IT从业人员应该及早拥抱Docker,拥抱变化。阅读本书就是最佳入门途径。
——陈轶飞,原百度PaaS平台负责人,国内最早大规模应用Docker的实践者
Docker今天已经算是明星技术了,各种技术大会都会有人谈论它,越来越多的人像我一样对这门技术着迷。Docker的发展异常迅猛,整个社区生态蓬勃向上一片繁荣。希望阅读本书的读者也尽快加入充满乐趣的Docker大家庭中来。
——程显峰,MongoDB中文社区创始人,蓝海讯通COO
本书系统而又深入浅出地介绍了与Docker部署和应用相关的各个方面,体现了Docker的最新进展,并附有大量详尽的实例。无论系统架构师、IT决策者,还是云端开发人员、系统管理员和运维人员,都能在本书中找到所需的关于Docker的内容。本书非常适合作为进入Docker领域的第一本书。
——商之狄,微软开放技术(中国)首席项目经理
我很高兴能看到第一本引进国内的Docker技术书籍——这本《The Docker Book》中文版。这本书对于迫切想了解Docker技术以及相关工具使用的技术爱好者来说,是一本值得阅读的入门书籍。
——肖德时,InfoQ《深入浅出Docker》专栏作者
阅读本书,就像参加一个Docker专家的面授课程,书中包含了很多非常实用的小型案例,让你能够循序渐进地照着学习,加深理解。James Turnbull是个写书的高手,由浅入深地慢慢引领你理解Docker的奥秘。无论你是哪个行业的程序员,这本Docker的书绝对会让你受益匪浅。
——蔡煜,爱立信软件开发高级专家
对Docker本身,已经不用我再多说,只希望大家都看看这本书,并能积极尝试Docker。纵观IT行业历史,大的技术变革从来不是诞生于大厂商口中的金蛋,而是一小搓爱好者的小玩意儿,而Docker正是这个路子。
——赵鹏,VisualOps 创始人
Go语言是近年来IT技术发展历程中最伟大的事情,而Docker的出现则是云计算发展的重要里程碑。作为Go语言的杀手级应用,Docker推动了Go语言社区的发展。《The Docker Book》是一本Docker团队成员撰写的书,是一份难得的学习Docker技术的权威教材。我很高兴见到中文翻译能够如此迅速地跟进,这是一件了不起的事情。
——许式伟,七牛云存储CEO,《Go语言编程》作者
我非常喜欢《The Docker Book》这本书,它弥补了开源项目通常缺失的文档部分。书中涉及从安装入门到业务场景下的各种应用及开发。本书作者的权威性以及译者的专业态度也保证了这本书的严谨性。这本书非常适合广大的Docker爱好者阅读。
——杜玉杰,OpenStack基金会董事


 第一本Docker书下载 精选章节试读 更多精彩书评



发布书评

 
 


精彩书评 (总计2条)

  •     把The Docker Book 翻译成 第一本Docker书 可能是中文版出版方想突出这本书在Docker世界的地位。通读后觉得书如其名,此书可以作为Docker学习的第一本书。篇幅不大,200多页、字体不小、且代码示例较多,让人读起来很轻松,比动辄上千页密密麻麻小子的xx权威指南,xx实战要来的轻松多。跟着书中的例子做下来对Docker就有了直观的印象,当然想用到实际开发中读这“第一本书“是不够的,还需要进阶的材料和实践。看得出来作者在选择例子时下了一些功夫,把他丰富的项目开发经验注入了进去,从例子中可管窥大型软件的开发、部署的样貌。最后不得不提一句,由于版本升级,书中一些构建的例子已经无法正常运行,但作者托管代码的github一直保持着更新,如果按照书上例子操作无法运行,可去github上下载最新的代码。向作者的严谨态度致敬。总之一句话,这本书适合入门的小白。如果想深入了解Docker相关技术或者进阶,这本书并不适合你。
  •     作為初學者的首選工具書,這本書在內容編排 語言表達 等方面做的都非常好,讓讀者閱讀起來非常輕鬆,毫無枯燥感。作為一本docker學習的工具書,告诉读者docker是什么,它能为我们解决什么等,也得到了專家的認可,不愧第一,是一本值得一讀的好書。-------------#######################################

精彩短评 (总计50条)

  •     没事别瞎比折腾了,还是读点书,涨点知识吧~
  •     内容不错,代码多了些,有点水,整体感要自己去理解
  •     docker入门
  •     docker使用说明书
  •     入门很好
  •     看完该看第二本了,嗯。。。
  •     入门必备
  •     作为入门书足够了,书中只有用法,没有对原理和技术细节的深入描述。
  •     涉及的知识面好广,有许多知识点不实际使用恐怕是无法消化的
  •     第一本 恩。。。第一本 送人了
  •     docker的step by step手册,从部署到使用再到CI,比较全面的步骤说明。因为有以前虚拟化的基础,所以理解起来不费力。当然,前提是懂linux系统,网络协议,ruby/python等脚本语言。
  •     一个月前翻过,内容一般般。。。
  •     入门书籍
  •     真.刷书
  •     从整体上阅读,开始了解规划自己的知识。第一本书也是一本入门书籍,快速了了解 docker 的基本使用方法,以及 docker 能用来干什么。剩下的就是好好吸收消化官方稳定上面的资料了。
  •     第一本看这本就行了,有基础有扩展,不深究原理快随上手,还有使用场景的章节。简单翻过而已
  •     果然是第一本docker书,我觉得用来入门还可以。
  •     就那样呗, 比看文档快, 但做事情的时候还是要 RTFM. 错别字略多, 学长不给力
  •     偏用户手册类书籍
  •     实用的工具书
  •     作为入门可以
  •     新手还是看官方文档吧,去年的书,一些内容已经过时了
  •     - 之前看过一本书《集装箱改变世界》,集成化的集装箱的出现促使了美国海港运输的发展。同样的思路也在改变着世界,只是这次是另外一个世界。 - 这本书其实和官方文档差别不大,甚至稍微有点过时,但是可操作性还是挺好的,我就是以这本为纲参照官方文档。
  •     作为docker操作入门手册非常不错,知识点都讲到了(按照linux环境讲解),只有操作没有原理,推荐对docker想了解的同学
  •     相对全面的hello world介绍,花三个小时就能读完
  •     深入浅出,对容器的应用场景讲的比较清楚。不过对原理解释的比较少,不过仍然是值得读的书。
  •     推荐未接触过docker的初学者阅读的“docker上手指南”
  •     非常适合入门 有一定经验的 看了收获并不会很大
  •     比较简短,可以有一个大概的了解,但是时间还是跟着docker官方文档实践比较好
  •     内容很浅,适合初学者。每一章都手把手教你怎么运用docker,要看这本书建议先看清楚docker对安装环境的要求,确定能够有个docker环境进行学习
  •     docker入门不错
  •     还行吧,讲的不深
  •     书挺简单,一天翻完,当然没全部看懂。不过感觉入门挺好的,代码和图很详实。
  •     简洁,没有废话
  •     看的第一本docker类的书,主要是初步了解。内容还不错,大致清楚基本概念。
  •     读后可以了解一部分原理,可以参考示例使用docker。 但是整体来说都没说透。原理浅尝即止,示例将将够用。做原理理解不行,做手边字典也不行。唉!入门吧。书名翻译的很好。
  •     挺好啊,很实用的书。用过虚拟机就能看得懂。没用过虚拟机也可能看得懂
  •     只能说算得上是一本入门实践参考书。
  •     总体来说,没有传说中那么好。作为入门级的使用手册还行,想了解还是应该看源码。
  •     应该是第4次翻这本书了。。。
  •     简单了解最基本的docker用法。
  •     有点老,不过带领读者入个门还是绰绰有余的,至于后面就得看官网的文档了。
  •     确实如书名,第一本看这本就行了,有基础有扩展,不深究原理快随上手,还有使用场景的章节。
  •     入坑!
  •     还不错的入门书,确实适合做第一本,代码粘的有些略多,所以看着其实蛮快,对Docker有基本认识的人应该一两天就看完了,第五章和第六章很啰嗦,第七章开始就显示出本书的过时了。
  •     稍过时 2016年11月
  •     写了读书笔记 http://mp.weixin.qq.com/s/6sYvwIv4VupSka5yyKSdfQ
  •     基础入门例子,还行
  •     基础应用形式的介绍 对原理讲的不多
  •     迅速翻过,像一本step by step的手册。——一个5年前做过容器的人
 

外国儿童文学,篆刻,百科,生物科学,科普,初中通用,育儿亲子,美容护肤PDF图书下载,。 零度图书网 

零度图书网 @ 2024