【学习笔记】Docker(二)
创始人
2024-05-31 04:12:05
0

Docker镜像加载原理

UnionFS(联合文件系统)

一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像(Docker下载镜像时一层层下载就是这个)

 

特征:一次性同时加载多个文件系统,但从外面看起来只能看见一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录

Docker镜像加载原理

Docker的镜像实际上是由一层一层的文件系统组成,这种层级的文件系统即UnionFS

 

bootfs(boot file system):主要包括bootloads和kernel内核,bootloads主要是引导加载内核,Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux系统是一样的,包括boot加载器和内核,当boot加载完成之后整个内核就在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs

rootfs(root file system):在bootfs上,包括的就是典型的Linux系统中的/dev、/proc、/bin、/etc等标准目录和文件,rootfs就是各种不同的操作系统发行版,比如Ubuntu、Centos等

所有的镜像都起始于一个基础镜像层,当进行修改或增加新的内容时,就会在当前镜像层之上,创建新的镜像层:

例如基于Ubuntu Linux16.04创建一个新的镜像,这就是新镜像的第一层,如果在该镜像中添加Python包,就会在基础镜像层之上创建第二个镜像层;如果继续添加一个安全补丁,就会创建第三个镜像层

 

Docker镜像都是只读的,当容器启动时,一个新的可写层被夹在到镜像的顶部!

这一层就是我们通常说的容器层,容器之下的都叫镜像层

然后可以将新的一层和原来的层一起打包成大的镜像进行发布

 

Commit镜像

docker commit 提交容器成为一个副本

docker commit -m=”提交的描述信息” -a=”作者” 容器id 目标镜像名:[TAG]

容器数据卷

为了容器的持久化和同步操作-容器间实现数据共享

MySQL,容器删了数据就没了==需求:数据可以存储在本地

将容器内的目录挂载到虚拟机上

例:docker run -p 3306:3306 --name mysql --privileged=true

-v /mydata/mysql/log:/var/log/mysql

-v /mydata/mysql/data:/var/lib/mysql

-v /mydata/mysql/conf:/etc/mysql/conf.d

-e MYSQL_ROOT_PASSWORD=root  

-d mysql:8.0.26

-v /root/mysql/logs:/logs:将主机目录(/root/mysql)下的 logs 目录挂载到容器中的

/logs 日志目录

-v /root/mysql/data:/var/lib/mysql :将宿主机目录(/root/mysql)下的data目录挂载到容

器的 /var/lib/mysql 数据目录

docker inspect mysql(Mounts)查看挂载信息,数据挂载成功

进入容器内部docker exec -it mysql /bin/bash,cd /var/lib/mysql查看容器内部数据

 

查看宿主数据目录,内容保持一致

 

Dockerfile

就是用来构建docker镜像的构建文件,命令脚本

--镜像是一层层的,脚本是一个个的命令,通过脚本可构建镜像

在Java8的环境下,将宿主/var/lib/docker/volumes/xxx/_data挂载到容器内部的/temp目录

Docker执行Dockerfile的大致流程如下:

(1)docker从基础镜像运行一个容器

(2)执行一条指令并对容器作出修改

(3)执行类似docker commit的操作提交一个新的镜像层

(4)docker再基于刚提交的镜像运行一个新容器

(5)执行dockerfile中的下一条指令直到所有指令都执行完成

DockerFile常用保留字指令

FROM -基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是from

MAINTAINER -镜像维护者的姓名和邮箱地址

RUN -容器构建时需要运行的命令,有两种形式,一是后面加shell命令如RUN yum -y install vim,另一种是exec格式,如RUN [“./test.php”, “dev”, “offline”]

EXPOSE -当前容器对外暴露出的端口

WORKDIR -指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点

USER -指定该镜像以什么样的用户去执行,如果都不指定,默认是root

ENV用来在构建镜像过程中设置环境变量,这个环境变量可以在后续的其他指令中使用

ADD -将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包

COPY -类似ADD,拷贝文件和目录到镜像中。 将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置

VOLUME -容器数据卷,用于数据保存和持久化工作

CMD -指定容器启动后的要干的事情,格式跟RUN相似,和前面RUN命令的区别:CMD是在docker run 时运行,RUN是在 docker build时运行

docker学习(四):DockerFile微服务实战及docker端口映射_dockerfile指定端口映射_拒绝冗余的博客-CSDN博客

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...