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)容器间可以数据共享
- 具名挂载:方标找到卷
-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.数据卷共享(容器间)
哪有什么胜利可言,坚持意味着一切。如想使用请备注转载链接~