相信在平时我们经常会听到Docker这个名词,如今Docker的使用已经非常普遍,特别在一线互联网公司。使用Docker技术可以帮助企业快速水平扩展服务,从而到达弹性部署业务的能力。在云服务概念兴起之后,Docker的使用场景和范围进一步发展,如今在微服务架构越来越流行的情况下,微服务+Docker的完美组合,更加方便微服务架构运维部署落地。
首先,我们需要知道什么是Docker。
官方解释是,Docker 是一个开源的应用容器引擎,让开发者可以打包应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,容器之间是相互隔离的。
正如这个Docker 的 Logo,把大鲸鱼看成Linux操作系统,把各种货物看成是要交付的应用程序。
原本要将各种各样形状、尺寸不同的货物放到大鲸鱼上,你得考虑每件货物怎么安放(应用程序依赖的环境),还得考虑货物和货物是否能叠起来(应用程序依赖的环境是否会冲突)。
现在使用了集装箱(容器)把每件货物都放到集装箱里,这样大鲸鱼可以用同样地方式安放、堆叠集装了,省事省力。Docker就是这整套机制啦。
那么,我们为什么要使用 Docker呢?
-
更高效的利用系统资源
容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。 -
更快速的启动时间
Docker 容器应用,直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。 -
持续交付和部署
对开发和运维(DevOps)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过 Dockerfile 来进行镜像构建,并结合持续集成(Continuous Integration) 系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合持续部署(Continuous Delivery/Deployment) 系统进行自动部署。
而且使用 Dockerfile 使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。 -
更轻松的迁移
Docker 可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上。 -
更轻松的维护和扩展
Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。
对比传统虚拟机总结
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为 MB | 一般为 GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
那么Docker与传统虚拟机(VM)到底有什么区别呢?
下面的图片比较了 Docker 和传统虚拟机的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统虚拟机是一个运行在宿主机之上的完整的操作系统,虚拟机运行自身操作系统会占用较多的CPU、内存、硬盘资源。
在学习Docker之前,我们必须必须了解一些基本概念
Docker是CS架构,主要由下面三部分组成:
- Docker daemon: 运行在宿主机上,Docker守护进程,用户通过Docker client(Docker命令)与Docker daemon交互
- Docker client: Docker 命令行工具,是用户使用Docker的主要方式,Docker client与Docker daemon通信并将结果返回给用户,Docker client也可以通过socket或者RESTful api访问远程的Docker daemon
- Docker hub/registry: 共享和管理Docker镜像,用户可以上传或者下载上面的镜像,官方地址为registry.hub.docker.com/,也可以搭建自己私有的Docker registry。
了解Docker的组成,我们再来了解一下Docker的两个主要概念:
- Docker image: 镜像是只读的,镜像中包含有需要运行的文件。镜像用来创建container,一个镜像可以运行多个container;镜像可以通过Dockerfile创建,也可以从Docker hub/registry上下载。
- Docker container: 容器是Docker的运行组件,启动一个镜像就是一个容器,容器是一个隔离环境,多个容器之间不会相互影响,保证容器中的程序运行在一个相对安全的环境中。
简而言之,就是镜像就相当于打包好的版本,镜像启动之后运行在容器中,仓库就是装存储镜像的地方。
下一讲,我们将继续介绍如何在Ubuntu下安装Docker。
参考:
Docker — 从入门到实践
Docker系列之一:入门介绍
Docker(一):Docker入门教程
知乎:如何通俗解释Docker是什么?