Appearance
《Docker技术入门与实战(第三版)》精读笔记
写在前面
- 书籍介绍:本书从Docker基本原理开始,深入浅出地讲解Docker的构建与操作,内容系统全面,可帮助开发人员、运维人员快速部署Docker应用。
- 我的简评:使用Docker来部署应用确实很方便,特别推荐给喜欢玩nodejs的前端朋友们。本书从理论到实践,读完学到了挺多。
- !!福利:文末有笔记思维导图、随书资料打包等下载地址哦
第一章 初识Docker
1.1.什么是Docker
- Docker 是基于 Go 语言实现的开源容器项目 。 它诞生于 2013 年年初,最初发起者是dotCloud 公司 。
- 现在主流的操作系统包括 Linux 各大发行版、 macOS , Windows 等都已经支持 Docker。
- Docker 的构想是要实现“ Build , Ship and Run Any App, Anywhere ”,即通过对应用的封装( Packaging)、分发( Distribution )、部署( Deployment)、运行( Runtime )生命周期进行管理,达到应用组件级别的“一次封装 ,到处运行”
1.2.为什么要使用Docker
- Docker 在开发和运维中的优势如下:1. 更快速的交付和部署 ;2. 更高效的资源利用;3. 更轻松的迁移和扩展;4. 更简单的更新管理
- Docker 与虚拟机比较如下:1. Docker 容器很快,启动和停止可以在秒级实现,这相比传统的虚拟机方式(数分钟) 要快得多;2. Docker 容器对系统资源需求很少,一台主机上可以同时运行数千个 Docker 容器(在 IBM 服务器上已经实现了同时运行! OK 量级的容器实例);3. Docker 通过类似 Git 设计理念的操作来方便用户获取、分发和更新应用镜像,存储复 用,增量更新;4. Docker 通过 Dockerfile 支持灵活的自动化创建和部署机制,以提高工作效率,并标准 化流程
1.3.Docker与虚拟化
- 维基百科上的定义如下:在计算机技 术中,虚拟化是 一种资 源管理技术,是将 计 算机 的各种实体资源,如服务器 、网络 、内存及存储等,予以抽 象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以用比原本的纽态更好的方式来应用这些资源 。”
- 从大类上分,虚拟化技术可分为基于硬件的虚拟化和基于软件的虚拟化
- 传统方式是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统 层 。 Docker 容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,因此更加轻量级
第二章 核心概念与安装配置
- Docker 的三大核心概念:镜像 (Image)、容器( Container )、仓库( Repository)
2.1.核心概念
- Docker 镜像类似于虚拟机镜像,可以将它理解为一个只读的模板
- 镜像是创建 Docker 容器的基础
- Docker 容器类似于一个轻量级的沙箱, Docker 利用容器来运行和隔离应用
- 容器是从镜像创建的应用运行实例 。 它可以启动、开始、停止 、删除,而这些容器都是彼此相互隔离、互不可见的
- Docker 仓库类似于代码仓库,是 Docker 集中存放镜像文件的场所
- 实际上,仓库注册服务器是存放仓库的地方,其上往往 存放着多个仓库
2.2.安装Docker引擎
- Docker 引擎是使用 Docker 容器的核心组件,可以在主流的操作系统和云平台上使用,包括 Linux 操作系统(如 Ubuntu 、 Debian , CentOS 、 Red.hat 等), macOS 和 Windows 操作系统,以及 IBM 、亚马逊、微软等知名云平台 。
- 目前 Docker 支持 Docker 引 擎、 Docker Hub 、 Docker Cloud 等多种服务 。
- Docker 引 擎 目前分为两个版本:社区版本( Community Edition, CE )和企业版本 (Enterprise Edition, EE ) 。 社区版本包括大部分的核心功能,企业版本则通过付费形式提供认证支持、镜像管理 、 容器托管 、 安全扫描等高级服务 。
- 目前的实验特性主要有 ipvlan 网络驱动、显卡插件、分布式应用包( Distributed Application Bundles )、监测点( Checkpoint)、回滚( Restore ),以及使用 squash 参数构建镜像
- 官方建议在生产环境中关闭这些实验特性 。
- 稳定版( stable channel)经过完整测试和精心维护,可用于关注稳定性的生产环境 。 稳定版每个季度( 3 个月)发布一次 。
- 测试版( edge channel )包含最新的工具和特性,甚至会包含一些开发中的特性 。 测试版适用于希望尝鲜井有能力处理异常或 Bug 的用户,并且默认收集所有用户使用数据 。 测试版每月发布一次。
- 目前 Docker 可以通过虚拟机方式来支持 Windows 7.1 和 Windows 8 ,只要平台 CPU 支持硬件虚拟化特性即可
2.3.配置Docker服务
- 为了避免每次使用 Docker 命令时都需要切换到特权身份,可以将当前用户加入安装中 自动创建的 docker 用户组
2.4.推荐实践环境
- 从稳定性上考虑,本书推荐实践环境的操作系统是 Ubuntu 18.04 LTS 系统或 Debian 稳定版本系统,使用 Linux 4.0 以上内核
- 执行命令代码中以$开头的,表明为普通用户;以#开头的,表明为特权用户 (root)
- 实际上, Docker 和 Docker Hub 的工 作流也并非凭空创造的,很大程度上参考了 Git 和 G i thub 的设计理念,从而为应用分发和团队合作都带来了众多优势 。
第三章 使用Docker镜像
3.1.获取镜像
- 可以使用 docker [image] pull 命令直接从 Docker Hub 镜像源来下载镜像
- 该命令的格式为 docker [image] pull NAME [ :TAG]。其中, NAME 是镜像仓库名称(用来区分镜像), TAG 是镜像的标签(往往用来表示版本信息)
3.2.查看镜像信息
- 使用docker images或docker image ls 命令可以列出本地主机上已有镜像的基 本信息
- 其中镜像的ID信息十分重要, 它唯一标识了镜像
- 镜像大小信息只是表示了该镜像的逻辑体积大小, 实际上由于相同的镜像层本地只会存储一份, 物理上占用的存储空间会小于各镜像逻辑体积之和
- 使用docker巨mage]inspect命令可以获取该镜像的详细信息,包括制作者 、适应 架构、各层的数字摘要等
3.3.搜寻镜像
- 使用 docker search 命令可以搜索Docker Hub 官方仓库中的镜像。 语法为 docker search [op巨on] keyword
3.4.删除和清理镜像
- 使用 docker rmi 或 docker image rm 命令可以删除镜像, 命令格式为 docker rmi IMGE [IMAGE ... ], 其中 IMAGE 可以为标签或 ID
- docker rmi 命令只是删除了该镜像多个标签中的指定 标签而巳, 并不影响镜像文件
- 当使用 docker rmi 命令, 并且后面跟上镜像的 ID (也可以是能进行区分的部分 ID 串 前缀)时, 会先尝试删除所有指向该镜像的标签, 然后删除该镜像文件本身
- 注意, 通常并不推荐使用-f参数来强制删除一个存在容器依赖的镜像。 正确的做法是,先删除依赖该镜像的所有容器, 再来删除镜像
- 使用Docker 一段时间后, 系统中可能会遗留一些临时的镜像文件, 以及一些没有被使用的镜像, 可以通过docker image prune命令来进行清理
3.5.创建镜像
- 创建镜像的方法主要有三种: 基于已有镜像的容器创建、 基千本地模板导入、 基于 Dockerile 创建
- 基于已有容器创建。主要是使用 docker [con七ainer] commit命令。命令格式为 docker [container] commit [OPTIONS] CONTAINER [REPOSITORY [:TAG]]
- 基于本地模板导入:用户也可以直接从一个操作系统模板文件导人一个镜像,主要使用 docker [container] import 命令。 命令格式为 docker [image] i mport [OPTIONS] filelURLl -[REPOSITORY [:TAG ] ]
- 基于 Dockekfile 创建。基于 Dockerfile 创建是最常见的方式。 Dockerfile 是一个文本文件,利用给定的指令描述基于某个父镜像创建新镜像的过程
3.6.存出和载入镜像
- 用户可以使用 docker [image] save 和 do cker [image ] load 命令来存出和载人镜像
- 如果要导出镜像到本地文件,可以使用 docker [image] save 命令
- 可以使用 docker [image] load 将导出的 tar 文件再导人到本地镜像库
3.7.上传镜像
- 可以使用 docker [image] push 命令上传镜像到仓库,默认上传到 Docker Hub 官方仓库(需要登录)
- 在平时的 Docker 使用中, 要注意积累自己定制的镜像文件,并将自己创建的高质量镜像分享到社区中
第四章 操作Docker容器
- 容器是镜像的一个运行实例。所不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层,同时,容器中的应用进程处于运行状态
4.1.创建容器
- 可以使用 docker create 命令新建一个容器
- 使用 docker [container] start 命令来启动一个已经创建的容器
- 更多的时候,需要让 Docker 容器在后台以守护态( Daemonized)形式运行。 此时,可以通过添加-d 参数来实现
- 要获取容器的输出信息,可以通过 docker [container] logs 命令
4.2.停止容器
- 可以使用 docker [container] pause CONTAINER [CONTAINER ... ]命令来暂 停一个运行中的容器
- 可以使用 docker [container] stop 来终止一个运行中的容器
- 执行 docker container prune 命令,会自动清除掉所有处于停止状态的容器。还可以通过 docker [co口tai口er ] kill 直接发送 SIGKILL 信号来强行终止容器。
4.3.进入容器
- 在使用- d 参数时,容器启动后会进入后台,用户无法看到容器中的信息,也无法进行操作
- 这个时候如果需要进入容器进行操作,推荐使用官方的 attach 或 exec 命令
- Docker 提供了一个更加方便的工具 exec 命令,可以在运行 中容器内直接执行任意命令
4.4.删除容器
- 可以使用 docker [container) rm 命令来删除处于终止或退出状态的容器
- 默认情况下, docker rm 命令只能删除已经处于终止或退出状态的容器,并不能删除 还处于运行状态的容器
4.5.导入和导出容器
- 导出容器是指,导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行 状态 。 可以使用 docker [container ] export 命令
- 导出的文件又可以使用 docker [container ] import 命令导人变成镜像
- 实际上,既可以使用 docker load 命令来导入镜像存储文件到本地镜像库,也可以使 用 docker [container] import 命令来导入一个容器快照到本地镜像库
- 两者的区别在于 : 容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积更大
4.6.查看容器
- 查看容器详情可以使用 docker container inspect [OPTIONS] CONTAINER [CONTAINER . .. ]子命令
- 查看容器内进程可以使用 docker [container] top [OPTIONS] CONTAINER [CONTAINER . .. ] 子命令
- 查看统计信息可以使用 docker [container] stats [OPTIONS] [CONTAINER ... ] 子命令,会显示 CPU 、内存、存储、网络等使用情况的统计信息
4.7.其他容器命令
- container cp 命令支持在容器和主机之间复制文件。 命令格式为 docker [container] cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH | -
- container diff 查看容器内文件系统的变更。 命令格式为 docker [container] diff CONTAINER
- container port 命令可以查看容器的端口映射’情况。 命令格式为 docker container port CONTAINER [PRIVATE_PORT[/PROTO ]]
- container update 命令可以更新容器的一些运行时配置,主要是一些资源限制份额。 命令格式为 docker [container] update [OPTIONS] CONTAINER [CONTAINER .. ]
- 可以使用 docker container help 命令查看 Docker 支持的容器操作子命令
第五章 访问Docker仓库
- 库( Repository)是集中存放镜像的地方,又分公共仓库和私有仓库
- 注册服务器是存放仓库的具体服务器, 一个注册服务器上可以有多个仓库,而每个仓库下面可以有多个镜像 。 从这方面来说,仓库可以被认为是一个具体的项目或目录
5.1.Docker Hub公共镜像市场
- Docker Hub 是 Docker 官方提供的最大的公共镜像仓库,目前包括了超过 100 000 的镜像
- 可以通过命令行执行 docker login 命令来输入用户名 、 密码和邮箱来完成注册和登 录
- 用户无须登录即可通过 docker search 命令来查找官方仓库中的镜像,并利用 docker [image ] pull 命令来将它下载到本地
- 用户也可以在登录后通过 docker push 命令来将本地镜像推送到 Docker Hub
5.2.第三方镜像市场
- 自动创建( Automated Builds)是 Docker Hub 提供的自动化服务,这一功能可以自动跟随项目代码的变更而重新构建镜像
- 国内不少云服务商都提供了 Docker 镜像市场包括腾讯云 、 网易云、阿里云等
- 下载镜像也是使用 docker pu l l 命令,但是要在镜像名称前添加注册服务器的具体地 址
5.3.搭建本地私有仓库
- 安装 Docker 后 , 可以通过官方提供的 regi st ry 镜像来简单搭建一套本地私有仓库环境:
- 仓库是集中维护容器镜像的地方,为 Docker 镜像文件的分发和管理提供了便捷的途径
第六章 Docker数据管理
- 容器中的管理数据主要有两种方式:1. 数据卷 ( Data Volumes ) : 容器内数据直接映射到本地主机环境;2. 数据卷容器( Data Volume Containers ) : 使用特定容器维护数据卷
6.1.数据卷
- 数据卷 ( Data Volumes ) 是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似于 Linux 中的 mount 行为
- 数据卷可以提供很多有用的特性如下:1. 数据卷可以在容器之间共事和重用,容器间传递数据将变得高效与方便;2. 对数据卷内数据的修改会立马生效,无论是容器内操作还是本地操作;3. 对数据卷的更新不会影响镜像,解摘开应用和数据 ;4. 卷会一直存在 ,直到没有容器使用,可以安全地卸载它
- 除了 create 子命令外, docker volume 还支持 inspect (查看详细信息)、 ls (列 出已有数据卷)、 prune (清理无用数据卷)、 rm (删除数据卷)等
6.2.数据卷容器
- 如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器 。 数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其他容器挂载。
- 使用数据卷容器可以让用户在容器之间自由地升级和移动数据卷
6.3.利用数据卷容器来迁移数据
- 可以利用数据卷容器对其中的数据卷进行备份、恢复,以实现数据的迁移
- 在生产环境中,笔者推荐在使用数据卷或数据卷容器之外,定期将主机的本地数据进 行备份,或者使用支持容错的存储系统,包括 RAID 或分布式文件系统,如 Ceph 、 GPFS 、HDFS 等
- 有些时候不希望将数据保存在宿主机或容器中,还可以使用 tmpfs 类型的数据 卷,其中数据只存在于内存中,容器退出后自动删除
第七章 端口映射与容器互联
7.1.端口映射实现容器访问
- 当容器中运行一些网络应用, 要让外部访问这些应用时, 可以通过-P或-p参数来指 定端口映射
- 容器有自己的内部网络和IP地址,使用docker [container) inspec七+容器 ID可以获取容器的具体信息
7.2.互联机制实现便捷互动
- 容器的互联(I皿cng)是一种让多个容器中的应用进行快速交互的方式。它会在源和接收容器之间创建连接关系,接收容器可以通过容器名快速访问到源容器,而不用指定具体的I地址
- Docker 相当于在两个互联的容器之间创建了一个虚机通道, 而且不用映射它们的端口到宿主主机上。 在启动 db 容器的时候并没有使用 -p 和 -P 标记, 从而避免了暴露数据库服务端口到外部网络上
- Docker 通过两种方式为容器公开连接信息:更新环境变量;更新 /etc/hos七s 文件
7.3. Docker目前可以成熟支持Linux系统自带的网络服务和功能, 这既可以利用现有成熟的技术提供稳定支持, 又可以实现快速的高性能转发。
7.4. 在生产环境中, 网络方面的需求更加复杂和多变, 包括跨主机甚至跨数据中心的通信,这时候往往就需要引入额外的机制, 例如 SDN (软件定义网络)或 NFV (网络功能虚拟化)的相关技术
第八章 使用Dockerfile创建镜像
- Dockerfle 是一个文本格式的配置文件, 用户可以使用 Dockerfle 来快速创建自定义的镜像
8.1.基本结构
- Dockerfle 由 一行行命令语句组成, 并且支持以#开头的注释行
- 一般而言, Dockerfle 主体内容分为四部分:基础镜像信息、 维护者信息、 镜像操作指令和容器启动时执行指令
8.2.指令说明
- Dockerfe 中指令的一般格式为 INSTRUCTION argumen七s, 包括 “配置指令" (配置 镜像信息)和 “操作指令"
- Docker 内置了一些镜像创建变量, 用户可以直接使用而无须声明, 包括(不区分大小写) HTTP PROXY 、 HTTPS PROXY 、 FTP PROXY 、 NO PROXY
- 任何 Dockerfile 中第 一条指令必须为 FROM 指令。 并且, 如果在同 一个 Dockerfle 中创建多个镜像时, 可以使用多个 FROM 指令(每个镜像一次)
- LABEL 指令可以为生成的镜像添加元数据标签信息。 这些信息可以用来辅助过滤出特 定镜像
- EXPOSE声明镜像内服务监听的端口
- ENV指定环境变量, 在镜像生成过程中会被后续RU指令使用, 在镜像启动的容器中也会存在
- ENTRYPOINT指定镜像的默认入口命令, 该入口命令会在启动容器时作为根命令执行, 所有传人值作为该命令的参数
- 每条 RUN 指令将在当前镜像基础上执行指定命令,并提交为新的镜像层 。 当命令较长时可以使用\来换行
- CMD 指令用来指定启动容器时默认执行的命令
- 每个 Dockerfile 只能有一条 CMD 命令 。 如果指定了多条命令,只有最后一条会被执行
8.3.创建镜像
- 编写完成 Dockerfile 之后,可以通过 docker [image] build 命令来创建镜像
- 该命令将读取指定路径下(包括子目录)的 Dock巳rfile ,并将该路径下所有数据作为上下文( Context)发送给 Docker 服务端 。 Docker 服务端在校验 Dockerfile 格式通过后,逐条执行其中定义的指令,碰到 ADD 、 COPY 和 RUN 指令会生成一层新的镜像。 最终如果创建镜像成功,会返回最终镜像的 ID 。
- 大部分情况下,生成新的镜像都需要通过 FROM 指令来指定父镜像。 父镜像是生成镜像的基础 ,会直接影响到所生成镜像的大小和功能
- 用户可 以选择两种镜像作为父镜像,一种是所谓的基础镜像( baseimage),另外一种是普通的镜像(往往由第三方创建,基于基础镜像)
- 可以通过 .dockerignore 文件(每一行添加一条匹配模式)来让 Docker 忽略匹配路 径或文件,在创建镜像时候不将无关数据发送到服务端
- 自 17.05 版本开始, Docker 支持多步骤镜像创建( Multi- stage build )特性,可以精简最终生成的镜像大小 。
8.4.最佳实践
- 所谓最佳实践,就是从需求出发,来定制适合自己 、高效方便的镜像 。
- 建议读者在生成镜像过程中,尝试从如下角度进行思考,完善所生成镜像 :1、精简镜像用途;2、选用合适的基础镜像;3、提供注释和维护者信息;4、正确使用版本号;5、减少镜像层数;6、恰当使用多步骤创建;7、使用 .dockerignore 文件;8、及时删除临时文件和缓存文件;9、提高生成速度;10、调整合理的指令顺序;11、减少外部源的干扰
第九章 操作系统
- 目前常用的 Linux 发行版主要包括 Debian/Ubun阳系列和 CentOS/Fedora 系列
- 使用 Docker ,只需要一个命令就能快速获取一个 Linux 发行版镜像 ,这是以往各种虚拟化技术都难以实现的
9.1.BusyBox
- BusyBox 是一个集成了一百多个最常用 Linux 命令(如 cat 、 echo 、 grep 、 mount 、 telnet 等) 的精简工具箱,它只有不 到 2 1\但 大小,被誉为“ Linux 系统的瑞士军刀”
9.2.Alpine
- Alp ine 操作系统是一个面向安全的轻型 Linux 发行版, 关注安全,性能和资源效能
9.3.Debian/Ubantu
- Debian 和 Ubuntu 都是目前较为流行的 Debi an 系的服务器操作系统,十分适合研发场景
9.4.CentOS/Fedora
- CentOS 和 Fedora 都是基于 Redhat 的 Linux 发行版。CentOS是目前企业级服务器的常用操作系统; Fedora则主要面向个人桌面用户
- Fedora 是由 Fedora Project 社区开发, Red Hat 公司赞助的 Linux 发行版 。 它的目标是创建一套新颖 、 多功能并且自由和开源的操作系统
9.7. 官方镜像体积都比较小,只带有一些基本的组件,适合用来作为基础镜像 。 精简的 系统有利于安全、稳定和高效的运行,也适合进行定制化
9.8. 个别第三方(如 tu阳m ,已被 Docker 收购)维护的应用镜像质量也非常高 。 这些镜像通常针对某个具体应用进行配置,比如:包含 LAMP 组件的 Ubun阳镜像
第十章 为镜像添加SSH服务
- 10.1.基于commit命令创建
- 10.2.使用Dockerfile创建
- 在 Docker 社区中,对于是否需要为 Docker 容器启用 SSH 服务一直有争论
- 一方的观点是: Docker 的理念是一个容器只运行一个服务 。 因此,如果每个容器都运行一个额外的 SSH 服务,就违背了这个理念
- 另外一方的观点是:虽然使用 docker exec 命令可以从本地进入容器,但是如果要从 其他远程主机进人依然没有更好的解决方案
第十一章 Web服务与应用
11.1.Apache
- Apache 是一个高稳定性的、 商业级别的开源 Web 服务器, 是目前世界使用排名第一的 Web 服 务器软件
11.2.Nginx
- Nginx (发音为 "engine-x") 是一款功能强大开源反向代理服 务器 , 它也可以作为负载均衡器 支持 HTTP 、 HTTPS 、SMTP、POP3、IMAP 等协议。它也可以作为负载均衡器、HTTP缓存或Web服务器
- Nginx 特性如下:热部署、高并发连接、低内存消耗、响应快、高可靠性
11.3.Tomcat
- Tomcat 是由 Apache 软件基金会下属的 Jakarta 项目开发的一个 Servlet 容 器, 按照 Sun Microsystems 提供的技术规范, 实现了对 Servlet 和 JavaServer Page (JSP) 的支持。 同时, 它提供了作为 Web 服务器的一些特有功能, 如 Tomcat 管理和控制平台、 安全域管理和 Tomcat 阀等
11.4.Jetty
- Jetty 是一个优秀的开源 serv let 容器, 以其高效、 小 巧、可嵌入式等优点深得人心,它为基于 Java 的 Web 内 容(如 JSP 和 se叫巳t)提供运行环境
- 与相对老牌的 Tomcat 比, Jetty 架构更合理,性能更优 。 尤其在启动速度上,让 Tomcat望尘莫及
11.5.LAMP
- LAMP (Linux-Apache-MySQL-PHP )是目前流行的 Web 工具拢, 其中包括 : Linux 操作系统, Apache 网络服务器, MySQL 数据库, Perl 、 PHP 或者 Python 编程语言
- 和 Java/J2EE 架构相比, LAMP 具有 Web 资源丰富、轻量、快速开发等特点;和微软的 .NET 架构相比 , LAMP 更具有通用、跨平台 、高性能 、低价格的优势
11.6. 持续开发与管理
- 持续集成的特点包括 :
- 鼓励自动化的周期性的过程,从检出代码、编译构建、运行测试、 结果记录 、 测试统 计等都是自动完成的,减少人工干预;
- 需要有持续集成系统的支持 , 包括代码托管机制支持,以及集成服务器等
- 持续交付( Continuous Delivery, CD )则是经典的敏捷软件开发方法的自然延伸,它强调产品在修改后到部署上线的流程要敏捷化、自动化
- Jenkins 是一个得到广泛应用的持续集成和持续交付的工具 。 作为开源软件项目,它旨在提供一个开放易用的持续集成平台
- GitLab 是一款非常强大的开源源码管理系统 。 它支持基于 G i t 的源码管理、代码评审、 issue 跟踪、活动管理、 wiki 页面 、 持续集成和测试等功能
11.7. 包括 Web 服务在内的中间件领域十分适合引人容器技术 :
- 中间件服务器是除数据库服务器外的主要计算节点,很容易成为性能瓶颈,所以通常 需要大批量部署,而 Docker 对于批量部署有着许多先天的优势;
- 中间件服务器结构清晰,在剥离了配置文件、日志、代码目录之后,容器几乎可以处 于零增长状态,这使得容器的迁移和批量部署更加方便;
- 中间件服务器很容易实现集群,在使用硬件的 FS 、软件的 Nginx 等负载均衡后,中 间件服务器集群变得非常容易
第十二章 数据库应用
12.1.MySQL
- MySQL 是全球最流行的开源关系型数据库之一,由于其具有高性 能、成熟可靠、高适应性 、 易用性而得到广泛应用 。
12.2.Oracle Database XE
- Oracle Database 11 g 快捷版( Oracle Database XE )是一款基于 Oracle Database 11 g 第 2 版代码库的小型入门级数据库
12.3.MongoDB
- MongoDB 是一款可扩展、高性能的开源文档数据库(Document-Oriented ),是当今最流行的 NoSQL 数据库之一
- 采用 C++开发,支持复杂的数据类型和强大的查询语言,提供了关系数据库的绝大部分功能
- MongoDB (源自“ humogous ” )是一个面向文档的跨平台数据库,避开了传统关系型数据库结构,转而使用动态类似于 JSON 的 BSON 格式,使其能轻松地将多个数据写在同一类型中
12.4.Redis
- Redis 是一个开源 ( BSD 许可)的基于内存的数据结构存储系统,可 以用作数据库 、 缓存和消息中间件。
- Redis 支持多种类型的数据结构,如 string ( 字符串)、 hash (散列)、 list (列 表)、 set (集合)、 sorted set (有序集合)与范围查询 、 bitmaps 、 hyperloglogs 和 geospatial 索引半径查询, Redis 同时支持 replication 、 LUA 脚本、 LRU 驱动事件、 事务和不同级别的持久化支持等,通过哨兵机制和集群机制提供高可用性 。
12.5.Cassandra
- Apache Cassandra 是个开源( Apache License 2.0 )的分布式数据库,支 持分布式高可用数据存储,可以提供跨数据中心的容错能力且无单点故障, 并通过异步无主复制实现所有客户端的低延迟操作
- 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.容器与生产环境