> 文档中心 > 1、docker 简介

1、docker 简介


1、docker 简介

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何的接口。

Docker是一个开源的,使用go语言开发,Docker公司主营项目

2、容器技术与虚拟化技术对比

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O1cwCDBd-1647248420882)(D:/docker%E8%B5%84%E6%96%99/assets/1549786287808.png)]

与传统的虚拟机相比,Docker优势体现为启动速度快、占用体积小。

1:基础设施Infrastructure,它可以是你的个人电脑,数据中心的服务器或者云主机

2:Host os当前的操作系统,比如windows和linux系统等。

3:hypervisor:是一种虚拟化技术。可以在主操作系统之上运行多个不同的操作系统。比如vmware和virturebox等。

4:Guest os 就是虚拟子系统也就是我们的centos。

5:Bins、Libs安装应用需要依赖的组件和环境。比如gcc,gcc++或者yum等。

6:App 安装我们对应的应用,比如:mysql,tomcat.jdk等。应用安装之后,就可以在各个操作系统分别运行应用了,这样各个应用就是相互隔离的。

Docker容器的解说:

1:基础设施Infrastructure。

2:Host os当前的操作系统,比如windows和linux系统等。

3:Docker Engine:负责和底层的系统进行交互和共享底层系统的资源。取代了Hypevisor.它是运行在操作系统之上的后台进程,负责管理Docker容器。

4:各种依赖,对于Docker,应用的所有依赖都打包在Docker镜像中,Docker容器是基于Docker镜像创建的。

5:应用,应用的源代码与他的依赖都打包在Docker镜像中,不同的应用需要不同的Docker镜像,不同的应用运行在不同的Docker容器中,它们是相互隔离的。

Docker守护进程可以直接与主操作系统进行通信,为各个Docker容器分配资源,它还可以将容器与主操作系统隔离,并将各个容器互相隔离,虚拟机启动需要数分钟,而Docker容器可以在毫秒内启动,由于没有臃肿的的从操作系统,Docker可以节省大量的磁盘控制以及其他系统资源。

说了这么多Docker的优势,大家也没有必要完全否定虚拟机技术因为两者有不同的使用场景,虚拟机更擅长于彻底的隔离整个运行环境,例如,云服务器提供商通常采用虚拟机技术隔离不同的用户。而Docker通常用于隔离不同的应用,例如:前端、后端以及数据库。

对比表格:

虚拟机 容器
占用磁盘空间 非常大,GB级 小,MB甚至KB级
启动速度 慢,分钟级 快,秒级
运行形态 运行于Hypervisor上 直接运行在宿主机内核上
并发性 一台宿主机上十几个,最多几十个 上百个,甚至数百上千个
性能 逊于宿主机 接近宿主机本地进程
资源利用率

容器带来的好处有哪些?

1)秒级的交付和部署

2)保证环境一致性

3)高效的资源利用

4)弹性的伸缩

5)动态调度迁移成本低

3、Docker组件:CS架构程序

一个完整的Docker基本架构由如下几个部分构成:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2xfNePr4-1647248420883)(D:/docker%E8%B5%84%E6%96%99/assets/1572834712408.png)]

1:Docker是一个客户端-服务器(C/S)架构程序。

客户端它是docker的用户界面,可以接受用户命令和配置标识,并与docker daemon通信,其实就是在linux客户端或者 xhsell中输入的docker命令。

2:Docker Daemon 守护进程。

它是一个运行在宿主机(Docker Host)的后台进程,可以通过docker客户端与之通信。

3:Docker Image镜像。

在docker中,每一个应用都会做成一个镜像文件。这个镜像文件最后会把它安装到容器中,然后运行在docker的进程中,同一种镜像可以复刻多份容器去运行。类似于java语言中的:

比如我又一个镜像假如是MYSQL镜像。我基于这个镜像可以创建N多个容器,而这些容器可以在我们的宿主机上去运行。

问题:镜像从何而来?

从Registries而来。也是仓库的意思,也就是说所有的镜像都会从仓库里或者,这个远程仓库的地址是什么呢?

https://hub.docker.com/search?q=&type=image

或者你自己建立一个本地仓库来完成镜像的存储。

为什么不使用dockerhub提供的额镜像而使用国内的提供的docker仓库或者自己搭建,是因为国外卸载镜像的时候有带宽限制。速度会非常的慢。这也是为什么说一定要链接网络的原因。

4:Docker Container 容器

容器是镜像可以运行的实例,镜像和容器的关系有点类似于java语言中的:对象【容器】和类【镜像】

5:Registry

它是一个集中存储与分发镜像的服务。一个Docker Registry可以包含多个docker仓库,每个仓库可以包含多个镜像标签,每个标签对应一个docker镜像。

Docker Registry可分为公有docker register和私有docker registry,最常用的docker registry就是docker hub.也就是默认的docker registry。

4、Docker组件:镜像与容器

镜像(image):镜像是基于联合文件系统的一种层式结构,由一系列指令一步一步构建出来

镜像是只读的不能改

容器(container):镜像是静态的,镜像的每一层都只是可读的,而容器是动态的里面运行着我们指定的应用,容器里面的应用可能会新建一个文件,修改一个目录,这些操作所带来的改变并不会作用到镜像里面,因为镜像只是只读的。所以通过镜像创建容器就是在镜像上加一个可读写的层。

容器运行依赖镜像,容器中的文件可以修改

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CKO3DJnn-1647248420885)(D:/docker%E8%B5%84%E6%96%99/assets/1572835327577.png)]

5、Docker组件:仓库

Docker用Registry来保存用户构建的镜像。Registry分为公共和私有两种。Docker公司运营公共的Registry叫做Docker Hub。

https://hub.docker.com/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LuRbAUlR-1647248420886)(D:/docker%E8%B5%84%E6%96%99/assets/1572835410624.png)]

在企业中由于安全性,一般会大家自己的仓库,他就叫私服

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wJfBQkVG-1647248420887)(D:/docker%E8%B5%84%E6%96%99/assets/1572835651310.png)]

ub。

https://hub.docker.com/

[外链图片转存中…(img-LuRbAUlR-1647248420886)]

在企业中由于安全性,一般会大家自己的仓库,他就叫私服

[外链图片转存中…(img-wJfBQkVG-1647248420887)]