Docker简介
备注:参考网上知识点及梦学谷教育课程整理
Docker是什么?
Docker是一种容器技术,可以使项目软件带环境安装,避免出现"它在我的机器可以正常运行"的问题。
容器技术
容器与虚拟机有所不同,虚拟机通过虚拟软件中间层将一台或者多台独立的虚拟机器运行在物理硬件之上。而容器则是直接运行在操作系统内核之上,是进程级别的,并对进程进行了隔离,而不是模拟一个完整的操作系统。因此,容器虚拟化也被称为“操作系统级虚拟化”,容器技术可以将软件需要的环境配置都打包到一个隔离的容器中。让多个独立的容器高效且轻量的运行在同一台宿主机上。而Docker就是为了实现这一切而生的。
Docker与虚拟机的不同
- 本质区别
虚拟机是在本机的系统之上通过虚拟机软件申请到虚拟硬件资源,在虚拟硬件之上再安装虚拟机系统,虚拟机之上再部署应用,而容器是进程级别的,容器引擎只是运行在操作系统内核上,容器内可部署多个应用,所有的容器共享主机内核,内核通过创建多个镜像来隔离不同的app进程,由于内核是共享,本身linux image也不大,性能损耗几乎可以不计,而且内存占用也不大,大大节约了设备成本。
我的理解就是相比较虚拟机而言去掉了很多冗余的功能,比如说我现在只是想睡个午觉,实际上只需要一把躺椅就好了,容器技术就好比给了你一个树荫,一把躺椅,OK,简单快速,资源消耗小。虚拟机技术就好像是要给你建一栋别墅,门窗空调粉刷花园巴拉巴拉,然后在建好的院子里的树荫下给你放了一把躺椅。
- 使用区别
容器: 体积小、启动快(秒级)、资源占用少(只占用需要的资源)
Docker容器架构
Docker 客户端和服务器
Docker是一个客户端-服务器(C/S)架构程序。Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。Docker提供了一个命令行工具和一整套RESTful API。你可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地的Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程。
Docker 镜像(Image)
镜像(Image)是Docker中的一个模板,是一系列的指令。通过 Docker镜像 来创建 Docker容器,一个镜像可以创建出多个容器。镜像与容器的关系类似于Java中类与对象的关系。镜像体积很小,非常“便携”,易于分享、存储和更新。
Docker容器(Container)
容器(Container)是基于镜像创建的运行实例,一个容器中可以运行一个或多个应用程序(jdk+开发的java应用程序)。Docker 可以帮助你构建和部署容器,你只需要把自己的应用程序或者服务打包放进容器即可。我们可以认为,镜像是Docker生命周期中的构建或者打包阶段,而容器则是启动或者执行阶段。可以理解容器中有包含:一个精简版的Linux环境 + 要运行的应用程序。
Docker 仓库(repository)
仓库(Repository)是集中存放镜像文件的场所。有时候会把仓库(Repository)和仓库注册服务器(Registry)混为一谈,但并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。仓库分为公有仓库(Public)和私有仓库(Private)两种。
Docker公司运营的公共仓库叫做 Docker Hub (https://hub.docker.com/),存放了数量庞大的镜像供
用户下载。用户可以在Docker Hub注册账号,分享并保存自己的镜像。
国内的公有仓库包括阿里云 、网易云 等,可以提供大陆用户更稳定快速的访问。当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。