自 2013 年起,随着 Docker 的正式面世,容器技术迅速成为了基础技术领域中的热门。而在近两三年中,随着容器编排领域的混战结束,Kubernetes 已经成为了容器编排领域事实上的标准。
有一些人认为 Kubernetes 的出现取代了 Docker
但事实上,Docker 与 Kubernetes 是相辅相成的。

当 Kubernetes 使用 Docker 作为容器运行时,用来启动应用;当 Docker 容器规模变大时,自然是需要有容器编排工具进行管理的。

引用最近一次的网络研讨会后的文章内容:
In fact, Kubernetes is better with Docker. And Docker is better with Kubernetes.

无论在使用 Docker 或是 Kubernetes 亦或者是使用基于这些技术的其他衍生技术时,都有可能会遇到一些意料之外的情况,当问题发生时,我们总是希望可以快速定位问题,并且从根本上解决问题。

一般情况下,上层的问题比较容易解决,但如果问题发生在运行时 Docker 或容器上时,如果没有系统性的知识,很难从根本上解决问题。

容器是什么

Docker 在大多数人眼中几乎是容器(Container)的代名词,即使是现在我也会常听到有人说“我有几个 Docker 跑 xx 服务” 类似这样的话,无疑 Docker 引领了容器的时代。
一直在提容器,我们不如深入一点先来探究下容器到底是什么?
在 Docker 官网上对容器的描述是:“A standardized unit of software”——软件的标准单元,并没有什么更详细的内容了。多数人对容器的看法也都停留在很浅显的认识:认为容器是轻量级的虚拟机,因此后来也就有一段时间有人推“富容器”技术。

说白了,容器其实是在某台机器上的“一组”进程,当然这组进程可能只有一个;它们有相同的特性,当然所受的限制也是相同的;既然叫做容器,很自然的我们认为它们与外界可以进行隔离 / 应该有一个分界线。

Docker 的优势

Docker 一开始能吸引众多用户,其中一个很重要的因素就在于它上手使用很简单。在安装完 Docker 之后,一行命令语句 docker run hello-world 便已经运行了一个容器,一切看着都及其简单。

2008 年到 2013 年这之间大约 5 年左右的时间,以 LXC 为首的容器技术并没有得到类似 Docker 出现后那么广泛的普及,我在之前的线下演讲中也提到过这个点,最主要的原因在于 LXC 太偏向技术了,使用 LXC 有一定的门槛,导致了好多人的退却。

Docker 则提供了简单易用的工具, 优雅灵活的容器生命周期管理,以及镜像的构建,分发等配套设施,这为后期的推进提供了很多的便利。
再加上 Docker 的策略很好,以及在 Docker 公司内部也有大量的实践经验,因此这些事情做起来也都很顺畅了。

使用 Docker 面临的问题

我们要正视 Docker 是一个已经 6 岁的项目了,自它 1.0 发布以来已经 5 年之久了,因此它在生产环境中已经得到了大量的实践和验证,虽然不可避免的也会存在一些历史遗留问题,好在也逐步改进中。

在实际的生产使用中,我们所运行的容器包含着业务代码,生产环境的网络、系统等因素也都很复杂。一旦出现问题,如何才能最高效地定位并解决问题,并且保证之后不再有类似的问题发生?

要做到这些,就需要对 Docker 技术有足够的了解。在大型公司中,都有专职负责基础支撑技术的开发或运维人员,而在中小型企业可能就很少有这类团队或者压根没有,需要开发人员自行解决。

另一方面,不一定只是在容器运行过程时才会遇到问题,我们可能在构建镜像的时候就已经遇到了各种各样的问题:
  • 构建的镜像体积为什么这么大
  • Pull 镜像为什么这么慢
  • 新构建的镜像为什么不生效
  • 构建镜像为什么这么久

现在很多岗位的招聘需求上都有写需要了解或者掌握 Docker,或者将掌握 Docker 等容器技术作为加分项目,并且这个要求不局限于运维或者后端开发等岗位。

在我们的实际使用中,大家可能遇到各种各样的情况和问题,那遇到 Docker 相关的问题,如何解决呢?
或者说,如何才能真正掌握 Docker 这么技术,在使用中游刃有余呢?
我在 GitChat 开设了《Docker 核心知识必知必会》专栏,其结合了我多年的 Docker 源码研究和实际填坑的经验,同时会深入部分 Linux 内核的原理和源码中,我希望通过这个专栏内容的学习你能有所收获。

扫码查看《Docker 核心知识必知必会》

专栏介绍

我希望借由这个专栏,将 Docker 容器技术的本质和思想与我在开发和运维 Docker 过程中对其原理和实践经验的总结讲清楚,并将结合着实践和核心特性的原理,加深对 Docker 容器技术的理解。
因此,我把专栏划分成了三大模块:
一、Docker 入门:这个模块分成了三篇内容。
第一篇,了解 Docker 容器技术生态的发展脉络;
第二篇,是为刚入门 Docker 的读者准备的,也是为后续章节进行铺垫;

第三篇,是很多读者或公司都常会困惑的问题,Docker 与 Linux 内核兼容性如何,要上生产环境该选择哪个版本?我会在这一篇中与你分享,让你不再困惑。

二、Docker 核心特性:这个大模块围绕 Docker 的核心知识点,拆分成了 7 大部分。
分别是容器、镜像、CI/CD、架构、存储、安全和网络。这些是该专栏的核心内容,在这部分内容中,我将基本按照从实践到原理的方式进行组织,让你从根儿上知道如何用,以及为什么这么用。
  • 在容器篇,我会先给你介绍容器生命周期管理相关的内容,那你对容器的使用有个基本认识;之后会对容器资源进行管理;并对容器的核心进行深入剖析;最后动手来自己写容器。
  • 在镜像篇,将介绍镜像完整的生命周期管理;镜像是如何构建与分发的;如何使用 Dockerfile 进行镜像构建;并介绍 Docker 的下一代构建系统是如何提速近 10 倍的;接下来结合我的实际镜像为你介绍 Dockerfile 的优化和最佳实践;最后分别深入源码为你介绍镜像构建、分发的原理,以及认证流程和原理。
  • 在 CI/CD 篇,会介绍如何将 Docker 与 CI/CD 结合,同时介绍适用于生产环境使用的 CI/CD pipeline,希望能为读者建设 CI/CD 提供一些启发。
  • 架构篇中我会结合源码介绍 Docker 的核心架构,以及其是如何协作的;Docker 提供了一种可扩展的 Plugin 机制,在特定场景下使用 Plugin 扩展 Docker 也是一种不错的选择;接下来会结合实际经验介绍容器监控和日志方面的具体实践方案,希望能为读者在实际使用中提供一个参考;最后会与读者分享我所总结的 Docker 相关问题的定位及调试手段 正确的方法能让你排查问题的效率翻倍。
  • 存储篇主要介绍 Docker 中 volume 的使用;以及如何进行数据备份和恢复;最后会深入内部介绍现在 Docker 最推荐的 Overlay2 存储驱动的工作原理。
  • 安全篇会涉及镜像和容器运行时的安全;以及会涉及一些的 Linux 内核安全相关的知识,详细介绍如何利用 Linux 内核的安全模块为 Docker 保驾护航。
  • 网络篇除了介绍基础网络知识外,还会介绍如何定制 bridge 网络;iptables 始终是一个很核心的知识点,我会为读者将 Docker 与 iptables 梳理清楚,以及如何自定义的进行网络管理;最后详细介绍了 docker-proxy,Docker 内部 DNS 以及 Docker 的核心网络知识,让网络不再成为一个拦路虎。

三、生态扩展:不得不说“开源”是 Docker 成长迅速的关键。

在这个模块中,我将详细介绍 Docker 与 Kubernetes 间的联系,以及容器生态中的其他组件;与读者分享如何参与到 Docker 容器生态内,当然这里也会涉及到 Docker 现在的代码组织相关的内容;最后将与读者探讨 Docker 生态未来的走向。

对应的知识图谱如下:

专栏作者介绍

张晋涛:网易有道资深运维开发

《Kubernetes从上手到实践》作者、PyConChina 讲师和出品人、Kubernetes 组成员,多个 Docker 官方镜像贡献者,对 Docker、Kubernetes 及相关生态有大量实践及深入源码的研究,Kind (Kubernetes In Docker)项目的长期贡献者。

内容亮点

  • 6 个维度系统性解读 Docker 核心功能

  • 实践与源码相结合

  • 深入 Linux 内核,剖析容器所需关键技术

  • 生产环境 Docker 的使用和填坑经验总结

适宜人群

  • 容器运维或开发工程师

  • 准备使用或正在使用 Docker 的前后端工程师

  • 准备面试容器相关技术岗位的应试者或面试官

  • 调研 Kubernetes 等云原生技术的工程师

点击阅读原文,了解 Docker 专栏。

容器 10 年,Docker 6 年相关推荐

  1. 第 10 章 容器监控 - 078 - Docker 最常用的监控方案

    Docker 最常用的监控方案 当 Docker 部署规模逐步变大后,可视化监控容器环境的性能和健康状态将会变得越来越重要. Docker 自带的几个监控子命令: ps .top .stats 功能更 ...

  2. 基于国产UOS操作系统第10章-docker容器

    容器 容器技术已经成为应用程序分装和交付的核心技术 容器技术内核组成(Cgroups-资源管理 NameSpace-进程隔离) 由于是在物理机器上实施隔离.启动一个容器.可以像启动一个进程一样快速 d ...

  3. Docker容器虚拟化技术---Docker高级实战(DockerFile)2

    Docker容器虚拟化技术-Docker高级实战(DockerFile) DockerFile是一个文本格式的配置文件,用户可以使用DockerFile来快速创建自定义的镜像. 1. DockerFi ...

  4. Docker容器虚拟化技术---Docker安装和操作1

    一.Docker安装 Docker在主流的操作系统和云平台上都可以使用,包括Linux操作 系统(如Ubuntu.Debian.CentOS.Redhat等).MacOS操作系统和 Windows操作 ...

  5. 一篇文章搞懂最流行的容器化技术Docker

    说在前面的话 本篇文章什么样的人适合看? 刚入门学习docker的,看完对docker会有一个通篇的认识 有经验的人,在知识大爆炸时代,技术很多,没有人能记住所有东西,适合复盘的时候看 我想说的话:这 ...

  6. 容器化技术Docker由入门到实战

    目录 对docker的理解 能做什么 传统虚拟机 容器虚拟化技术 Docker 和传统虚拟化方式的不同之处 Docker的安装 前置环境 Vagrant虚拟机环境 ​编辑使用Vgrant安装虚拟机 虚 ...

  7. 后端技术杂谈10:Docker 核心技术与实现原理

    Docker 核心技术与实现原理 30 NOV 2017  docker  namespaces  cgroups  unionfs  aufs  server Namespaces 进程 网络 挂载 ...

  8. 应用容器引擎:docker的简介与安装

    目录 Docker概述: Docker和传统虚拟化技术的对比 部署Docker的开发环境 Docker常用命令 Docker的优点: 持续部署与测试 多云平台 环境标准化和版本控制 隔离性 安全性 结 ...

  9. 容器技术(Docker)

    容器技术(Docker) 容器技术的核心就是通过对资源的限制和隔离把进程运行在一个沙盒中.并且这个沙盒可以被打包成容器镜像(Image),移植到另一台机器上可以直接运行,不需要任何的多余配置.其中do ...

最新文章

  1. 20145307《信息安全系统设计基础》课程总结
  2. python pygame模块按键延迟_pygame模块中键控命令不能实现方块移动,求解
  3. qemu 安装windows_BIOS+MBR启动引导安装双系统
  4. 前端学习(512):两列布局的第一种方式的优缺点
  5. python提取网页中p标签中的内容_使用Python进行爬虫的初学者指南
  6. C++ 拷贝构造 与 赋值运算符重载
  7. php 判断百度浏览器版本,jquery获取浏览器类型和版本号的方法
  8. mybatis之OGNL表达式
  9. 不用U盘,给自己的电脑重装一个win10系统
  10. pmp各种比较容易混淆的图
  11. 未来计算机的图片大全集,小学生未来的机器人儿童画图片大全
  12. CGMM 基于上下文的马尔可夫模型
  13. 知识融合中几种计算文本相似度的方法(代码)
  14. 怎么修复SONY索尼相机摄像机断电死机损坏的MP4视频文件
  15. 卡特兰数Catalan number的应用
  16. vue2 视频下载本地,图片压缩包下载
  17. 芯片验证学perl还是python_科学网—用python或perl语言简单验证RSA算法 - 康建的博文...
  18. scrapy简单入门 - 爬取伯乐在线所有文章
  19. FBX格式转换为GLTF/GLB格式
  20. 京东上货助手批量抓取淘宝商品步骤

热门文章

  1. UIImagePickerController PAD /IPHONE 上注意事项
  2. 杭电 1021 找规律
  3. Fuel 9.0安装Openstack网络验证失败解决
  4. 利用VB.NET绘制简易表白小程序
  5. 全国高校计算机能力挑战赛真题(二)
  6. position: relative_设置relative 后再设置定位 原有位置空白
  7. 力扣—— 51. N 皇后
  8. 计算机控制系统的实时控制应用,计算机控制系统实时性的提高策略
  9. 存储过程、游标和触发器
  10. Ubuntu安装GoogleTest框架并测试C++代码