当前位置:首页>Docker>Docker是什么

Docker是什么

作者:微学网发布时间:2019-08-05 23:37:11

什么是Docker?

什么是 Docker
恐怕 90% 的人脑子一闪而过的都是那张图:一条鲸鱼背上扛着一堆箱子,图片下方是大大的“Docker”。
Docker 是什么?是鲸鱼? 还是一堆箱子? 或者说是载着箱子的鲸鱼?
什么是docker

Docker官方定义

Docker是一个开源的应用容器引擎,可以轻松的让开发者打包任何应用以及依赖包到一个轻量级的、可移植的、自给自足的容器中。然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

开发者把编译测试通过的容器可以批量地在生产环境中部署,包括 VMS(虚拟机)、bare metal、OpenStack 集群和其他的基础应用平台。容器是完全使用沙箱机制,相互之间不会有任何接口。

顾名思义,Docker 是一个容器引擎,容器且不说,什么是引擎?

汽车的引擎是发动机,有了发动起,汽车才能跑起来。游戏需要游戏引擎(如 Unity3D……),基于引擎的开发,能让游戏动起来。

如官言,Docker 也是一种引擎,基于这个引擎,开发者能让他们开发的应用处于一个有隔离性的、可移植性的容器中,以便于发布于各种机器中而无需考虑兼容性问题。

因此就不难解释,为什么 Docker 的 logo 是一条装着一堆箱子的鲸鱼。

这是因为: Docker 扮演的是图中鲸鱼的角色,而鲸鱼之上的集装箱就是一个个容器,容器中是我们开发的应用程序(不仅限于 Web 应用),每个容器都有自己独立的环境(环境设置、网络、文件系统……),互不干扰。而每个箱子,又可以打包成一个新的镜像,放到其它服务器的 Docker 环境中直接运行,不再需要重复安装程序运行环境。

Docker的组成

  • Docker Client 客户端

  • Docker Daemon 守护进程

  • Docker Image 镜像

  • Docker Container 容器

Docker使用场景

  • Web 应用的自动化打包和发布。

  • 自动化测试和持续集成、发布。

  • 在服务型环境中部署和调整数据库或其他的后台应用。

  • 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

Docker 优点

简化程序

Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker 改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker 中进行管理。

方便快捷已经是 Docker 的最大优势,过去需要用数天乃至数周的任务,在 Docker 容器的处理下,只需要数秒就能完成。

避免选择恐惧症

如果你有选择恐惧症,还是资深患者。Docker 帮你打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。

比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。

节省开支

一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。
不仅解决了硬件管理的问题,也改变了虚拟化的方式。

Docker 核心概念

docker 镜像(Images)

  • 一个只读模板,可以用来创建容器,一个镜像可以创建多个容器

  • Docker 提供了一个很简单的机制来创建和更新现有的镜像,甚至可以直接从其他人那里获取做好的镜像直接使用

  • 可以理解为 Java 中的类

  • 给电脑安装 Windows 系统需要有 Windows 镜像,因此给 Docker 安装容器也是需要镜像的,所以,通俗一点,镜像就类似于我们日常中的安装软件,甚至说是操作系统镜像更为形象点。

docker 容器(Container)

  • 容器是从镜像创建的运行实例,也就是镜像启动后的一个实例称为容器,是独立运行的一个或一组应用。

  • 顾名思义:就是装东西的器皿,在 Docker 中,容器就是装载我们的应用程序的器皿,在 Docker 的 logo 中,容器就是一个个箱子。我们知道,运行 JavaWeb 应用程序需要有 Tomcat ,那么我们就需要创建一个 Tomcat 的容器,才能把我们的程序放进去运行。

  • docker 利用容器来运行应用,他可以被启动、开始、停止、删除,每个容器都是相互隔离的、保证安全的平台。

  • 可以把容器看做是一个简易版的 Linux(包括 root 用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

  • 可以理解为 Java 中通过类创建的实例。

容器和镜像有什么关系?

网上说是类和对象的关系,没错,但是这样的比喻没什么实际用处。

我们知道:要运行一个 Web 程序,需要有个 Tomcat 环境,需要Tomcat 环境,那就下载一个 Tomcat 解压出来,然后把 Web 程序放入 Tomcat 的 Webapps 中启动即可。

那么在 Docker 中要运行一个 Web 程序,就需要有 Tomcat 容器,需要 Tomcat 容器,就得去下载 Tomcat 镜像(也可以自己构建),把镜像 pull 下来之后,运行起来,就是一个 Tomcat 容器,此时把 Web 程序至于 Tomcat 挂载的数据目录 Webapps 中既可以运行。

所以 Docker 中,容器和镜像的关系更像是一种动静的关系,也就是说,存于仓库中的镜像是一个死的软件,而运行起来的容器则像是一个正在运行的程序(进程)。

docker 仓库(Resoisitory)

  • 仓库是集中存放镜像文件的场所,类似 git 代码仓库等。

  • 仓库(Respository)和仓库注册服务器(Registry)是有区别的。仓库注册服务器一般存放多个仓库,每个仓库又有多个镜像,每个镜像又有不同的标签(tag)。

  • 仓库分为公开仓库(public)和私有仓库(private)两种形式。

  • 最大的公开仓库是 Docker Hub,国内的公开仓库有阿里云等。

  • 可以在本地网络创建一个私有仓库。

  • 当创建好自己的镜像后,可以通过 push 命令把它上传到公开或私有仓库。

  • 仓库的概念类似 Git,仓库注册服务器可以理解为 GitHub 这种托管服务。

docker 主机(Host)

  • 一个物理或虚拟的机器用来执行 Docker 守护进程和容器。

docker客户端(Client)

客户端通过命令行或其他工具使用 Docker。