Docker数据持久化

-v 持久化 三种

默认的			volumes			占用一部分宿主机的资源			最常用的方式
bind mounts			不同的数据结构不通不可移植			不能写在dockerfile中			比较常用
tmpfs			挂载到内存当中			一般都不会用
docker run -itd -v /usr/share/nginx/html nginx         默认
	/var/lib/docker/volumes/xxxxxxxxxxxxxx/_data

docker run -itd -v /opt:/usr/sharc/nginx/html nginx			bind mounts
	/opt

在这里插入图片描述

容器卷

容器卷			docker vloume create 名字		说白了它是一个容器但是它提供的是一个卷的功能 这个比bind mounts好很多
docker run -itd -v nginx-data:/usr/share/nginx/html nginx		容器卷
	/var/lib/docker/volumes/nginx-data/_data
docker volume create nginx-data		//创建一个自定义容器卷
docker volume ls	//查看所有容器卷
docker volume inspect nginx-data	//查看指定容器卷详情信息

创建使用指定卷的容器

docker run -itd --name=nginx -p 8000:80 -v nginx-data:/usr/share/nginx/html nginx
选项-v表示挂载数据卷,这里使用自定义数据卷nginx-data,并且将数据卷挂载到/usr/share/nginx/html
默认会创建匿名数据卷进行映射和挂载。
可查看宿主机文件系统的数据/var/lib/docker/volumes/nginx-data/_data

Volume帮我们做了类似于一个软连接的功能。在容器里边的改动,我们可以再宿主机里感知,而在宿主局里面的改动,在容器里边可以感知到。
如果我们手动stop并且remove当前nginx容器,我们会发现容器卷里面的文件还在,并没有随着容器被删除掉。
所以在数据卷里边的东西是可以持久化的。如果下次还需要创建一个nginx容器,那么数据复用当前数据卷里面文件的。
此外,我们还可以启动多个nginx容器实例,共享同一个数据卷。数据卷的复用性和扩展性较强。
docker volume rm nginx-data			//清理卷(无用的)

Bind Mounts的基本使用

指定了将宿主机上的/wwwroot目录(如果没有会自动创建)挂载到/usr/share/nginx/html(这个目录是yum安装nginx的默认网页目录)。

docker挂载的默认权限是读写(rw),用户可以通过ro指定为只读

docker run -d -it --name=nginx -p 800:80 -v /wwwroot:/usr/share/nginx/html:ro nginx
与volumes不同,bind mounts的方式会隐藏被挂载目录里面的内容(如果非空的话),这里是/usr/share/nginx/html目录下的内容被隐藏掉了,因此我们看不到。

但是,我们可以将宿主机上的文件随时挂载到容器中

echo "test html" > /wwwroot/index.html
root@bfad2ded6e7a:/# ls /usr/share/nginx/html/
index.html

验证绑定

docker inspect nginx
"HostConfig": {
            "Binds": [
                "/wwwroot:/usr/share/nginx/html:ro"
            ],

清理

docker stop nginx
nginx
docker rm nginx
nginx
ls /wwwroot/
index.html
同volumes一样,当我们清理掉容器之后,挂在目录里面的文件仍然还在,不会随着容器的结束而消失,从而实现数据持久化。

数据卷容器

用户需要在容器之间共享一些持续性更新的数据时,可以使用数据卷容器。数据容器也是一个普通的容器。里边有设置好的数据卷,专门提供给他容器挂载使用。通过--volumes-from数据卷容器名来实现。
docker run -it -v /dbdata:/dbdata --name=dbdata centos /bin/bash		//创建数据容器卷

创建一个数据卷容器,并在其中创建一个数据卷挂载到/dbdata

docker run -it --volumes-from dbdata --name test1 centos /bin/bash
ls
bin  dbdata  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
touch dbdata/flaglinux		//在test1容器的/dbdata目录创建测试文件

进入test2容器验证结果

docker run -it --volumes-from dbdata --name test2 centos /bin/bash
ls
bin  dbdata  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
ls dbdata/
flaglinux		//测试文件还在
可以多次使用--volume-from参数从多个容器挂载多个目录。也可以从其他已经挂载了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker中,数据持久化是指将容器中的数据保存到宿主机或者外部存储中,以保证数据的持久性。Docker提供了多种数据持久化的方式,其中一种是使用Volume。Volume是Docker官方推荐的持久化方案,它可以将容器中的数据保存到宿主机文件系统中的某个目录。默认情况下,volume的存储空间来自于宿主机文件系统中的/var/lib/docker/volumes/目录[3]。 当我们在使用docker run命令创建容器时,可以使用-v参数来指定volume的名称和挂载路径。如果没有指定volume名称,Docker会默认创建一个匿名的volume。例如,可以使用如下命令创建一个名为container1的容器,并将宿主机目录/data挂载到容器内部: ``` docker run -it -v /data --name container1 busybox ``` 在宿主机上,我们可以通过/var/lib/docker/volumes/目录查找volume的实际存储路径。比如,如果我们创建了一个名为my-volume的volume,那么它在宿主机上的路径就是/var/lib/docker/volumes/my-volume/_data。 使用volume进行数据持久化可以确保容器在重新启动、迁移或升级时不会丢失数据。此外,volume还可以方便地与其他容器共享数据,实现数据的共享和协作。通过使用Docker数据持久化功能,我们可以更好地管理容器中的数据,并确保数据的安全性和可靠性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Hello Docker(七)——Docker数据持久化](https://blog.csdn.net/A642960662/article/details/123154025)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值