作者:男人邦121121121 | 来源:互联网 | 2023-09-23 17:44
文章目录1.Docker运行底层原理 1.1运行原理 1.2Docker为什么比JVM运行的快2.镜像原理 2.1是什么 2.2Docker镜像加载原理 2.3Docker镜像为什
文章目录
- 1.Docker 运行底层原理
- 1.1 运行原理
- 1.2 Docker为什么比JVM运行的快
- 2.镜像原理
- 2.1是什么
- 2.2Docker镜像加载原理
- 2.3Docker镜像为什么采用分层结构
- 2.4特点
- 3.容器数据卷
- 3.1是什么
- 3.2能干什么
- 3.3添加
- 3.2.1V命令添加
- 3.2.2DockerFile添加
- 4.DockerFile
1.Docker 运行底层原理
1.1 运行原理
Docker是一个client-server结构的系统,Docker守护进程运行在主机上,然后通过socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。
容器是一个运行时环境。
1.2 Docker为什么比JVM运行的快
@1. Docker用的是宿主物理机上的硬件,不用Hypervisor实现硬件虚拟化,所以CPU,内存利用率在效率上有优势
@2. Docker利用的是宿主机的内核,不需要Guest OS,因此Docker不需要和虚拟机一样要加载操作系统的内核,利用的是宿主机的操作系统,因此过程非常快,是秒级的(而新建一个虚拟机时,虚拟机上的虚拟软件需要加载Guent OS,这个过程时分钟级别的)
2.镜像原理
2.1是什么
镜像是一个轻量级,可执行的软件包,用来打包软件运行环境及基于环境的软件,它包含软件运行时所需的所有的,包括代码、运行库,环境变量和配置文件
@1. Docker镜像实际上就是一层一层的文件系统组成的,这种层级的文件系统叫UnionFS(称为:联合文件系统,是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交一层层的叠加,同时可将不同的目录挂载在同一个文件系统下。UnionFS是Docker镜像的基础,镜像可通过分层来进行继承,基于基础镜像(没有父镜像)制作各种具体的应用镜像)
@2. UnionFS特性:一次同时加载多个文件系统,但从外表看起来只有一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录
2.2Docker镜像加载原理
先将两个概念,BootFS和RootFS。BootFS:包括bootLoader和kernel,bootLoader主要引导加载kernel。linux刚启动时会加载BootFS文件系统(Docker底层就是BootFS),当boot加载完整个内核就在内存中了,此时内存的使用权已由bootfs转交给内核。此时系统会写在bootfs;RootFS:在BootFS之上,包含linux中的/dev,/proc,/bin,/etc等标准目录和文件,rootFS就是各种不同的操作系统的发行版,比如ubuntu,centos。而我们平时安进虚拟机的CentOS都是好几个G,但docker只有200M,是因为精简的OS,rootFS可以很小,只需要最基本的命令,工具和程序就可以了,因为底层直接用Host的kernel,自己只需要rootFS就行了。因此对于不同的linux发行版,bootfs基本一致的,rootfs有差别,因此不同的发行版可共用bootfs
2.3Docker镜像为什么采用分层结构
实现资源共享。(比如多个镜像都是从基础镜像构建而来的,那么宿主机只需在磁盘上保存一份基础镜像,同时内存中只需加载一份基础镜像,就可为所有容器服务了,且镜像的每层都可被共享)
2.4特点
@1. 只读
@2. 当运行时,一个新的可写层加载到镜像的“顶部”,这一层通常称为“容器层”,”容器层“之下的叫”镜像层“
3.容器数据卷
3.1是什么
docker容器是伴随容器的,当容器删除后如何不生成新的镜像讲运行时的数据作为镜像的一部分保存下来数据就会丢失,为了保存数据我们就使用卷。(类似redis里的ros和rdb文件)
3.2能干什么
@1. 容器的持久化
@2. 容器间继承和共享数据
3.3添加
3.2.1V命令添加
docker run -it -v /宿主机绝对目录:/容器内目录 镜像id
3.2.2DockerFile添加
4.DockerFile
4.1是什么
用来构建Docker镜像的构建文件,由一些列命令和参数构成的脚本
@1. 每条保留字都大写,且必须后面带至少一个参数
@2. 每条指令都会创建一个镜像,并对镜像进行提交
@3. 指令按照从上到下,顺序执行
4.2构建过程
@1. 编写构建文件
@2. docker build 构建文件
@3. docker run 镜像
4.3 执行流程
@1. 从基础镜像运行一个容器
@2. 执行一个命令并对容器进行修改
@3. 执行类似docker commit的操作提交一个新的镜像层
@4. docker再基于刚提交的镜像运行一个新容器
@5. 接着执行下一条指令,直至所有指令执行完成