Docker 镜像原理(commit、容器数据卷)

dokcer 镜像原理

联合文件系统(UnionFS)

理解:假设:docker 中包含的 tomcat 和 mysql 均需要使用 linux 内核,这里使用的 linux 内核是共用的。
下载时候看到的一层层就是这个,Docker 镜像实际是由一层一层的文件系统组成
联合文件系统时 Docker 镜像的基础,镜像通过分层来进行继承

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

docker 镜像默认是只读的。当容器启动的时候一个新的可写层被加载到镜像的顶部,这一层就是我们说的容器层,容器之下都是镜像

commit 镜像

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

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

如果你想要保存当前的状态,就可以通过 commit来提交,获得一个镜像,理解为快照

容器数据卷

容器之间可以数据共享的技术,数据可持久化且同步存储到本地

使用数据卷

  • 使用命令挂载 -v
docker run -it -v 主机目录:容器内目录
docker inspect 容器id   #来验证是否挂载成功

容器数据卷:
1)是一个双向同步的过程,修改以后不用进入容器修改可以在容器外修改。停止容器并在宿主机上修改文件,之后启动容器,容器内的数据依旧同步
2)容器间可以数据共享

  1. 具名挂载:方标找到卷
    -v 卷名:容器内路径
    docker volume ls #查看所有卷情况,可以看见名字
    docker volume inspect 卷名

2.匿名挂载:
-v 容器内路径不写容器外的路径
docker run -d -P --name nginx01 -v /etc/nginx nginx #后台运行容器不指定宿主机路径
默认在:/var/lib/docker/volume/卷名/_data 下

3.指定路径挂载
-v 宿主机路径:容器内路径

ro:只读,路径只能通过宿主机来改变,容器内无法操作
rw:可读

docker run -d -P --name nginx02 -v 卷名:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v 卷名:/etc/nginx:rw nginx

4.数据卷共享(容器间)

posted @ 2023-05-24 14:19  by1314  阅读(124)  评论(0编辑  收藏  举报
浏览器标题切换
浏览器标题切换end