docker <容器数据卷 -v > -- 对容器内数据持久化(备份)

简介: 在docker创建容器,挂载目录的时候,可能会出现目录无法访问无法打开的问题(cannot open directory .: Permission denied)

前言

在docker创建容器,挂载目录的时候,可能会出现目录无法访问无法打开的问题(cannot open directory .: Permission denied)


只需要加一个 --privileged=true 参数即可,加上这个参数代表是以root用户权限进入容器的,不加就是以普通用户权限进入容器的


例如,test镜像创建一个容器t1


docker run -d -p 5555:5555 -v /etc/config:/tmp/config --privileged=true --name t1 test

正文

容器数据卷,也就是把容器内部目录挂载到宿主机目录(前言中说的挂载文件 -v ),独立于容器的生命周期之外,可以防止容器销毁而丢失文件


特点:


1、可以在多个容器之间共享或重用


2、数据卷中的更改可以实时生效


3、数据卷中的更改不会包含在镜像的更新中


4、数据卷的生命周期一直持续到没有容器使用


例如,挂载本机/tmp/data目录到容器中的/tmp/docker_data目录(如果本机没有/tmp/data目录,docker会自行创建)


docker run -it --privileged=true -v /tmp/data:/tmp/docker_data --name t1 test /bin/bash

-it进入容器,在/tmp/docker_data目录下创建一个test.txt文件,退出容器到宿主机的挂载目录下,可以看到已经有一个test.txt文件了,反之在宿主机目录下更改或创建文件,容器内目录也同步生效


实现了容器内数据持久化到宿主机,并且双方修改实时生效


如果在容器停止运行的情况下,修改宿主机挂载目录内容,容器启动后,同样会读取最新数据


如果忘记容器挂载到宿主机哪个目录了,可以使用docker inspect命令查看容器信息


docker inspect 容器id

数据卷读写规则

像上面那个案例,默认是可读可写的,也就相当于在后面加了一个rw,即:


docker run -it --privileged=true -v /tmp/data:/tmp/docker_data:rw --name t1 test /bin/bash

如果需要容器内只读,可以改成ro,即


docker run -it --privileged=true -v /tmp/data:/tmp/docker_data:ro --name t1 test /bin/bash

此时在宿主机修改的内容可以同步到容器内,但是容器内是只读的,如果继续在容器内操作,会提示Read-only file system


数据卷的继承和共享

如果想要新创建一个容器t2,也使用t1的数据卷,只需要使用--volumes-from命令继承t1即可


docker run -it --privileged=true --volumes-from t1 --name t2 test /bin/bash

此时t2也就跟t1一样挂载主机目录了,t2里面也可以看到/tmp/docker_data目录下的内容,并实时更新


如果t1停了,对t2是没有影响的,因为t2是继承的t1的挂载规则

相关文章
|
10月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
973 6
|
10月前
|
监控 Linux 调度
【赵渝强老师】Docker容器的资源管理机制
本文介绍了Linux CGroup技术及其在Docker资源管理中的应用。通过实例演示了如何利用CGroup限制应用程序的CPU、内存和I/O带宽使用,实现系统资源的精细化控制,帮助理解Docker底层资源限制机制。
901 6
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
1444 108
|
存储 监控 测试技术
如何将现有的应用程序迁移到Docker容器中?
如何将现有的应用程序迁移到Docker容器中?
883 57
|
10月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
868 52
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
存储 监控 Java
如何对迁移到Docker容器中的应用进行性能优化?
如何对迁移到Docker容器中的应用进行性能优化?
728 59
|
缓存 Ubuntu Docker
Ubuntu环境下删除Docker镜像与容器、配置静态IP地址教程。
如果遇见问题或者想回滚改动, 可以重启系统.
697 16

热门文章

最新文章