如果想自己动手写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 开发工具 git
《自己动手写Docker》书摘之五: 增加容器资源限制
增加容器资源限制 上一节中,我们已经可以通过命令行mydocker run -ti的方式创建并启动容器,这一节我们将通过Cgroup对容器的资源进行控制。 这一节中我们将实现通过mydocker run -ti -m 100m -cpuset 1 -cpushare 512 /bin/sh的方式控制容器容器的内存和CPU配置。
7567 0
|
Linux Shell Docker
《自己动手写Docker》书摘之四: 构造简单容器
构造简单容器 本章我们即将开始真正踏上构造自己的容器道路上。我们会基于当前的操作系统创建一个与宿主机隔离的容器环境,并且配置上基本的文件系统与网络。最后会在容器内运行一些应用来使用我们的容器,是不是很激动,下面我们开始吧。
6731 0
|
存储 Ubuntu Shell
《自己动手写Docker》书摘之三: Linux UnionFS
UnionFS unionfs是一种为Linux,FreeBSD和NetBSD操作系统设计的把其他文件系统联合到一个联合挂载点的文件系统服务。它使用branch把不同文件系统的文件和目录“透明地”覆盖,形成一个单一一致的文件系统。
9513 0
|
监控 Linux Shell
《自己动手写Docker》书摘之二: Linux Cgroups
Linux Cgroups介绍 上面是构建Linux容器的namespace技术,它帮进程隔离出自己单独的空间,但Docker又是怎么限制每个空间的大小,保证他们不会互相争抢呢?那么就要用到Linux的Cgroups技术。
6336 0
|
Linux Shell Go
《自己动手写Docker》书摘之一: Linux Namespace
Linux Namespace 介绍 我们经常听到说Docker 是一个使用了Linux Namespace 和 Cgroups 的虚拟化工具,但是什么是Linux Namespace 它在Docker内是怎么被使用的,说到这里很多人就会迷茫,下面我们就先介绍一下Linux Namespace
12745 0
|
21天前
|
Docker 容器
进入Docker容器中
进入Docker容器中
34 2
|
1月前
|
Java Go 开发者
Docker容器技术简介及其与Go语言的结合点
【2月更文挑战第23天】本文首先概述了Docker容器技术的核心概念和优势,接着探讨了Go语言与Docker容器技术的结合点。通过阐述Docker的轻量级、可移植性和版本控制等特性,以及Go语言在容器化应用中的优势,本文旨在说明两者结合能够实现更高效、灵活的应用开发和部署。
|
1天前
|
存储 运维 监控
构建高效稳定的Docker容器监控体系
【4月更文挑战第18天】 在现代微服务架构中,Docker容器已成为部署和运行应用的标准环境。随之而来的挑战是如何有效监控这些容器的性能与健康状况,确保系统的稳定性和可靠性。本文将探讨构建一个高效稳定的Docker容器监控体系的关键技术和方法,包括日志管理、性能指标收集以及异常检测机制,旨在为运维人员提供实用的指导和建议。
6 0
|
9天前
|
Linux Docker 容器
docker 容器常用命令
docker 容器常用命令
12 0
|
10天前
|
Linux Shell 虚拟化
linux 部署docker容器虚拟化平台(二)--------docker 镜像制作方法
linux 部署docker容器虚拟化平台(二)--------docker 镜像制作方法
14 0