如果想自己动手写Docker,你可能需要看这本书(文末附录五篇精彩书摘)

简介: 《自己动手写Docker》在详细分析Docker所依赖的技术栈的基础上,一步一步地通过代码实例,让读者可以自己循序渐进地用Go语言构建出一个容器的引擎。不同于其他Docker原理介绍或代码剖析的书籍,《自己动手写Docker》旨在提供给读者一条动手路线,一步一步地实现Docker的隔离性,构建Docker的镜像、容器的生命周期及Docker的网络等。


图书链接

为什么要写这本书

Docker 技术可谓是近年最火热的技术之一,铺天盖地的技术论坛和各种讲座,大家都在分享关于如何容器化及如何使用Docker优化自己运维和开发流程的经验。随着Docker技术的逐渐普及,使用Docker已经不再是一个难题。现在更加重要的是生产环境容器化的最佳实践,另外就是容器的编排框架之争。但是,对于技术人员来说,除去Docker 外表的繁华外,什么是容器,容器到底是怎么创建的,容器底层的技术探秘也是非常重要的。
我在2014年开始接触 Docker,经历了从最初的新奇—感叹竟然还有Docker 这样的好工具,到逐渐熟悉Docker的各种功能,尝试在生产环境中使用Docker技术的过程。但是,每每被人问到:“Docker技术到底是怎么实现的呢?”我只能粗粗浅浅地说:“Docker是使用Linux Kernel的Namespace 和 Cgroups实现的一种容器技术。”那么,什么是Namespace,什么是Cgroups,Docker是怎么使用它们的,容器到底是怎么一步步被创建出来的?问到这些,我就会支支吾吾地不知所以。由此可见,了解容器技术的底层技术,然后明白它们是如何工作的,尤为重要,这些才是整个容器技术的基石,掌握了这些基石才能更加容易地向上攀登。
单单讲解底层的技术实现细节和源码解读是很枯燥的一件事,一般来说很难有耐心去一点点细读然后揣摩其中的奥妙,这样囫囵吞枣地过一遍技术细节,作用不大。因此,便萌生了写一本《自己动手写Docker》这样的书的想法。本书不去刻意讲解容器技术的细节,用到什么讲解什么,点到为止,更加细节的内容留给读者自己探索。通过阅读本书,可以一步步地去了解容器技术的实现细节,更可以跟着作者一步步地用自己的代码去实现它。本书最大的乐趣莫过于用自己最新了解到的知识去动手实现自己的容器。由此可以进一步打开你进入容器技术社区的大门。 

本书的内容

本书的目的是去引导读者通过学习容器技术的实现细节,一步步去构建一个简单的容器。 从这个过程中,了解整个容器技术领域和实现细节。本书注重原理的讲解与实践,每一部分都 会有详细的代码解析,力争用最少最精简的代码,帮助读者构建自己的容器。 

本书的内容主要分为“容器与开发语言” “基础技术” “构造容器” “构造镜像” “构造 容器进阶” “容器网络” “高级实践” 这7章。 

  • 容器与开发语言:主要介绍 Docker 的基本功能和特点,并且对后面即将使用的 Go 语言 做一个简单的介绍。
  • 基础技术:主要介绍实现容器的底层技术,如Namespace、Cgroups、Union File System。 每一小节都会有文字性介绍,并且附有一个简短的小例子程序,介绍在容器上是如何使 用这项技术的,方便读者清晰地理解各个技术点在容器上的作用。
  • 构造容器:使用前面两章介绍的基础技术,构造一个最简单的容器环境,会将整体实现 细节及代码解析一点点展现,直接使用前面介绍的基础技术,从而更加有实战感。
  • 构造镜像: 使用 2.3 节介绍的分层文件系统技术,构建一个简单的容器镜像,体现容器 镜像的分层思想。
  • 构造容器进阶:更加贴近真实的容器实现,在原来的基础上,增加更丰富的功能。通过 这一章的学习,读者可以更好地了解各种技术是如何整合在一起,去实现容器整体功能 的。
  • 容器网络: 除了实现一个容器环境之外,这一章还会讲解如何使自己的容器和宿主机通 信,以及如何让不同的容器之间进行通信,更加贴近真实环境。
  • 高级实践: 使用自己编写的容器,运行一些通用程序,验证容器的可用性。此外,本章 还介绍了目前Docker 使用的容器运行引擎,以及目前容器运行态引擎的概况。

精彩书摘

《自己动手写Docker》书摘之一: Linux Namespace
《自己动手写Docker》书摘之二: Linux Cgroups  
《自己动手写Docker》书摘之三: Linux UnionFS  
《自己动手写Docker》书摘之四: 构造简单容器  
《自己动手写Docker》书摘之五: 增加容器资源限制

目录
相关文章
|
Linux Shell Go
《自己动手写Docker》书摘之一: Linux Namespace
Linux Namespace 介绍 我们经常听到说Docker 是一个使用了Linux Namespace 和 Cgroups 的虚拟化工具,但是什么是Linux Namespace 它在Docker内是怎么被使用的,说到这里很多人就会迷茫,下面我们就先介绍一下Linux Namespace
12834 0
|
Linux Shell Docker
《自己动手写Docker》书摘之四: 构造简单容器
构造简单容器 本章我们即将开始真正踏上构造自己的容器道路上。我们会基于当前的操作系统创建一个与宿主机隔离的容器环境,并且配置上基本的文件系统与网络。最后会在容器内运行一些应用来使用我们的容器,是不是很激动,下面我们开始吧。
6775 0
|
Linux 开发工具 git
《自己动手写Docker》书摘之五: 增加容器资源限制
增加容器资源限制 上一节中,我们已经可以通过命令行mydocker run -ti的方式创建并启动容器,这一节我们将通过Cgroup对容器的资源进行控制。 这一节中我们将实现通过mydocker run -ti -m 100m -cpuset 1 -cpushare 512 /bin/sh的方式控制容器容器的内存和CPU配置。
7625 0
|
存储 Ubuntu Shell
《自己动手写Docker》书摘之三: Linux UnionFS
UnionFS unionfs是一种为Linux,FreeBSD和NetBSD操作系统设计的把其他文件系统联合到一个联合挂载点的文件系统服务。它使用branch把不同文件系统的文件和目录“透明地”覆盖,形成一个单一一致的文件系统。
9625 0
|
监控 Linux Shell
《自己动手写Docker》书摘之二: Linux Cgroups
Linux Cgroups介绍 上面是构建Linux容器的namespace技术,它帮进程隔离出自己单独的空间,但Docker又是怎么限制每个空间的大小,保证他们不会互相争抢呢?那么就要用到Linux的Cgroups技术。
6383 0
|
3天前
|
消息中间件 NoSQL Kafka
Flink-10 Flink Java 3分钟上手 Docker容器化部署 JobManager TaskManager Kafka Redis Dockerfile docker-compose
Flink-10 Flink Java 3分钟上手 Docker容器化部署 JobManager TaskManager Kafka Redis Dockerfile docker-compose
15 4
|
4天前
|
存储 监控 Shell
docker的底层原理二:容器运行时环境
本文深入探讨了Docker容器运行时环境的关键技术,包括命名空间、控制组、联合文件系统、容器运行时以及分离的进程树,这些技术共同确保了容器的隔离性、资源控制和可移植性。
20 5
|
1天前
|
存储 持续交付 开发者
掌握Docker容器化:提升开发效率与应用部署
【10月更文挑战第4天】在现代软件开发中,Docker容器化技术因其轻量级、可移植和快速部署的特点,成为提升开发效率和简化部署流程的关键工具。本文介绍了Docker的基本概念、核心组件及其优势,并探讨了如何在开发环境中搭建、微服务架构及CI/CD流程中有效利用Docker,助力软件开发更加高效便捷。
|
3天前
|
安全 Docker 容器
Docker中运行容器时Operation not permitted报错问题解决
【10月更文挑战第2天】Docker中运行容器时Operation not permitted报错问题解决
16 3
|
2天前
|
监控 Kubernetes 测试技术
掌握Docker网络模式:构建高效容器通信
【10月更文挑战第3天】本文深入探讨了Docker的网络模式,包括它们的工作原理、使用场景以及如何配置和优化容器间的通信。希望能够帮助开发者在项目中有效地应用Docker网络模式,构建高效的容器化应用。