Support Statistics
¥.00 ·
0times
Text Preview (First 20 pages)
Registered users can read the full content for free
Register as a Gaohf Library member to read the complete e-book online for free and enjoy a better reading experience.
Page
1
(This page has no text content)
Page
2
1.1 1.2 1.3 1.4 1.4.1 1.4.2 1.5 1.5.1 1.5.2 1.5.3 1.6 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.7 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 1.7.6.1 1.7.6.2 1.7.6.3 1.7.6.4 1.7.6.5 目录 前言 修订记录 如何贡献 Docker 简介 什么是 Docker 为什么要用 Docker 基本概念 镜像 容器 仓库 安装 Docker Ubuntu Debian CentOS Raspberry Pi macOS Windows PC 镜像加速器 使用镜像 获取镜像 列出镜像 删除本地镜像 利用 commit 理解镜像构成 使用 Dockerfile 定制镜像 Dockerfile 指令详解 COPY 复制文件 ADD 更高级的复制文件 CMD 容器启动命令 ENTRYPOINT 入口点 ENV 设置环境变量 2
Page
3
1.7.6.6 1.7.6.7 1.7.6.8 1.7.6.9 1.7.6.10 1.7.6.11 1.7.6.12 1.7.6.13 1.7.7 1.7.8 1.7.9 1.8 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.9 1.9.1 1.9.2 1.9.3 1.10 1.10.1 1.10.2 1.11 1.11.1 1.11.2 1.11.3 1.12 1.12.1 1.12.2 1.12.3 1.12.4 ARG 构建参数 VOLUME 定义匿名卷 EXPOSE 暴露端口 WORKDIR 指定工作目录 USER 指定当前用户 HEALTHCHECK 健康检查 ONBUILD 为他人作嫁衣裳 参考文档 Dockerfile 多阶段构建 其它制作镜像的方式 实现原理 操作容器 启动 守护态运行 终止 进入容器 导出和导入 删除 访问仓库 Docker Hub 私有仓库 私有仓库高级配置 数据管理 数据卷 监听主机目录 使用网络 外部访问容器 容器互联 配置 DNS 高级网络配置 快速配置指南 容器访问控制 端口映射实现 配置 docker0 网桥 3
Page
4
1.12.5 1.12.6 1.12.7 1.12.8 1.13 1.13.1 1.13.2 1.13.3 1.13.4 1.13.5 1.13.6 1.13.7 1.13.8 1.14 1.14.1 1.14.2 1.15 1.16 1.16.1 1.16.2 1.16.3 1.16.4 1.16.5 1.16.6 1.17 1.17.1 1.17.2 1.17.3 1.17.4 1.17.5 1.17.6 1.18 1.18.1 自定义网桥 工具和示例 编辑网络配置文件 实例:创建一个点到点连接 Docker 三剑客之 Compose 项目 简介 安装与卸载 使用 命令说明 Compose 模板文件 实战 Django 实战 Rails 实战 WordPress Docker 三剑客之 Machine 项目 安装 使用 Docker 三剑客之 Docker Swarm Swarm mode 基本概念 创建 Swarm 集群 部署服务 使用 compose 文件 管理敏感数据 管理配置信息 安全 内核命名空间 控制组 服务端防护 内核能力机制 其它安全特性 总结 底层实现 基本架构 4
Page
5
1.18.2 1.18.3 1.18.4 1.18.5 1.18.6 1.19 1.19.1 1.19.2 1.19.3 1.19.4 1.20 1.20.1 1.20.2 1.20.3 1.21 1.21.1 1.21.2 1.21.3 1.21.4 1.21.5 1.22 1.22.1 1.22.2 1.22.3 1.22.4 1.22.5 1.22.6 1.22.7 1.23 1.23.1 1.23.2 1.23.3 1.23.4 1.23.5 命名空间 控制组 联合文件系统 容器格式 网络 Etcd 项目 简介 安装 集群 使用 etcdctl CoreOS 项目 简介 工具 快速搭建 CoreOS 集群 Kubernetes 项目 简介 快速上手 基本概念 kubectl 使用 架构设计 Mesos - 优秀的集群资源调度平台 Mesos 简介 安装与使用 原理与架构 Mesos 配置项解析 日志与监控 常见应用框架 本章小结 容器与云计算 简介 亚马逊云 腾讯云 阿里云 小结 5
Page
6
1.24 1.24.1 1.24.2 1.24.3 1.24.4 1.24.5 1.25 1.25.1 1.26 1.26.1 1.27 1.27.1 1.27.2 1.27.2.1 1.27.2.2 1.27.2.3 1.27.2.4 1.27.2.5 1.27.2.6 1.27.2.7 1.27.2.8 1.27.3 1.27.4 1.27.5 1.27.6 实战案例-操作系统 Busybox Alpine Debian Ubuntu CentOS Fedora 本章小结 实战案例-CI/CD Drone Docker 开源项目 LinuxKit 附录 附录一:常见问题总结 附录二:热门镜像介绍 Ubuntu CentOS MySQL MongoDB Redis Nginx WordPress Node.js 附录三:Docker 命令查询 附录四:Dockerfile 最佳实践 附录五:资源链接 附录六:Docker 中文资源 6
Page
7
Docker — 从入门到实践 0.9.0(2017-12-31) 修订说明:本书内容已基于 Docker CE v17.MM 进行了重新修订,2017 年底发布了 0.9.0 版 本。旧版本(Docker 1.13-)内容,请阅读 docker-legacy 分支的内容。 Docker 是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的运行效 率,降低了云计算资源供应的成本!使用 Docker,可以让应用的部署、测试和分发都变得前 所未有的高效和轻松! 无论是应用开发者、运维人员、还是其他信息技术从业人员,都有必要认识和掌握 Docker, 节约有限的时间。 本书既适用于具备基础 Linux 知识的 Docker 初学者,也希望可供理解原理和实现的高级用户 参考。同时,书中给出的实践案例,可供在进行实际部署时借鉴。前六章为基础内容,供用 户理解 Docker 的基本概念和操作;7 ~ 9 章介绍包括数据管理、网络等高级操作;第 10 ~ 13 章介绍了容器生态中的几个核心项目;14、15 章讨论了关于 Docker 安全和实现技术等高级 话题。后续章节则分别介绍包括 Etcd、CoreOS、Kubernetes、Mesos、容器云等热门开源 项目。最后,展示了使用容器技术的典型的应用场景和实践案例。 在线阅读:GitBook,Github,国内镜像 下载:pdf, epub 离线阅读 Docker 自身仍在快速发展中,生态环境也在蓬勃成长。建议初学者使用最新版的 Docker (v17.MM) 进行学习实践。欢迎 参与维护项目。 修订记录 贡献者名单 技术交流 欢迎加入 Docker 技术交流 QQ 群,分享 Docker 资源,交流 Docker 技术。 QQ 群 I (已满):341410255 QQ 群 II (已满):419042067 QQ 群 III (已满):210028779 QQ 群 IV (已满):483702734 QQ 群 V (已满):460598761 前言 7
Page
8
QQ 群 VI (已满):581983671 QQ 群 VII (已满):252403484 QQ 群 VIII(已满):544818750 QQ 群 IX (已满):571502246 QQ 群 X (已满):145983035 如果你有关于 Docker 的问题,请通过 Issues 来提出你的问题。 进阶学习 《Docker 技术入门与实战》第二版已经正式出版,针对初版进行内容升级,欢迎大家阅读使 用并反馈建议。 京东图书 前言 8
Page
9
China-Pub 鼓励项目 欢迎鼓励项目一杯 coffee~ 前言 9
Page
10
主要修订记录 0.9.0: 2017-12-31 0.9.0-rc2: 2017-12-10 增加 Docker 中文资源链接 增加介绍基于 Docker 的 CI/CD 工具 Drone 增加 docker secret 相关内容 增加 docker config 相关内容 增加 LinuxKit 相关内容 更新 CoreOS 章节 更新 etcd 章节,基于 3.x 版本 删除 Docker Compose 中的 links 指令 替换 docker daemon 命令为 dockerd 替换 docker ps 命令为 docker container ls 替换 docker images 命令为 docker image ls 修改 安装 Docker 一节中部分文字表述 移除历史遗留文件和错误的文件 优化文字排版 调整目录结构 修复内容逻辑错误 修复 404 链接 0.9.0-rc1: 2017-11-29 根据最新版本(v17.09)修订内容 增加 Dockerfile 多阶段构建( multistage builds ) Docker 17.05 新增特性 增加 docker exec 子命令介绍 增加 docker 管理子命令 container image network volume 介绍 增加 树莓派单片电脑 安装 Docker 增加 Docker 存储驱动 OverlayFS 相关内容 更新 Docker CE v17.x 安装说明 更新 Docker 网络 一节 更新 Docker Machine 基于 0.13.0 版本 修订记录 10
Page
11
更新 Docker Compose 基于 3 文件格式 删除 Docker Swarm 相关内容,替换为 Swarm mode Docker 1.12.0 新增特性 删除 docker run --link 参数 精简 Docker Registry 一节 替换 docker run -v 参数为 --mount 修复 404 链接 优化文字排版 增加离线阅读功能 0.8.0: 2017-01-08 修正文字内容 根据最新版本(1.12)修订安装使用 补充附录章节 0.7.0: 2016-06-12 根据最新版本进行命令调整 修正若干文字描述 0.6.0: 2015-12-24 补充 Machine 项目 修正若干 bug 0.5.0: 2015-06-29 添加 Compose 项目 添加 Machine 项目 添加 Swarm 项目 完善 Kubernetes 项目内容 添加 Mesos 项目内容 0.4.0: 2015-05-08 添加 Etcd 项目 添加 Fig 项目 添加 CoreOS 项目 添加 Kubernetes 项目 0.3.0: 2014-11-25 完成仓库章节 重写安全章节 修正底层实现章节的架构、命名空间、控制组、文件系统、容器格式等内容 添加对常见仓库和镜像的介绍 修订记录 11
Page
12
添加 Dockerfile 的介绍 重新校订中英文混排格式 修订文字表达 发布繁体版本分支:zh-Hant 0.2.0: 2014-09-18 对照官方文档重写介绍、基本概念、安装、镜像、容器、仓库、数据管理、网络等 章节 添加底层实现章节 添加命令查询和资源链接章节 其它修正 0.1.0: 2014-09-05 添加基本内容 修正错别字和表达不通顺的地方 修订记录 12
Page
13
如何贡献项目 领取或创建新的 Issue,如 issue 235,添加自己为 Assignee 。 在 GitHub 上 fork 到自己的仓库,如 docker_user/docker_practice ,然后 clone 到本地, 并设置用户信息。 $ git clone git@github.com:docker_user/docker_practice.git $ cd docker_practice 修改代码后提交,并推送到自己的仓库,注意修改提交消息为对应 Issue 号和描述。 # Update the content $ git commit -a -s # In commit msg dialog, add content like "Fix issue #235: describe ur change" $ git push 在 GitHub 上提交 Pull Request ,添加标签,并邀请维护者进行 Review 。 定期使用项目仓库内容更新自己仓库内容。 $ git remote add upstream https://github.com/yeasy/docker_practice $ git fetch upstream $ git rebase upstream/master $ git push -f origin master 排版规范 本开源书籍遵循 中文排版指南 规范。 如何贡献 13
Page
14
简介 本章将带领你进入 Docker 的世界。 什么是 Docker? 用它会带来什么样的好处? 好吧,让我们带着问题开始这神奇之旅。 Docker 简介 14
Page
15
什么是 Docker Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目, 它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 授权 协议开源,主要项目代码在 GitHub 上进行维护。Docker 项目后来还加入了 Linux 基金会, 并成立推动 开放容器联盟(OCI)。 Docker 自开源后受到广泛的关注和讨论,至今其 GitHub 项目已经超过 4 万 6 千个星标和一 万多个 fork。甚至由于 Docker 项目的火爆,在 2013 年底,dotCloud 公司决定改名为 Docker。Docker 最初是在 Ubuntu 12.04 上开发实现的;Red Hat 则从 RHEL 6.5 开始对 Docker 进行支持;Google 也在其 PaaS 产品中广泛应用 Docker。 Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作 系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容 器。最初实现是基于 LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 开始,则进一步演进为使用 runC 和 containerd。 Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极 大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。 下面的图片比较了 Docker 和传统虚拟化方式的不同之处。传统虚拟机技术是虚拟出一套硬件 后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程 直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比 传统虚拟机更为轻便。 图 1.4.1.1 - 传统虚拟化 什么是 Docker 15
Page
16
图 1.4.1.2 - Docker 什么是 Docker 16
Page
17
为什么要使用 Docker? 作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。 更高效的利用系统资源 由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用 率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高 效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。 更快速的启动时间 传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行于宿主 内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约 了开发、测试、部署的时间。 一致的运行环境 开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一 致,导致有些 bug 并未在开发过程中被发现。而 Docker 的镜像提供了除内核外完整的运行 时环境,确保了应用运行环境一致性,从而不会再出现 「这段代码在我机器上没问题啊」 这 类问题。 持续交付和部署 对开发和运维(DevOps)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运 行。 使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过 Dockerfile 来进行镜像构建,并结合 持续集成(Continuous Integration) 系统进行集成测试, 而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合 持续部署(Continuous Delivery/Deployment) 系统进行自动部署。 而且使用 Dockerfile 使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便 运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。 更轻松的迁移 为什么要用 Docker 17
Page
18
由于 Docker 确保了执行环境的一致性,使得应用的迁移更加容易。Docker 可以在很多平台 上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的。 因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行 环境的变化导致应用无法正常运行的情况。 更轻松的维护和扩展 Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的 维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外,Docker 团队同各 个开源项目团队一起维护了一大批高质量的 官方镜像,既可以直接在生产环境使用,又可以 作为基础进一步定制,大大的降低了应用服务的镜像制作成本。 对比传统虚拟机总结 特性 容器 虚拟机 启动 秒级 分钟级 硬盘使用 一般为 MB 一般为 GB 性能 接近原生 弱于 系统支持量 单机支持上千个容器 一般几十个 为什么要用 Docker 18
Page
19
基本概念 Docker 包括三个基本概念 镜像( Image ) 容器( Container ) 仓库( Repository ) 理解了这三个概念,就理解了 Docker 的整个生命周期。 基本概念 19
Page
20
Docker 镜像 我们都知道,操作系统分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像(Image),就相当于是一个 root 文件系 统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu 16.04 最小系统的 root 文件 系统。 Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文 件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像 不包含任何动态数据,其内容在构建之后也不会被改变。 分层存储 因为镜像包含操作系统完整的 root 文件系统,其体积往往是庞大的,因此在 Docker 设计 时,就充分利用 Union FS 的技术,将其设计为分层存储的架构。所以严格来说,镜像并非是 像一个 ISO 那样的打包文件,镜像只是一个虚拟的概念,其实际体现并非由一个文件组成, 而是由一组文件系统组成,或者说,由多层文件系统联合组成。 镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后 一层上的任何改变只发生在自己这一层。比如,删除前一层文件的操作,实际不是真的删除 前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看 到这个文件,但是实际上该文件会一直跟随镜像。因此,在构建镜像的时候,需要额外小 心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理 掉。 分层存储的特征还使得镜像的复用、定制变的更为容易。甚至可以用之前构建好的镜像作为 基础层,然后进一步添加新的层,以定制自己所需的内容,构建新的镜像。 关于镜像构建,将会在后续相关章节中做进一步的讲解。 镜像 20
Comments 0
Loading comments...
Reply to Comment
Edit Comment