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博客
上一篇:【Linux】Linux安装