【Docker】基础知识入门

79 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情

上节【Docker】安装及基础用法以Nginx镜像为例,介绍了Docker的一些基础命令和用法,本章带大家一起来了解 Docker与虚拟机的区别以及Docker的基础知识入门。

Docker与虚拟机的区别

虚拟机属于虚拟化技术,Docker容器技术,也是一种虚拟化技术,但是它们又存在着区别。首先来了解下Docker与虚拟机的区别。通常在Windows系统下,想要运行其他系统,可以通过VMware、virtualBox等工具创建虚拟机来安装Linux系统,然后在虚拟机的Linux系统中安装各类应用,下面这个图可以很清楚的看出他们的区别:

主要总结下来有以下几点:

  • 容器与容器之间只是进程的隔离,而虚拟机是完全的资源隔离
  • 虚拟机的启动可能需要分钟级别,Docker启动是秒级
  • 容器使用宿主操作系统的内核,而虚拟机使用完全独立的内核

Docker介绍

正是因为下面提到的虚拟机技术缺点:

  • 资源占用十分多
  • 冗余步骤多
  • 启动很慢!

因此诞生了容器化技术:容器化技术不是虚拟出一个完整的操作系统,容器内的应用是直接运行在宿主机的内核,容器是没有自己的内核的,也没有虚拟硬件,所有就轻便了,每个容器间是相互隔离,每个容器内都有一个属于自己的文件系统,互不影响。

下面介绍通过早期开发/运维的例子,让大家更好的了解Docker解决了什么问题:

  • 应用更快速的交付和部署

    传统:开发伙伴在开发环境开发联调完成后,将安装文档、帮助文档等提供给测试伙伴,由测试伙伴在测试环境根据提供的安装文档,帮助文档等搭建测试环境;测试完毕后,交由运维伙伴在生产环境中根据提供的安装文档,帮助文档等完成部署和发布。这个阶段,最容易出现的问题就是"开发环境是好的,测试环境怎么不行了;怎么测试环境是好的,生产环境就不行了"。包括有些项目需要交付给第三方的,也会出现"怎么在第三方服务器上就不行了"这种问题,为了保证可以运行,早期的解决方案的,会直接将测试完成的整个操作系统进行打包,然后在第三方的服务上直接安装操作系统。

    Docker:开发伙伴在开发环境安装Docker,将服务全部放在容器中进行运行,开发调试完成后,直接制作成容器镜像,部分公司会有自己的容器镜像仓库,可以将制作完成的镜像上传,然后测试伙伴同样在测试环境安装相同版本的Docker,然后从仓库拉取对应的镜像在容器中运行,当测试完毕后,运维伙伴通过只需要拉取对应的镜像在生产的容器中运行。因此不再需要复杂的安装文档和帮助文档了,因此这些步骤都已经在镜像中完成了,只要安装了Docker,就可以启动。

  • 更便捷的升级和扩容

    在Docker上想要升级,可以直接拉取最新版本的镜像启动即可,扩容的话,只需要在安装了Docker的服务器上拉取镜像启动即可

  • 更简单的系统运维

    正是因为每个环境都是运行的同一个镜像,因此每个环境都是高度一致的。

  • 更高效的计算资源利用 Docker是内核级别的虚拟化,可以在一个物理机上运行很多的容器实例,服务器的性能可以被压榨到极致。

接下来介绍Docker中最常见的三个名词镜像容器仓库

  • 镜像(Image) Docker镜像就相当于一个模板,可以通过这个模板来创建多个容器

  • 容器(Container) Docker利用容器技术,独立运行一个或一组应用,容器是通过镜像来创建的

  • 仓库(repository) 仓库就是存放镜像的地方,仓库分为公用仓库和私有仓库,通常公司内部会搭建自己的私有仓库

从图中可以看出,Dokcer是C/S架构,Docker的守护进程运行在宿主机上,通过Socket从客户端访问,DockerServer接收到Docker-Client的命令,就会执行执行这个命令,例如docker run命令,DockerServer接收到命令后,检查是否存在镜像,不存在的话,则从仓库进行拉取,然后根据镜像得到容器运行在Docker中。