欢迎光临
我们一直在努力

docker存储volume(docker存储有哪几种挂载类型)

Docker镜像升级保留数据(volume)

1、 Docker Volume 即数据卷,用于保持数据持久化,例如MySQL运行在Docker容器中时,一般将数据通过 Docker Volume 保存在主机上,这样即使删除MySQL容器,数据依然保存在主机上,有效保证了数据的安全性。

docker存储volume(docker存储有哪几种挂载类型)插图

2、Kubernetes的volume具有明确的生命空间。Volume生命周期比pod中运行的container长。Container重启之后,volume的数据仍会保留。但是,当Pod销毁之时,该pod关联的volume也会同时销毁。

3、volume参数代表声明一个数据卷。通常数据库的镜像都会这么做,把数据目录声明成数据卷。声明成数据卷的目录会有持久性的功能,也就是说即使你不用docker run -v挂载外部数据,数据也不会因为容器销毁而丢失。

4、默认会保留下来,位置一般都在/var/lib/docker目录里面,就是docker镜像跑的地方,但是一旦重启或者容器,或者容器挂掉了,你的数据就没了。

docker中容器有必要挂载到主机上吗存储

这两种方法都不能将卷挂载到主机上?是的,这两种方法都基于容器生命周期中保存的主机目录。

是。Docker是一个开源的应用容器引擎,只有挂载才能进行使用,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。

上面的命令挂载主机的 /var/data 目录到容器的 /opt/mydata 目录。 这个功能在测试的时候特别方便,比如用户可以放置一些程序或数据到本地目录中,然后在容器中使用。另外,本地目录的路径必须是绝对路径,如果目录不存在,Docker 会自动创建。

但是遇到一个小问题,笔者以前写过一篇文章-Docker MySQL数据持久化,用数据卷挂载的方式将mysql的数据(映射数据目录)持久化到宿主机。那么配置文件也是有必要来映射的,注意就可以避免在容器内安装编辑器。

我们可以将数据保存在容器中,但是这样存在一些缺点:针对上述的缺点,有些数据,例如数据库文件,我们不应该将其保存在镜像或者容器的可写层中。

不要将数据储存在容器中,这也是 Docker 官方容器使用技巧中的一条。容器随时可以停止、或者删除。当容器被rm掉,容器里的数据将会丢失。为了避免数据丢失,用户可以使用数据卷挂载来存储数据。

docker挂载volume的用户权限问题

1、本文最初的问题就是因为容器执行者和挂载数据卷的权限不同。容器内部运行是uid=0的用户,数据卷从属与uid=1000的ryan。最终导致容器写入数据卷的文件权限升级为root, 从而普通用户无法访问。

2、可见不仅容器内往挂载目录 /project/models 写入的文件 model.txt 所有者是主机用户,而且在容器内往非挂载目录 /project/tmp.txt 写入文件也不会遇到权限问题。

3、在Docker主机上,使用chmod命令确保挂载目录的权限允许容器中的进程进行读取和执行。用户/组ID不匹配:如果容器中的用户/组ID与挂载目录所属的用户/组ID不匹配,导致无法执行脚本。

4、对于数据卷来说,由 docker 完全管理,而绑定挂载需要我们自己去维护。我们需要自己手动去处理这些问题,这些问题并不仅仅是上面演示的这些,还有用户权限, SELINUX 等。tmpfs 只存储在主机的内存中。

5、volume permissions”,确认为目录权限问题。

6、有两种可能性:如果当前运行的用户不是 root,可能是没有权限执行 docker 命令。可以使用 sudo docker stats --no-stream ,或者使用 su - 命令切换到 root 用户,再执行 docker stats --no-stream。

如何给启动的docker添加volume

直接docker run -v 跟本地目录 这样就就直接把本地的目录映射到容器指定目录dockerfile 里的 volume指定的目录,里面内存变化的时候docker commit的时候忽略里面的改变。

docker run -it –-name robot1 -v /var/data:/opt/mydata:ro ros/kinetic /bin/bash 加了:ro 之后,容器内挂载的数据卷内的数据就变成只读的了。

使用volume的方法:在spec.volumes处声明volume,在spec.containers[*].volumeMount中挂载volume到container。可以将ConfigMap的值注入到volume中。这样可以在pod中使用config map。

然后,通过volume挂载的方式,指定运行user为1000, 启动容器node:可以看到, 容器外执行sleep的进程,user是ryan(另一个sleep进行是前面的root用户执行的实例,没删除)。

VOLUME 指令指定要创建的挂载路径,在容器运行时,将为每个挂载路径创建一个匿名卷并挂载上去:上述指令将会在容器运行时,创建两个匿名卷,并分别挂载到容器中的 /data1 和 /data2 路径。

docker volume默认使用本地文件系统存储,不支持手动配置volume大小。但是目前docker volume是支持多种存储后端,但直接支持存储空间大小目前好像并未实现。

以上就是docker存储volume(docker存储有哪几种挂载类型)的内容,你可能还会喜欢docker存储volume,宿主机,mysql,net,docker等相关信息。

赞(0)
未经允许不得转载:红迪亚 » docker存储volume(docker存储有哪几种挂载类型)

评论 抢沙发