自己动手写Docker

自己动手写Docker pdf epub mobi txt 电子书 下载 2026

出版者:电子工业出版社
作者:陈显鹭
出品人:博文视点
页数:212
译者:
出版时间:2017-7-1
价格:65.00元
装帧:平装
isbn号码:9787121317866
丛书系列:
图书标签:
  • docker
  • 虚拟化
  • Docker
  • 计算机
  • go
  • 编程
  • linux
  • 计算机科学
  • Docker
  • 编程
  • 容器
  • 云计算
  • 运维
  • 开发
  • 实战
  • 学习
  • 自动化
  • 基础
想要找书就要到 小美书屋
立刻按 ctrl+D收藏本页
你会得到大惊喜!!

具体描述

本书在详细分析Docker所依赖的技术栈的基础上,一步一步地通过代码实例,让读者可以自己循序渐进地用Go语言构建出一个容器的引擎。不同于其他Docker原理介绍或代码剖析的书籍,本书旨在提供给读者一条动手路线,一步一步地实现Docker的隔离性,构建Docker的镜像、容器的生命周期及Docker的网络等。本书涉及的代码都托管在GitHub上,读者可以对照书中的步骤从代码层面学习构建流程,从而精通整个容器技术栈。本书也对目前业界容器技术的方向和实现做了简单介绍,以加深读者对容器生态的认识和理解。

本书适合对容器技术已经使用过或有一些了解,希望更深层次掌握容器技术原理和最佳实践的读者。

《代码的炼金术:容器化部署与微服务实战》 在瞬息万变的数字世界中,软件的生命周期如同炼金术士对物质的不断提炼与转化,追求着效率、稳定与可扩展的终极目标。本书《代码的炼金术:容器化部署与微服务实战》正是这场现代软件炼金术的指南,它将带领读者穿越复杂的技术迷雾,掌握将代码转化为可信赖、可快速迭代的生产力核心的秘诀。 本书并非聚焦于某个特定技术栈的入门教程,而是深入探讨了现代软件开发与部署的底层逻辑与实践智慧。我们不直接教授如何“写”Docker,而是剖析“为什么”以及“如何”通过容器化这一革命性的技术,为你的应用带来前所未有的灵活性与效率。 核心理念:解耦、标准化与自动化 容器化技术的核心在于“解耦”——将应用及其依赖项彻底分离,构建出独立、可移植的运行环境。本书将深入讲解这一理念的实践意义,从基础设施的抽象化到环境一致性的保证,让你深刻理解为何容器能够成为微服务架构的最佳拍档。我们将通过一系列精心设计的案例,展示如何将传统的单体应用逐步拆解,构建出高内聚、低耦合的微服务体系,并利用容器化技术实现这些微服务的快速构建、独立部署与弹性伸缩。 技术深度:不仅仅是工具 我们不会止步于对Docker命令行的罗列,而是深入挖掘其背后的原理。你将了解到容器镜像的构成、分层存储的奥秘、网络隔离的机制以及存储卷的管理策略。更重要的是,本书将引导你思考如何在实际项目中,根据不同的业务场景,选择并优化容器的构建方式,撰写出高效、安全的Dockerfile,并掌握镜像仓库的最佳实践,确保代码的每一次“提炼”都能生成高质量、易于分发的“黄金”。 微服务架构:现代软件设计的蓝图 微服务不再仅仅是一个热门词汇,而是重塑软件工程实践的关键范式。本书将系统性地阐述微服务架构的设计原则、核心挑战以及应对策略。我们将探讨如何进行服务划分、如何设计合理的API接口、如何处理服务间通信的复杂性(如同步与异步模式)、如何实现服务的容错与降级,以及如何在分布式环境中管理配置与服务发现。通过本书的学习,你将能够清晰地勾勒出属于自己业务的微服务蓝图。 部署与运维:从开发到生产的无缝衔接 将应用成功部署到生产环境,是软件炼金术的最终考验。本书将聚焦于如何利用容器化技术,实现开发、测试、预发、生产环境的无缝对接。你将学习到如何构建自动化CI/CD流水线,将代码的每一次提交都能转化为可部署的容器镜像,并自动完成测试与部署流程。此外,我们还会探讨容器编排工具(如Kubernetes)的哲学思想与核心组件,为你未来管理大规模容器集群奠定坚实的基础,让你能够应对生产环境中的各种挑战,如滚动更新、故障恢复与性能优化。 安全与性能:炼金术的纯净度与效能 在追求效率的同时,我们绝不能忽视安全与性能。本书将深入探讨容器安全性的各个维度,包括镜像安全扫描、运行时安全加固、网络策略的细粒度控制以及敏感信息的管理。同时,我们也将关注如何通过合理的容器设计、资源限制以及性能调优,最大化容器的运行效率,确保你的应用在有限的资源下也能发挥出最佳的性能。 谁适合阅读本书? 资深开发者: 希望突破传统开发模式,拥抱现代化开发与部署实践的开发者。 架构师: 寻求设计灵活、可扩展、高可用微服务架构的架构师。 运维工程师: 渴望掌握自动化部署、容器化管理与云原生技术,提升运维效率的工程师。 技术负责人/项目经理: 希望理解并推动团队采用容器化技术,加速产品迭代与交付的管理者。 对现代软件工程感兴趣的学习者: 愿意深入理解底层技术原理,构建对软件生命周期全流程掌控能力的任何技术从业者。 《代码的炼金术:容器化部署与微服务实战》将带你踏上一段充满智慧与实践的旅程,让你不仅仅掌握一种工具,更能领悟一种思维方式,用现代化的手段,将你的代码打造成稳定、高效、能够适应一切变化的数字资产。准备好,开启你的代码炼金之旅吧!

作者简介

陈显鹭 阿里云高级研发工程师,对Docker有深入研究,是Docker多个项目的Contributor,专注于容器技术的编排与基础环境研究。爱好折腾源代码,热爱开源文化并积极参与社区开源项目的研发。

王炳燊 阿里云研发工程师,具有丰富的Linux开发经验,对Docker有深入研究,多次提交Docker Patch。目前从事阿里云容器服务网络方案的设计与实现,专注于容器技术的基础环境研究。

秦妤嘉阿里云高级研发工程师、DevOps工程师,有丰富的容器化持续集成和持续交付开发实战经验,进行过Jenkins源码分析改造和Jenkins插件开发。目前从事阿里云容器服务持续集成和持续交付方案的设计和实现。

目录信息

第1章 容器与开发语言………………………………………………………………………1
1.1 Docker ………………………………………………………………………………1
1.1.1 简介 …………………………………………………………………………1
1.1.2 容器和虚拟机比较 …………………………………………………………2
1.1.3 容器加速开发效率 …………………………………………………………3
1.1.4 利用容器合作开发 …………………………………………………………4
1.1.5 利用容器快速扩容 …………………………………………………………4
1.1.6 安装使用Docker ……………………………………………………………4
1.2 Go ……………………………………………………………………………………5
1.2.1 描述 …………………………………………………………………………5
1.2.2 安装Go ………………………………………………………………………6
1.2.3 配置GOPATH ………………………………………………………………6
1.3 小结 …………………………………………………………………………………7
第2章 基础技术………………………………………………………………………………8
2.1 Linux Namespace 介绍 ………………………………………………………………8
2.1.1 概念 …………………………………………………………………………8
2.1.2 UTS Namespace ………………………………………………………………10
2.1.3 IPC Namespace ………………………………………………………………11
2.1.4 PID Namespace ………………………………………………………………13
2.1.5 Mount Namespace ……………………………………………………………14
2.1.6 User Namespace ………………………………………………………………16
XII 自己动手写 Docker
2.1.7 Network Namespace ………………………………………………………… 18
2.2 Linux Cgroups 介绍 ………………………………………………………………… 20
2.2.1 什么是Linux Cgroups ……………………………………………………… 20
2.2.2 Docker 是如何使用Cgroups 的 …………………………………………… 24
2.2.3 用Go 语言实现通过cgroup 限制容器的资源 …………………………… 25
2.3 Union File System …………………………………………………………………… 26
2.3.1 什么是Union File System …………………………………………………… 26
2.3.2 AUFS ………………………………………………………………………… 27
2.3.3 Docker 是如何使用AUFS 的 ……………………………………………… 27
2.3.4 自己动手写AUFS…………………………………………………………… 34
2.4 小结 ………………………………………………………………………………… 37
第3 章 构造容器……………………………………………………………………………… 38
3.1 构造实现run 命令版本的容器 …………………………………………………… 38
3.1.1 Linux proc 文件系统介绍 …………………………………………………… 38
3.1.2 实现 run 命令 ……………………………………………………………… 39
3.2 增加容器资源限制 ………………………………………………………………… 45
3.2.1 定义Cgroups 的数据结构 ………………………………………………… 45
3.2.2 在启动容器时增加资源限制的配置 ……………………………………… 51
3.3 增加管道及环境变量识别 ………………………………………………………… 53
3.4 小结 ………………………………………………………………………………… 58
第4 章 构造镜像……………………………………………………………………………… 59
4.1 使用busybox 创建容器 …………………………………………………………… 59
4.1.1 busybox ……………………………………………………………………… 59
4.1.2 pivot_root …………………………………………………………………… 60
4.2 使用AUFS 包装busybox …………………………………………………………… 63
4.3 实现volume 数据卷 ………………………………………………………………… 67
4.4 实现简单镜像打包 ………………………………………………………………… 75
4.5 小结 ………………………………………………………………………………… 77
第5 章 构建容器进阶………………………………………………………………………… 78
5.1 实现容器的后台运行 ……………………………………………………………… 78
5.2 实现查看运行中容器 ……………………………………………………………… 82
5.2.1 准备数据 …………………………………………………………………… 82
5.2.2 实现mydocker ps …………………………………………………………… 87
5.3 实现查看容器日志 ………………………………………………………………… 90
5.4 实现进入容器Namespace ………………………………………………………… 93
5.4.1 setns ………………………………………………………………………… 94
5.4.2 Cgo …………………………………………………………………………… 94
5.4.3 实现命令 …………………………………………………………………… 94
5.5 实现停止容器 ……………………………………………………………………… 100
5.6 实现删除容器 ……………………………………………………………………… 104
5.7 实现通过容器制作镜像 …………………………………………………………… 105
5.8 实现容器指定环境变量运行 ……………………………………………………… 117
5.8.1 修改runCommand …………………………………………………………… 117
5.8.2 修改Run 函数 ……………………………………………………………… 117
5.8.3 修改NewParentProcess 函数 ……………………………………………… 118
5.8.4 修改mydocker exec 命令 …………………………………………………… 119
5.9 小结 ………………………………………………………………………………… 121
第6 章 容器网络……………………………………………………………………………… 122
6.1 网络虚拟化技术介绍 ……………………………………………………………… 122
6.1.1 Linux 虚拟网络设备 ………………………………………………………… 122
6.1.2 Linux 路由表 ………………………………………………………………… 124
6.1.3 Linux iptables ………………………………………………………………… 126
6.1.4 Go 语言网络库介绍 ………………………………………………………… 127
6.2 构建容器网络模型 ………………………………………………………………… 128
6.2.1 模型 ………………………………………………………………………… 128
6.2.2 调用关系 …………………………………………………………………… 130
6.3 容器地址分配 ……………………………………………………………………… 137
6.3.1 bitmap 算法介绍 …………………………………………………………… 138
6.3.2 数据结构定义 ……………………………………………………………… 138
6.3.3 地址分配的实现 …………………………………………………………… 140
6.3.4 地址释放的实现 …………………………………………………………… 142
6.3.5 测试 ………………………………………………………………………… 142
6.4 创建Bridge 网络 …………………………………………………………………… 144
6.4.1 Bridge Driver Create 实现 …………………………………………………… 144
6.4.2 Bridge Driver 初始化Linux Bridge 流程 …………………………………… 144
6.4.3 Bridge Driver Delete 实现 …………………………………………………… 148
6.4.4 测试 ………………………………………………………………………… 148
6.5 在Bridge 网络创建容器 …………………………………………………………… 149
6.5.1 挂载容器端点的流程 ……………………………………………………… 150
6.5.2 测试 ………………………………………………………………………… 156
6.6 容器跨主机网络 …………………………………………………………………… 159
6.6.1 跨主机容器网络的IPAM …………………………………………………… 160
6.6.2 跨主机容器网络通信的常见实现方式 …………………………………… 161
6.7 小结 ………………………………………………………………………………… 163
第7 章 高级实践……………………………………………………………………………… 164
7.1 使用mydocker 创建一个可访问的nginx 容器 …………………………………… 164
7.1.1 获取nginx tar 包 …………………………………………………………… 164
7.1.2 构建自己的nginx 镜像 ……………………………………………………… 165
7.1.3 运行mynginx 容器 ………………………………………………………… 167
7.2 使用mydocker 创建一个flask + redis 的计数器 ………………………………… 169
7.2.1 创建redis 容器 ……………………………………………………………… 169
7.2.2 制作flask 镜像 ……………………………………………………………… 173
7.2.3 创建myflask 容器 …………………………………………………………… 176
7.3 runC ………………………………………………………………………………… 177
7.3.1 简介 ………………………………………………………………………… 177
7.3.2 OCI 标准包(bundle) ……………………………………………………… 177
目录XV
7.3.3 config.json …………………………………………………………………… 178
7.3.4 mounts ……………………………………………………………………… 178
7.3.5 process ……………………………………………………………………… 179
7.3.6 user …………………………………………………………………………… 179
7.3.7 hostname …………………………………………………………………… 180
7.3.8 platform ……………………………………………………………………… 180
7.3.9 钩子(Hook) ……………………………………………………………… 181
7.4 runC 创建容器流程 ………………………………………………………………… 182
7.5 Docker containerd 项目介绍 ………………………………………………………… 186
7.5.1 架构 ………………………………………………………………………… 187
7.5.2 特性和路线图 ……………………………………………………………… 188
7.5.3 containerd 和Docker 之间的关系 ………………………………………… 188
7.5.4 containerd、OCI 和runC 之间的关系 ……………………………………… 188
7.5.5 containerd 和容器编排系统的关系 ………………………………………… 189
7.6 Kubernetes CRI 容器引擎 …………………………………………………………… 189
7.6.1 什么是CRI ………………………………………………………………… 189
7.6.2 为什么需要CRI …………………………………………………………… 193
7.6.3 为什么CRI 是接口且是基于容器的而不是基于Pod 的 ………………… 193
7.6.4 如何使用CRI ……………………………………………………………… 193
7.6.5 CRI 的目标 ………………………………………………………………… 194
7.6.6 已知的问题 ………………………………………………………………… 194
7.7 小结 ………………………………………………………………………………… 195
· · · · · · (收起)

读后感

评分

这本书的出发点很有意思,这种类型的书我以前看过的一般都是写《xx内核解析》或者《深入理解xx》的标题和方式,但是这本书不一样,它是以《自动动手xx》来解析 Docker 的内核原理,我个人觉得还是很有新意的,而且可能对于读者来说对原理和内容的掌握和了解更有帮助。 从这本书...

评分

这本书的出发点很有意思,这种类型的书我以前看过的一般都是写《xx内核解析》或者《深入理解xx》的标题和方式,但是这本书不一样,它是以《自动动手xx》来解析 Docker 的内核原理,我个人觉得还是很有新意的,而且可能对于读者来说对原理和内容的掌握和了解更有帮助。 从这本书...

评分

这本书的出发点很有意思,这种类型的书我以前看过的一般都是写《xx内核解析》或者《深入理解xx》的标题和方式,但是这本书不一样,它是以《自动动手xx》来解析 Docker 的内核原理,我个人觉得还是很有新意的,而且可能对于读者来说对原理和内容的掌握和了解更有帮助。 从这本书...

评分

这本书的出发点很有意思,这种类型的书我以前看过的一般都是写《xx内核解析》或者《深入理解xx》的标题和方式,但是这本书不一样,它是以《自动动手xx》来解析 Docker 的内核原理,我个人觉得还是很有新意的,而且可能对于读者来说对原理和内容的掌握和了解更有帮助。 从这本书...

评分

这本书的出发点很有意思,这种类型的书我以前看过的一般都是写《xx内核解析》或者《深入理解xx》的标题和方式,但是这本书不一样,它是以《自动动手xx》来解析 Docker 的内核原理,我个人觉得还是很有新意的,而且可能对于读者来说对原理和内容的掌握和了解更有帮助。 从这本书...

用户评价

评分

一本关于 Docker 的书,听起来就让人跃跃欲试。我一直对容器化技术很感兴趣,但又觉得市面上很多书籍都过于理论化,或者只停留在表面,缺乏深度。我希望这本书能让我真正理解 Docker 的核心概念,比如镜像、容器、仓库、网络和存储等等,并且能够通过实际操作来巩固这些知识。我希望它不仅仅是告诉你“怎么做”,更能让你明白“为什么这么做”。例如,在讲到 Dockerfile 的时候,我希望能看到不同指令的详细解释,以及它们在构建镜像过程中的作用和影响。更重要的是,我期待这本书能引导我掌握如何有效地管理和编排复杂的容器化应用,比如通过 Docker Compose 来定义和运行多容器应用,以及如何处理容器间的通信和数据持久化。我还会关注书中是否包含了一些实际的应用场景和最佳实践,比如如何优化 Docker 镜像的大小,如何提高容器的安全性,以及如何在生产环境中部署和监控 Docker 应用。如果书中能提供一些实际项目中的案例分析,那就更好了,这样我可以更直观地学习如何在真实世界中使用 Docker 来解决问题。我希望能在这本书中找到解决实际问题的灵感和方法,并且能够自信地将 Docker 应用到我的开发和运维工作中。

评分

我最近在寻找一本能够系统性地讲解 Docker 编排工具的书籍。虽然对 Docker 本身有了一些了解,但要构建和管理复杂的分布式系统,Docker Compose 和 Kubernetes 这样的工具是必不可少的。我希望这本书能够深入浅出地介绍 Docker Swarm 和 Kubernetes 的核心概念,比如服务、任务、节点、Pod、Deployment、Service 等等,并且能够提供详细的操作指南,让我能够一步步地搭建起自己的容器编排集群。我特别关注书中是否能讲解如何使用这些工具来部署、扩展和管理容器化应用,以及如何处理应用的高可用性和容错性。例如,在讲到 Kubernetes 的时候,我希望能看到关于 Pod 生命周期、ReplicaSet、Deployment、StatefulSet、DaemonSet 等控制器的工作原理和使用场景的详细解释。同时,我也希望书中能介绍如何进行服务发现、负载均衡、配置管理和秘密管理,以及如何实现容器的日志收集和监控。如果书中能包含一些实际的部署案例,比如如何部署一个 Web 应用、数据库或者消息队列,那就更完美了。我期待通过这本书,能够掌握容器编排的精髓,并且能够自信地在生产环境中部署和管理大规模的容器化应用。

评分

这本书的名字听起来就很有吸引力,"自己动手写 Docker" 让人感觉充满挑战和乐趣。我一直对 Docker 的底层原理感到好奇,特别是它是如何实现隔离性,又是如何管理资源的。我希望这本书能够深入讲解 Docker 的核心组件,比如 Linux Namespace、Cgroups、UnionFS(如 OverlayFS)等,并且能够通过代码示例来展示这些技术的实现。我希望它能解释清楚 Docker 为什么能够做到轻量级和高性能,以及它与传统虚拟机相比的优势在哪里。例如,在讲解 Namespace 的时候,我希望能看到不同类型的 Namespace(PID、Network、Mount、UTS、IPC、User)的详细介绍,以及它们各自的作用。在讲解 Cgroups 的时候,我希望能看到如何使用 Cgroups 来限制容器的 CPU、内存、磁盘 I/O 等资源。我还会关注书中是否能讲解 Docker 的存储驱动是如何工作的,以及如何通过这些驱动来实现数据的持久化和共享。如果书中能提供一些关于如何从零开始构建一个简化版的 Docker 引擎的示例,那就更好了,这能让我对 Docker 的工作原理有一个更深刻的理解。我希望这本书能够满足我对 Docker 底层技术的求知欲,并且能够让我成为一个真正理解 Docker 的开发者。

评分

对于 Docker,我始终觉得它是一个非常强大的工具,但在实际应用中,如何才能更好地利用它来提升开发效率和运维能力,是我一直在探索的问题。这本书的名字“自己动手写 Docker”让我联想到,也许它不仅仅会讲解 Docker 的基础用法,还会涉及一些进阶的实践和技巧。我希望它能包含一些关于如何将 Docker 集成到 CI/CD 流程中的内容,比如如何利用 Docker 构建自动化测试环境,如何实现持续集成和持续部署。我还会关注书中是否能讲解如何使用 Docker 来构建微服务架构,以及如何处理微服务之间的依赖关系、通信和治理。例如,在讲到 CI/CD 的时候,我希望能看到如何结合 Jenkins、GitLab CI 等工具来自动化 Docker 镜像的构建、测试和部署。在讲到微服务的时候,我希望能看到如何利用 Docker Compose 或 Kubernetes 来管理复杂的微服务应用,以及如何实现服务注册、发现和负载均衡。如果书中能提供一些关于 Docker 安全的最佳实践,比如如何进行镜像扫描、漏洞检测、运行时安全监控等,那就更完美了。我期待通过这本书,能够将 Docker 的潜力发挥到极致,并且能够真正成为一名 Docker 专家,能够自信地解决各种复杂的开发和运维挑战。

评分

我一直在寻找一本能够帮助我系统地学习 Docker 网络和存储知识的书籍。在实际使用 Docker 的过程中,我经常会遇到一些关于容器间通信、数据持久化以及网络访问的问题,而这些问题往往与 Docker 的网络和存储机制息息相关。我希望这本书能够详细讲解 Docker 的网络模型,包括桥接网络、主机网络、覆盖网络等,并且能够提供实际的配置和故障排除指南。我希望能理解容器是如何获得 IP 地址,如何进行 DNS 解析,以及如何实现容器间的端口映射和访问控制。在存储方面,我希望这本书能够深入讲解 Docker 的数据卷(Volumes)和绑定挂载(Bind Mounts)的工作原理,以及如何使用它们来持久化容器数据,实现数据共享,并且能够在容器生命周期结束后保留数据。我还会关注书中是否能介绍 Docker 的插件化架构,以及如何通过插件来扩展 Docker 的网络和存储功能。如果书中能包含一些关于如何优化 Docker 网络和存储性能的技巧,或者如何处理分布式存储场景下的挑战,那就更好了。我期待通过这本书,能够彻底解决我在 Docker 网络和存储方面遇到的所有难题,并且能够更灵活、更高效地使用 Docker。

评分

对着书写了一遍,历时三个星期

评分

迷你版docker实现,基本的功能都提到了,算是给看docker源码做个预习吧。

评分

读一遍docker就没有什么神秘的了,ubuntu14下代码都可用,别的系统可能会有些许问题

评分

原来都是使用linux下的虚拟化技术编写的

评分

学docker一方面是学习docker对devops的作用,docker是不可变部署物的最佳形式;另一方面是docker本身的技术,包括namespace隔离、cgroup资源管理、aufs文件系统、bridge网络、封包路由。这本书能够消除对docker技术的很多迷惑。

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2026 book.quotespace.org All Rights Reserved. 小美书屋 版权所有