Skip to content

《Docker技术入门与实战(第三版)》精读笔记

写在前面

  • 书籍介绍:本书从Docker基本原理开始,深入浅出地讲解Docker的构建与操作,内容系统全面,可帮助开发人员、运维人员快速部署Docker应用。
  • 我的简评:使用Docker来部署应用确实很方便,特别推荐给喜欢玩nodejs的前端朋友们。本书从理论到实践,读完学到了挺多。
  • !!福利:文末有笔记思维导图、随书资料打包等下载地址哦

第一章 初识Docker

1.1.什么是Docker

    1. Docker 是基于 Go 语言实现的开源容器项目 。 它诞生于 2013 年年初,最初发起者是dotCloud 公司 。
    1. 现在主流的操作系统包括 Linux 各大发行版、 macOS , Windows 等都已经支持 Docker。
    1. Docker 的构想是要实现“ Build , Ship and Run Any App, Anywhere ”,即通过对应用的封装( Packaging)、分发( Distribution )、部署( Deployment)、运行( Runtime )生命周期进行管理,达到应用组件级别的“一次封装 ,到处运行”

1.2.为什么要使用Docker

    1. Docker 在开发和运维中的优势如下:1. 更快速的交付和部署 ;2. 更高效的资源利用;3. 更轻松的迁移和扩展;4. 更简单的更新管理
    1. Docker 与虚拟机比较如下:1. Docker 容器很快,启动和停止可以在秒级实现,这相比传统的虚拟机方式(数分钟) 要快得多;2. Docker 容器对系统资源需求很少,一台主机上可以同时运行数千个 Docker 容器(在 IBM 服务器上已经实现了同时运行! OK 量级的容器实例);3. Docker 通过类似 Git 设计理念的操作来方便用户获取、分发和更新应用镜像,存储复 用,增量更新;4. Docker 通过 Dockerfile 支持灵活的自动化创建和部署机制,以提高工作效率,并标准 化流程

1.3.Docker与虚拟化

    1. 维基百科上的定义如下:在计算机技 术中,虚拟化是 一种资 源管理技术,是将 计 算机 的各种实体资源,如服务器 、网络 、内存及存储等,予以抽 象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以用比原本的纽态更好的方式来应用这些资源 。”
    1. 从大类上分,虚拟化技术可分为基于硬件的虚拟化和基于软件的虚拟化
    1. 传统方式是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统 层 。 Docker 容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,因此更加轻量级

第二章 核心概念与安装配置

    1. Docker 的三大核心概念:镜像 (Image)、容器( Container )、仓库( Repository)

2.1.核心概念

    1. Docker 镜像类似于虚拟机镜像,可以将它理解为一个只读的模板
    1. 镜像是创建 Docker 容器的基础
    1. Docker 容器类似于一个轻量级的沙箱, Docker 利用容器来运行和隔离应用
    1. 容器是从镜像创建的应用运行实例 。 它可以启动、开始、停止 、删除,而这些容器都是彼此相互隔离、互不可见的
    1. Docker 仓库类似于代码仓库,是 Docker 集中存放镜像文件的场所
    1. 实际上,仓库注册服务器是存放仓库的地方,其上往往 存放着多个仓库

2.2.安装Docker引擎

    1. Docker 引擎是使用 Docker 容器的核心组件,可以在主流的操作系统和云平台上使用,包括 Linux 操作系统(如 Ubuntu 、 Debian , CentOS 、 Red.hat 等), macOS 和 Windows 操作系统,以及 IBM 、亚马逊、微软等知名云平台 。
    1. 目前 Docker 支持 Docker 引 擎、 Docker Hub 、 Docker Cloud 等多种服务 。
    1. Docker 引 擎 目前分为两个版本:社区版本( Community Edition, CE )和企业版本 (Enterprise Edition, EE ) 。 社区版本包括大部分的核心功能,企业版本则通过付费形式提供认证支持、镜像管理 、 容器托管 、 安全扫描等高级服务 。
    1. 目前的实验特性主要有 ipvlan 网络驱动、显卡插件、分布式应用包( Distributed Application Bundles )、监测点( Checkpoint)、回滚( Restore ),以及使用 squash 参数构建镜像
    1. 官方建议在生产环境中关闭这些实验特性 。
    1. 稳定版( stable channel)经过完整测试和精心维护,可用于关注稳定性的生产环境 。 稳定版每个季度( 3 个月)发布一次 。
    1. 测试版( edge channel )包含最新的工具和特性,甚至会包含一些开发中的特性 。 测试版适用于希望尝鲜井有能力处理异常或 Bug 的用户,并且默认收集所有用户使用数据 。 测试版每月发布一次。
    1. 目前 Docker 可以通过虚拟机方式来支持 Windows 7.1 和 Windows 8 ,只要平台 CPU 支持硬件虚拟化特性即可

2.3.配置Docker服务

    1. 为了避免每次使用 Docker 命令时都需要切换到特权身份,可以将当前用户加入安装中 自动创建的 docker 用户组

2.4.推荐实践环境

    1. 从稳定性上考虑,本书推荐实践环境的操作系统是 Ubuntu 18.04 LTS 系统或 Debian 稳定版本系统,使用 Linux 4.0 以上内核
    1. 执行命令代码中以$开头的,表明为普通用户;以#开头的,表明为特权用户 (root)
    1. 实际上, Docker 和 Docker Hub 的工 作流也并非凭空创造的,很大程度上参考了 Git 和 G i thub 的设计理念,从而为应用分发和团队合作都带来了众多优势 。

第三章 使用Docker镜像

3.1.获取镜像

    1. 可以使用 docker [image] pull 命令直接从 Docker Hub 镜像源来下载镜像
    1. 该命令的格式为 docker [image] pull NAME [ :TAG]。其中, NAME 是镜像仓库名称(用来区分镜像), TAG 是镜像的标签(往往用来表示版本信息)

3.2.查看镜像信息

    1. 使用docker images或docker image ls 命令可以列出本地主机上已有镜像的基 本信息
    1. 其中镜像的ID信息十分重要, 它唯一标识了镜像
    1. 镜像大小信息只是表示了该镜像的逻辑体积大小, 实际上由于相同的镜像层本地只会存储一份, 物理上占用的存储空间会小于各镜像逻辑体积之和
    1. 使用docker巨mage]inspect命令可以获取该镜像的详细信息,包括制作者 、适应 架构、各层的数字摘要等

3.3.搜寻镜像

    1. 使用 docker search 命令可以搜索Docker Hub 官方仓库中的镜像。 语法为 docker search [op巨on] keyword

3.4.删除和清理镜像

    1. 使用 docker rmi 或 docker image rm 命令可以删除镜像, 命令格式为 docker rmi IMGE [IMAGE ... ], 其中 IMAGE 可以为标签或 ID
    1. docker rmi 命令只是删除了该镜像多个标签中的指定 标签而巳, 并不影响镜像文件
    1. 当使用 docker rmi 命令, 并且后面跟上镜像的 ID (也可以是能进行区分的部分 ID 串 前缀)时, 会先尝试删除所有指向该镜像的标签, 然后删除该镜像文件本身
    1. 注意, 通常并不推荐使用-f参数来强制删除一个存在容器依赖的镜像。 正确的做法是,先删除依赖该镜像的所有容器, 再来删除镜像
    1. 使用Docker 一段时间后, 系统中可能会遗留一些临时的镜像文件, 以及一些没有被使用的镜像, 可以通过docker image prune命令来进行清理

3.5.创建镜像

    1. 创建镜像的方法主要有三种: 基于已有镜像的容器创建、 基千本地模板导入、 基于 Dockerile 创建
    1. 基于已有容器创建。主要是使用 docker [con七ainer] commit命令。命令格式为 docker [container] commit [OPTIONS] CONTAINER [REPOSITORY [:TAG]]
    1. 基于本地模板导入:用户也可以直接从一个操作系统模板文件导人一个镜像,主要使用 docker [container] import 命令。 命令格式为 docker [image] i mport [OPTIONS] filelURLl -[REPOSITORY [:TAG ] ]
    1. 基于 Dockekfile 创建。基于 Dockerfile 创建是最常见的方式。 Dockerfile 是一个文本文件,利用给定的指令描述基于某个父镜像创建新镜像的过程

3.6.存出和载入镜像

    1. 用户可以使用 docker [image] save 和 do cker [image ] load 命令来存出和载人镜像
    1. 如果要导出镜像到本地文件,可以使用 docker [image] save 命令
    1. 可以使用 docker [image] load 将导出的 tar 文件再导人到本地镜像库

3.7.上传镜像

    1. 可以使用 docker [image] push 命令上传镜像到仓库,默认上传到 Docker Hub 官方仓库(需要登录)
    1. 在平时的 Docker 使用中, 要注意积累自己定制的镜像文件,并将自己创建的高质量镜像分享到社区中

第四章 操作Docker容器

    1. 容器是镜像的一个运行实例。所不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层,同时,容器中的应用进程处于运行状态

4.1.创建容器

    1. 可以使用 docker create 命令新建一个容器
    1. 使用 docker [container] start 命令来启动一个已经创建的容器
    1. 更多的时候,需要让 Docker 容器在后台以守护态( Daemonized)形式运行。 此时,可以通过添加-d 参数来实现
    1. 要获取容器的输出信息,可以通过 docker [container] logs 命令

4.2.停止容器

    1. 可以使用 docker [container] pause CONTAINER [CONTAINER ... ]命令来暂 停一个运行中的容器
    1. 可以使用 docker [container] stop 来终止一个运行中的容器
    1. 执行 docker container prune 命令,会自动清除掉所有处于停止状态的容器。还可以通过 docker [co口tai口er ] kill 直接发送 SIGKILL 信号来强行终止容器。

4.3.进入容器

    1. 在使用- d 参数时,容器启动后会进入后台,用户无法看到容器中的信息,也无法进行操作
    1. 这个时候如果需要进入容器进行操作,推荐使用官方的 attach 或 exec 命令
    1. Docker 提供了一个更加方便的工具 exec 命令,可以在运行 中容器内直接执行任意命令

4.4.删除容器

    1. 可以使用 docker [container) rm 命令来删除处于终止或退出状态的容器
    1. 默认情况下, docker rm 命令只能删除已经处于终止或退出状态的容器,并不能删除 还处于运行状态的容器

4.5.导入和导出容器

    1. 导出容器是指,导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行 状态 。 可以使用 docker [container ] export 命令
    1. 导出的文件又可以使用 docker [container ] import 命令导人变成镜像
    1. 实际上,既可以使用 docker load 命令来导入镜像存储文件到本地镜像库,也可以使 用 docker [container] import 命令来导入一个容器快照到本地镜像库
    1. 两者的区别在于 : 容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积更大

4.6.查看容器

    1. 查看容器详情可以使用 docker container inspect [OPTIONS] CONTAINER [CONTAINER . .. ]子命令
    1. 查看容器内进程可以使用 docker [container] top [OPTIONS] CONTAINER [CONTAINER . .. ] 子命令
    1. 查看统计信息可以使用 docker [container] stats [OPTIONS] [CONTAINER ... ] 子命令,会显示 CPU 、内存、存储、网络等使用情况的统计信息

4.7.其他容器命令

    1. container cp 命令支持在容器和主机之间复制文件。 命令格式为 docker [container] cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH | -
    1. container diff 查看容器内文件系统的变更。 命令格式为 docker [container] diff CONTAINER
    1. container port 命令可以查看容器的端口映射’情况。 命令格式为 docker container port CONTAINER [PRIVATE_PORT[/PROTO ]]
    1. container update 命令可以更新容器的一些运行时配置,主要是一些资源限制份额。 命令格式为 docker [container] update [OPTIONS] CONTAINER [CONTAINER .. ]
    1. 可以使用 docker container help 命令查看 Docker 支持的容器操作子命令

第五章 访问Docker仓库

    1. 库( Repository)是集中存放镜像的地方,又分公共仓库和私有仓库
    1. 注册服务器是存放仓库的具体服务器, 一个注册服务器上可以有多个仓库,而每个仓库下面可以有多个镜像 。 从这方面来说,仓库可以被认为是一个具体的项目或目录

5.1.Docker Hub公共镜像市场

    1. Docker Hub 是 Docker 官方提供的最大的公共镜像仓库,目前包括了超过 100 000 的镜像
    1. 可以通过命令行执行 docker login 命令来输入用户名 、 密码和邮箱来完成注册和登 录
    1. 用户无须登录即可通过 docker search 命令来查找官方仓库中的镜像,并利用 docker [image ] pull 命令来将它下载到本地
    1. 用户也可以在登录后通过 docker push 命令来将本地镜像推送到 Docker Hub

5.2.第三方镜像市场

    1. 自动创建( Automated Builds)是 Docker Hub 提供的自动化服务,这一功能可以自动跟随项目代码的变更而重新构建镜像
    1. 国内不少云服务商都提供了 Docker 镜像市场包括腾讯云 、 网易云、阿里云等
    1. 下载镜像也是使用 docker pu l l 命令,但是要在镜像名称前添加注册服务器的具体地 址

5.3.搭建本地私有仓库

    1. 安装 Docker 后 , 可以通过官方提供的 regi st ry 镜像来简单搭建一套本地私有仓库环境:
    1. 仓库是集中维护容器镜像的地方,为 Docker 镜像文件的分发和管理提供了便捷的途径

第六章 Docker数据管理

    1. 容器中的管理数据主要有两种方式:1. 数据卷 ( Data Volumes ) : 容器内数据直接映射到本地主机环境;2. 数据卷容器( Data Volume Containers ) : 使用特定容器维护数据卷

6.1.数据卷

    1. 数据卷 ( Data Volumes ) 是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似于 Linux 中的 mount 行为
    1. 数据卷可以提供很多有用的特性如下:1. 数据卷可以在容器之间共事和重用,容器间传递数据将变得高效与方便;2. 对数据卷内数据的修改会立马生效,无论是容器内操作还是本地操作;3. 对数据卷的更新不会影响镜像,解摘开应用和数据 ;4. 卷会一直存在 ,直到没有容器使用,可以安全地卸载它
    1. 除了 create 子命令外, docker volume 还支持 inspect (查看详细信息)、 ls (列 出已有数据卷)、 prune (清理无用数据卷)、 rm (删除数据卷)等

6.2.数据卷容器

    1. 如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器 。 数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其他容器挂载。
    1. 使用数据卷容器可以让用户在容器之间自由地升级和移动数据卷

6.3.利用数据卷容器来迁移数据

    1. 可以利用数据卷容器对其中的数据卷进行备份、恢复,以实现数据的迁移
  • 在生产环境中,笔者推荐在使用数据卷或数据卷容器之外,定期将主机的本地数据进 行备份,或者使用支持容错的存储系统,包括 RAID 或分布式文件系统,如 Ceph 、 GPFS 、HDFS 等
  • 有些时候不希望将数据保存在宿主机或容器中,还可以使用 tmpfs 类型的数据 卷,其中数据只存在于内存中,容器退出后自动删除

第七章 端口映射与容器互联

7.1.端口映射实现容器访问

    1. 当容器中运行一些网络应用, 要让外部访问这些应用时, 可以通过-P或-p参数来指 定端口映射
    1. 容器有自己的内部网络和IP地址,使用docker [container) inspec七+容器 ID可以获取容器的具体信息

7.2.互联机制实现便捷互动

    1. 容器的互联(I皿cng)是一种让多个容器中的应用进行快速交互的方式。它会在源和接收容器之间创建连接关系,接收容器可以通过容器名快速访问到源容器,而不用指定具体的I地址
    1. Docker 相当于在两个互联的容器之间创建了一个虚机通道, 而且不用映射它们的端口到宿主主机上。 在启动 db 容器的时候并没有使用 -p 和 -P 标记, 从而避免了暴露数据库服务端口到外部网络上
    1. Docker 通过两种方式为容器公开连接信息:更新环境变量;更新 /etc/hos七s 文件

7.3. Docker目前可以成熟支持Linux系统自带的网络服务和功能, 这既可以利用现有成熟的技术提供稳定支持, 又可以实现快速的高性能转发。

7.4. 在生产环境中, 网络方面的需求更加复杂和多变, 包括跨主机甚至跨数据中心的通信,这时候往往就需要引入额外的机制, 例如 SDN (软件定义网络)或 NFV (网络功能虚拟化)的相关技术

第八章 使用Dockerfile创建镜像

    1. Dockerfle 是一个文本格式的配置文件, 用户可以使用 Dockerfle 来快速创建自定义的镜像

8.1.基本结构

    1. Dockerfle 由 一行行命令语句组成, 并且支持以#开头的注释行
    1. 一般而言, Dockerfle 主体内容分为四部分:基础镜像信息、 维护者信息、 镜像操作指令和容器启动时执行指令

8.2.指令说明

    1. Dockerfe 中指令的一般格式为 INSTRUCTION argumen七s, 包括 “配置指令" (配置 镜像信息)和 “操作指令"
    1. Docker 内置了一些镜像创建变量, 用户可以直接使用而无须声明, 包括(不区分大小写) HTTP PROXY 、 HTTPS PROXY 、 FTP PROXY 、 NO PROXY
    1. 任何 Dockerfile 中第 一条指令必须为 FROM 指令。 并且, 如果在同 一个 Dockerfle 中创建多个镜像时, 可以使用多个 FROM 指令(每个镜像一次)
    1. LABEL 指令可以为生成的镜像添加元数据标签信息。 这些信息可以用来辅助过滤出特 定镜像
    1. EXPOSE声明镜像内服务监听的端口
    1. ENV指定环境变量, 在镜像生成过程中会被后续RU指令使用, 在镜像启动的容器中也会存在
    1. ENTRYPOINT指定镜像的默认入口命令, 该入口命令会在启动容器时作为根命令执行, 所有传人值作为该命令的参数
    1. 每条 RUN 指令将在当前镜像基础上执行指定命令,并提交为新的镜像层 。 当命令较长时可以使用\来换行
    1. CMD 指令用来指定启动容器时默认执行的命令
    1. 每个 Dockerfile 只能有一条 CMD 命令 。 如果指定了多条命令,只有最后一条会被执行

8.3.创建镜像

    1. 编写完成 Dockerfile 之后,可以通过 docker [image] build 命令来创建镜像
    1. 该命令将读取指定路径下(包括子目录)的 Dock巳rfile ,并将该路径下所有数据作为上下文( Context)发送给 Docker 服务端 。 Docker 服务端在校验 Dockerfile 格式通过后,逐条执行其中定义的指令,碰到 ADD 、 COPY 和 RUN 指令会生成一层新的镜像。 最终如果创建镜像成功,会返回最终镜像的 ID 。
    1. 大部分情况下,生成新的镜像都需要通过 FROM 指令来指定父镜像。 父镜像是生成镜像的基础 ,会直接影响到所生成镜像的大小和功能
    1. 用户可 以选择两种镜像作为父镜像,一种是所谓的基础镜像( baseimage),另外一种是普通的镜像(往往由第三方创建,基于基础镜像)
    1. 可以通过 .dockerignore 文件(每一行添加一条匹配模式)来让 Docker 忽略匹配路 径或文件,在创建镜像时候不将无关数据发送到服务端
    1. 自 17.05 版本开始, Docker 支持多步骤镜像创建( Multi- stage build )特性,可以精简最终生成的镜像大小 。

8.4.最佳实践

    1. 所谓最佳实践,就是从需求出发,来定制适合自己 、高效方便的镜像 。
    1. 建议读者在生成镜像过程中,尝试从如下角度进行思考,完善所生成镜像 :1、精简镜像用途;2、选用合适的基础镜像;3、提供注释和维护者信息;4、正确使用版本号;5、减少镜像层数;6、恰当使用多步骤创建;7、使用 .dockerignore 文件;8、及时删除临时文件和缓存文件;9、提高生成速度;10、调整合理的指令顺序;11、减少外部源的干扰

第九章 操作系统

    1. 目前常用的 Linux 发行版主要包括 Debian/Ubun阳系列和 CentOS/Fedora 系列
    1. 使用 Docker ,只需要一个命令就能快速获取一个 Linux 发行版镜像 ,这是以往各种虚拟化技术都难以实现的

9.1.BusyBox

    1. BusyBox 是一个集成了一百多个最常用 Linux 命令(如 cat 、 echo 、 grep 、 mount 、 telnet 等) 的精简工具箱,它只有不 到 2 1\但 大小,被誉为“ Linux 系统的瑞士军刀”

9.2.Alpine

    1. Alp ine 操作系统是一个面向安全的轻型 Linux 发行版, 关注安全,性能和资源效能

9.3.Debian/Ubantu

    1. Debian 和 Ubuntu 都是目前较为流行的 Debi an 系的服务器操作系统,十分适合研发场景

9.4.CentOS/Fedora

    1. CentOS 和 Fedora 都是基于 Redhat 的 Linux 发行版。CentOS是目前企业级服务器的常用操作系统; Fedora则主要面向个人桌面用户
    1. Fedora 是由 Fedora Project 社区开发, Red Hat 公司赞助的 Linux 发行版 。 它的目标是创建一套新颖 、 多功能并且自由和开源的操作系统

9.7. 官方镜像体积都比较小,只带有一些基本的组件,适合用来作为基础镜像 。 精简的 系统有利于安全、稳定和高效的运行,也适合进行定制化

9.8. 个别第三方(如 tu阳m ,已被 Docker 收购)维护的应用镜像质量也非常高 。 这些镜像通常针对某个具体应用进行配置,比如:包含 LAMP 组件的 Ubun阳镜像

第十章 为镜像添加SSH服务

    1. 10.1.基于commit命令创建
    1. 10.2.使用Dockerfile创建
    1. 在 Docker 社区中,对于是否需要为 Docker 容器启用 SSH 服务一直有争论
    1. 一方的观点是: Docker 的理念是一个容器只运行一个服务 。 因此,如果每个容器都运行一个额外的 SSH 服务,就违背了这个理念
    1. 另外一方的观点是:虽然使用 docker exec 命令可以从本地进入容器,但是如果要从 其他远程主机进人依然没有更好的解决方案

第十一章 Web服务与应用

11.1.Apache

    1. Apache 是一个高稳定性的、 商业级别的开源 Web 服务器, 是目前世界使用排名第一的 Web 服 务器软件

11.2.Nginx

    1. Nginx (发音为 "engine-x") 是一款功能强大开源反向代理服 务器 , 它也可以作为负载均衡器 支持 HTTP 、 HTTPS 、SMTP、POP3、IMAP 等协议。它也可以作为负载均衡器、HTTP缓存或Web服务器
    1. Nginx 特性如下:热部署、高并发连接、低内存消耗、响应快、高可靠性

11.3.Tomcat

    1. Tomcat 是由 Apache 软件基金会下属的 Jakarta 项目开发的一个 Servlet 容 器, 按照 Sun Microsystems 提供的技术规范, 实现了对 Servlet 和 JavaServer Page (JSP) 的支持。 同时, 它提供了作为 Web 服务器的一些特有功能, 如 Tomcat 管理和控制平台、 安全域管理和 Tomcat 阀等

11.4.Jetty

    1. Jetty 是一个优秀的开源 serv let 容器, 以其高效、 小 巧、可嵌入式等优点深得人心,它为基于 Java 的 Web 内 容(如 JSP 和 se叫巳t)提供运行环境
    1. 与相对老牌的 Tomcat 比, Jetty 架构更合理,性能更优 。 尤其在启动速度上,让 Tomcat望尘莫及

11.5.LAMP

    1. LAMP (Linux-Apache-MySQL-PHP )是目前流行的 Web 工具拢, 其中包括 : Linux 操作系统, Apache 网络服务器, MySQL 数据库, Perl 、 PHP 或者 Python 编程语言
    1. 和 Java/J2EE 架构相比, LAMP 具有 Web 资源丰富、轻量、快速开发等特点;和微软的 .NET 架构相比 , LAMP 更具有通用、跨平台 、高性能 、低价格的优势

11.6. 持续开发与管理

    1. 持续集成的特点包括 :
    1. 鼓励自动化的周期性的过程,从检出代码、编译构建、运行测试、 结果记录 、 测试统 计等都是自动完成的,减少人工干预;
    1. 需要有持续集成系统的支持 , 包括代码托管机制支持,以及集成服务器等
    1. 持续交付( Continuous Delivery, CD )则是经典的敏捷软件开发方法的自然延伸,它强调产品在修改后到部署上线的流程要敏捷化、自动化
    1. Jenkins 是一个得到广泛应用的持续集成和持续交付的工具 。 作为开源软件项目,它旨在提供一个开放易用的持续集成平台
    1. GitLab 是一款非常强大的开源源码管理系统 。 它支持基于 G i t 的源码管理、代码评审、 issue 跟踪、活动管理、 wiki 页面 、 持续集成和测试等功能

11.7. 包括 Web 服务在内的中间件领域十分适合引人容器技术 :

    1. 中间件服务器是除数据库服务器外的主要计算节点,很容易成为性能瓶颈,所以通常 需要大批量部署,而 Docker 对于批量部署有着许多先天的优势;
    1. 中间件服务器结构清晰,在剥离了配置文件、日志、代码目录之后,容器几乎可以处 于零增长状态,这使得容器的迁移和批量部署更加方便;
    1. 中间件服务器很容易实现集群,在使用硬件的 FS 、软件的 Nginx 等负载均衡后,中 间件服务器集群变得非常容易

第十二章 数据库应用

12.1.MySQL

    1. MySQL 是全球最流行的开源关系型数据库之一,由于其具有高性 能、成熟可靠、高适应性 、 易用性而得到广泛应用 。

12.2.Oracle Database XE

    1. Oracle Database 11 g 快捷版( Oracle Database XE )是一款基于 Oracle Database 11 g 第 2 版代码库的小型入门级数据库

12.3.MongoDB

    1. MongoDB 是一款可扩展、高性能的开源文档数据库(Document-Oriented ),是当今最流行的 NoSQL 数据库之一
    1. 采用 C++开发,支持复杂的数据类型和强大的查询语言,提供了关系数据库的绝大部分功能
    1. MongoDB (源自“ humogous ” )是一个面向文档的跨平台数据库,避开了传统关系型数据库结构,转而使用动态类似于 JSON 的 BSON 格式,使其能轻松地将多个数据写在同一类型中

12.4.Redis

    1. Redis 是一个开源 ( BSD 许可)的基于内存的数据结构存储系统,可 以用作数据库 、 缓存和消息中间件。
    1. Redis 支持多种类型的数据结构,如 string ( 字符串)、 hash (散列)、 list (列 表)、 set (集合)、 sorted set (有序集合)与范围查询 、 bitmaps 、 hyperloglogs 和 geospatial 索引半径查询, Redis 同时支持 replication 、 LUA 脚本、 LRU 驱动事件、 事务和不同级别的持久化支持等,通过哨兵机制和集群机制提供高可用性 。

12.5.Cassandra

    1. Apache Cassandra 是个开源( Apache License 2.0 )的分布式数据库,支 持分布式高可用数据存储,可以提供跨数据中心的容错能力且无单点故障, 并通过异步无主复制实现所有客户端的低延迟操作
    1. Cassandra 在设计上引人了 P2P 技术,具备大规模可分区行存储能力,并支持 Sp缸L Storm 、Hadoop 系统集成

12.6. 在使用数据库容器时,建议将数据库文件映射到宿主主机,一方面减少容器文件系统带 来的性能损耗,另一方面实现数据的持久化

第十三章 分布式处理与大数据平台

13.1. 热门的大数据分布式处理的三大重量级武器: Hadoop 、 Sp缸k 、 Storm ,以及新一代的数据采集和分析引擎 Elasticsearch 。

13.1.Hadoop

13.2.1. Hadoop 主要基于 Java 语言实现,由三个核心子系统组成 : HDFS 、 YARN 、 MapReduce , 其中, HDFS是一套分布式文件系统; YARN 是资源管理系统, MapReduce 是运行在 YARN 上的应用,负责分布式处理管理。

13.2.Spark

13.3.1. Apache Spark 是一个围绕速度 、 易用性和复杂分析构建的大数据 处理框架,基于 Scala 开发 。 最初在 2009 年由加州大学伯克利分校的 AMPLab 开发,并于 2010 年成为 Apache 的开源项目之-

13.3.Storm

13.4.1. Apache Storm 是一个实时流计算框架,由 Twitter 在 2014 年正 ~飞 式开源,遵循Eclipse Public License1.0,基于Clojure等语言实现

13.4.Elasticsearch

13.5.1. Elasticsearch 是基于 Lucene 的开源搜索服务( Java 实现) 。它是分布式、多租户的全文搜索引擎,支持 RESTful Web 接口 。Elasticsearch 支持实时分布式数据存储和分析查询功能,可以轻松扩展到上百台服务器,同时支持处理 PB 级结构化或非结构化数据 。

13.6. 实际上,摩尔定律的失效,必将导致越来越多的复杂任务必须采用分布式架构进行处理。

第十四章 编程开发

  • 14.1.C/C++
  • 14.2.Java
  • 14.3.Python
  • 14.4.JavaScript
  • 14.5.Go

第十五章 容器与云服务

  • 15.1.公有云容器服务
  • 15.2.容器云服务
  • 15.3.阿里云容器服务
  • 15.4.时速云介绍

第十六章 容器实战思考

  • 16.1.Docker为什么会成功
  • 16.2.研发人员该如何看待容器
  • 16.3.容器化开发模式
  • 16.4.容器与生产环境

写在后面

  • pdf书籍、笔记思维导图、随书代码打包下载地址:暂无
  • 思维导图在线查看:点击打开
  • 得到电子书地址:点击阅读
  • 京东纸质书地址:点击购买