01 Docker基础知识入门

  • Docker是什么
  • Docker有哪些优势
  • Docker与传统虚拟化
  • Docker与传统虚拟机结合
  • Docker面向的对象
  • Docker应用场景
  • 本章重点回顾
  • 本章参考资料

徐亮伟, 江湖人称标杆徐。多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。擅长Web集群架构与自动化运维,曾负责国内某大型电商运维工作。
个人博客" 徐亮伟架构师之路"累计受益数万人。
笔者Q:552408925、572891887
架构师群:471443208

Docker是什么

Docker已成为世界领先的软件容器平台,IT技术人员都开始使用Docker来完成各种各样的任务。

开发人员使用Docker来解决与同事进行代码协作时出现的环境不一致问题。
运维人员使用Docker在独立的容器中运行和管理应用程序,以获得更好的计算密度。企业使用Docker构建灵活的软件,可以更快、更安全地运行新功能,并且Docker对于`Linux、Windows Server·系统平台程序都有很好的支持。

为什么要使用Docker

  容器不捆绑完整的操作系统,只需要使用业务相关所需要的依赖库和配置。这使得Docker更高效,轻便,安全,从而保证Docker容器无论在哪里部署,都能正常的运行。
  Docker是通过操作系统层的虚拟化实现隔离,所以Docker在运行时可以有效的划分系统资源(内存、CPU等)到独立的组中,这样可以更高效的利用系统资源,同时不在需要类似传统VM虚拟机提供额外的操作系统开销,以便提高系统资源利用率。

Docker有哪些优势

Docker是基于容器实现,容器又是基于镜像组成的,镜像又是一个轻量级且独立存在的可执行的软件包,包括运行它所需要的所有内容:代码、运行环境、系统工具、系统库、以及自定义配置。
Docker同时适用于Linux或Windows的应用程序,无论环境如何,Docker运行的服务将始终运行,并会将其软件与其周围环境隔离开来。
如图1-1:开发环境之间的差异,并有助于减少在相同基础架构上运行不同软件的团队之间的冲突。

图1-1 减少开发环境差异

下面我们总结一下Docker的三大优势:

  • 更轻量:运行在同一台机器上的Docker容器可复用该机器的操作系统资源,例如CPU、内存、硬盘文件等,最大限度的利用了操作系统的资源。
  • 更标准:Docker容器基于开放标准,并运行在所有的Linux Windows、MacOS以及任何基础设施,包括裸机、虚拟机、云端服务器。
  • 更安全:Docker容器将应用程序从底层和底层隔离开来。Docker提供强大的资源隔离,以将应用程序问题限制在单个容器而不是整台机器。

Docker与传统虚拟化

作为一种新兴的容器虚拟化,Docker又与传统的虚拟化方式具有哪些优势呢?

1.Docker部署容易,传统虚拟机部署比较复杂。
2.Docker在秒级启动,传统虚拟机需要分钟启动,在高并发峰值,速度高于一切。
3.Docker的镜像在MB,同时占用磁盘空间小,并且不依赖物理机环境运行,传统虚拟机需要运行一个完整的操作系统,每个操作系统至少占用5GB的磁盘空间,当集群在大规模部署时,体积小就代表更大的并发以及调度转发量。
4.Docker注重操作系统之上的应用服务,传统虚拟机更加注重虚拟主机的操作系统。
5.Docker的管理方式是单容器单进程,传统虚拟机需要完整的系统管理。
6.Docker对系统资源的利用率很低,一台主机上可以同时运行数千个容器,传统虚拟机启动虚拟机会占用部分资源,一台主机根据物理机器本身资源进行合理分配虚拟机。

下图1-2更生动的展示了Docker与虚拟机对比及优势

图1-2 docker与虚拟机对比及优势

从图1-2可以看到,容器和虚拟机具有类似的资源隔离和分配方式,但功能不同,因为容器虚拟化的是操作系统而不是硬件,整个实现方式更加简化,同时也可以在单台服务器上运行更多的容器包括应用,使容器更加便携和高效。

Docker与传统虚拟机结合

当然Docker是可以和虚拟机结合起来使用,将容器部署在虚拟机上,会使得管理应用程序方面提供了很大的灵活性。

1.Docker容器
容器是应用层的一个抽象,它将代码和依赖环境以及相关库集成在一起,多个容器可以在同台机器上运行,并与其他容器共享操作系统内核,每个容器都以用户空间中的隔离进程运行。容器占用的空间少于虚拟机,(容器镜像的大小通常为几十兆到几百兆),并且启动速度基本是在秒级。

2.传统虚拟机
虚拟机(VM)是将一台服务器转换成许多服务器的物理硬件的抽象。虚拟机管理程序允许多个虚拟机在单个计算机上运行。每个虚拟机包括操作系统的完整副本,一个或多个应用程序,必要的二进制文件和共享库,占用数十GB。并且启动速度基本是在分钟级。

图1-3表示Docker与传统虚拟机结合使用的方式

图1-3 Docker与传统虚拟机结合使用的方式

Docker面向的对象

Docker的出现为IT技术人员提供了很多便利,使很多技术痛点得到了有效解决,深受广大IT人员的欢迎,下面我们需要了解Docker主要面向的对象有哪些。

如图1-4 展示了Docker主要面向的对象

图1-4 Docker面向的对象

1.面向应用
通过将现有应用程序包装到容器中,并改进应用的安全性,同时获得云可移植性,更重要的是这一切并没有更改应用程序的代码。

2.面向开发
Docker自动配置和设置开发环境重复性工作,以便开发人员可以专注于更重要的事情,开发出更加优秀的软件。
使用Docker的开发人员不必安装和配置复杂数据库环境,也不用担心在不兼容的语言工具链中进行版本切换。如Java、Python、PHP。

3.面向测试
使用Docker模拟生产环境进行测试和调试应用程序,平均测试速度相比传统虚拟机测试速度高出13倍,使用Docker的测试团队可以快速的进行软件测试,从而更快的为开发提供需要修复的Bug。

4.面向运维
Docker是运维团队无往不利的秘密武器,通过Docker技术可以实现自动、安全、可移植地构建、测试、发布和部署应用程序,而不会有任何意外。更无须过多的运维手册文档和后期需要大量维护的注释与陈旧信息。

使用Docker的运维团队都知道镜像在开发环境和生产环境中都是一样的。Docker可以实现轻松部署,识别和解决问题,并降低整体运维成本。同时减少部署带来停机维护的时间,并加速新功能的修补以及迭代,同时也可以实现快速回滚项目。

5.面向架构
Docker容器可以在几秒钟内轻松扩展上万个节点,便于扩展应用程序服务,以满足高峰值需求,并在峰值下降时,容器会自动缩减,节省不必要的资源消耗。

6.面向团队
简化开发人员和运维人员之间的协作,更快地部署新功能及快速的修复生产环境。经常迭代新版本的开发人员可以发挥创造力,开发出令人敬畏的软件。

7.面向企业
Docker支持在云端工作以及企业内部部署,并支持传统应用和微型服务架构。
使用Docker构建网络、安全、及容器的编排,并将其从开发到生产进行统一管理。
Docker使所有应用程序能够以最佳成本进行敏捷开发,并实现快速云部署和安全化。

Docker应用场景

了解了Docker面向的对象后,可能还不太清楚Docker适用于哪些应用场景。

如下图1-5 Docker八大应用场景

图1-5 Docker八大应用场景

1.简化配置, 统一测试、生产环境配置,通过镜像快速启动部署
2.代码管理, Docker针对开发、测试、生产、灰度、以及正式环境进行快速部署、迁移、扩展。
3.开发效率, 相对开发人员而言,直接使用运维人员打包好的镜像启动容器即可开始日常开发。
4.应用隔离, 相对于虚拟机的完全隔离会占用系统额外的资源,Docker基于应用隔离的模式相比虚拟机来说会节约更多的系统资源。
5.服务整合, 单台服务器可部署多容器环境,提高服务器整体资源利用率。
6.调试能力, 容器内置调试命令工具,便于开发人员快速调试和迭代。
7.多租户, 每个租户的应用层运行的多个实例创建隔离的环境,既简单,同时成本低廉。
8.快速部署, 基于已有镜像构建,无需启动操作系统,实现秒级部署

Docker其他应用场景
除了如上的八大应用场景外Docker还能应用于基础设施、混合云、微服务、Devops等场景。

1.基础设施

通过在同一台服务器上运行的多个应用程序,并集中化管理应用程序提高整体的密度。Docker通过整合基础设施,提高利用率和加速云迁移来降低成本。

2.混合云

从私有数据中心到公共云基础设施,Docker允许应用程序从一个基础设施到另一个基础设施完全可移植,而无需重写代码。加速迁移到云端,实现混合或多云环境。

3.微服务

容器简化了开发和部署使用微服务架构模式设计的应用程序。

4.DEVOPS

通过快速反馈迭代,不断的循环加速软件的开发及交付,同时避免了应用程序之间互相冲突,并提高开发人员的生产力。

本章重点回顾

什么是Docker
为什么要使用Docker
Docker有哪些优势
Docker与传统虚拟化对比
Docker与传统虚拟机结合使用
Docker三大优势(更轻量、更标准、更安全)
Docker面向的对象(应用、开发、测试、运维、架构、团队、企业)
θ Docker各种应用场景

本章参考资料

https://www.docker.com
https://www.docker.com/what-docker
https://www.docker.com/what-container
https://www.docker.com/get-docker
https://docs.docker.com
https://docs.docker.com/get-started/#prerequisites