3.docker虚拟化技术-docker系统架构

前言

在上一篇博客docker引擎中我们介绍了

你通过CLI(命令行工具)输入docker命令,REST API(通信接口)接收命令后,指挥docker daemon(docker 守护进程)去管理image(镜像),container(容器),network(网络),data volumes(数据卷)的生命周期。

看到这句话,我们不禁会产生几个疑问?

  • docker 命令是什么?
  • docker 守护进程如何管理镜像,容器等?
  • 镜像是什么?
  • 容器是什么?
  • 数据卷又是什么?

带着这些疑问我们再来看一幅图

docker系统架构

3.docker虚拟化技术-docker系统架构

名词解释

docker仓库
docker是用来存放docker镜像的,有公有仓库和私有仓库之分,如果大家知道maven便不难理解仓库这个词的含义,docker镜像也可以理解为仓库中存放的依赖(jar包)。

docker镜像
感性理解:我们先把docker镜像理解为Java中类(class)的概念。

docker容器
感性理解:我们先把docker容器理解为Java中对象的概念。

图片解读

从在上面那副图中,我们可以解读到:
docker引擎与docker仓库的关系
我们把Client,docker host看做是docker引擎,其中Client便是docker引擎的CLI(命令行工具),docker引擎会与docker仓库进行交互,也就是说docker引擎可以从docker仓库中拉取镜像(这个过程参考maven拉取依赖的过程)。

docker仓库中存放了什么
我们从图片中看到了以Linux为内核的Ubuntu操作系统橙色圆形图标,以Linux为内核的centos操作系统Nginx等。

我们知道在maven仓库中存放了各种与编写程序相关的依赖,比如springmvc,mybatis等。而docker中则存放了许多与程序运行相关的软件,比如操作系统(Ubuntu,centos),负载均衡器(Nginx)。所以使用maven可以使我们方便快捷的搭建一个程序编写的环境,不会在受到因使用不同编辑器而导致程序结构不同的影响,同样,docker也可以使我们方便快捷的搭建一个程序运行的环境,不会因部署环境的差异而导致无法正常运行程序的问题

真正实现一次编译,到处运行
我在初识docker中介绍docker时,说docker真正实现了一次编译到处运行,我们把目光转向docker仓库,如果你把你的项目做成了一个docker镜像,发布到仓库中(发布的仓库一般是你的私有仓库,不是官方仓库),只要在电脑(服务器)中安装了docker,就可以运行你发布的镜像了。

镜像与容器的感性认知
镜像就像Java中类一样,而容器就是Java中的对象一样,我们可以按照镜像(类)的样子去构建(new)一个容器(对象),这个容器就像对象一样可以有多个,并且每个容器之间也会向对象一样有自己的内存空间,操作某个容器不会影响其他容器。

数据卷
通过docker技术可以直接操作宿主机的文件,通话数据卷实现docker与宿主机文件的共享。

docker仓库解决的问题
在当前宿主机上构建的镜像如何在其他主机上运行?就像是人家写的mybatis分页插件为什么在你的程序中可以使用一样,因为它发布到了maven仓库。