Docker的使用-数据卷

当一个容器退出被删除之后,数据也就会丢失了,这对于应用方而言是不能接受的,所以需要将容器所产生出来的重要数据持久化下来。容器能够直接将数据持久化到指定的目录上,这个目录就称之为数据卷。

数据卷有一些特点,其中非常明显的就是数据卷的生命周期是独立于容器的生命周期的,也就是说容器的创建、运行、停止、删除等操作都和数据卷没有任何关系,因为它是一个特殊的目录,是用于帮助容器进行持久化的。简单而言,我们会将数据卷挂载到容器内,这样一来容器就能够将数据写入到相应的目录里面了,而且容器的退出并不会导致数据的丢失。

通常情况下,数据卷管理主要有两种方式:

第一种是通过 bind 的方式,直接将宿主机的目录直接挂载到容器内;这种方式比较简单,但是会带来运维成本,因为其依赖于宿主机的目录,需要对于所有的宿主机进行统一管理。

第二种是将目录管理交给运行引擎

Docker数据卷实现持久化存储

数据安全性;不会存在当容器挂掉时,容器中的数据丢失
数据卷:将宿主机的一个目录给映射到容器的一个目录中(相当于共享目录);


手工交互数据
[root@localhost html]# docker container cp demo.html demo1:/usr/share/nginx/html/  //将文件给cp到指定容器的指定路径
[root@localhost html]# docker container cp demo1:/usr/share/nginx/html/demo.html ./  //将指定容器中的文件给cp到宿主机中
[root@localhost html]# ll
总用量 4
-rw-r--r-- 1 root root 6 630 15:16 demo.html

volume实现宿主机与容器的数据共享
//创建数据卷
docker volume create 数据卷名称
//默认存放在宿主机的/var/lib/docker/volumes/数据卷名称/_data

//查看数据卷的详细信息
docker volume inspect 数据卷名称

//删除数据卷
docker volume rm 数据卷名称

//数据卷的使用
- 当映射数据卷时,如果数据卷不存在docker会自动创建,并存放在宿主机的/var/lib/docker/volumes/数据卷名称/_data下(会将容器内部自带的文件存储在默认的存放路径中)
docker run -v 数据卷名称:容器内部路径 镜像id
- 直接指定一个路径作为数据卷的存放位置(路径下是空的)
docker run -v 路径:容器内部路径 镜像id (推荐使用)

[root@localhost /]# docker container run -d --name="demo3" -p 8003:80 -v /opt/html:/usr/share/nginx/html  nginx:1.15
f482d34740f941a5b6d928d8e617bbe98fd57793dd2a4e9abbf8c1b53e2da39e

查看容器的数据卷挂载路径

[root@localhost html]# docker container inspect f482d34740f9
...
 "Mounts": [
            {
                "Type": "bind",
                "Source": "/opt/html",
                "Destination": "/usr/share/nginx/html",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],
...
数据卷容器

相当于一个通道,将宿主机中的目录和目标容器中的指定目录做共享;作用在于可以更好的分类管理大量容器的不同类型的文件

  1. 在宿主机中模拟数据目录
mkdir -p /opt/volume/a
mkdir -p /opt/volume/b
touch /opt/volume/a/a.txt
touch /opt/volume/b/b.txt
  1. 启动数据卷容器并建立目录映射关系
[root@localhost html]# docker container run -it --name="nginx_volumes" -v /opt/volume/a:/opt/a -v /opt/volume/b:/opt/b centos:6.9 /bin/bash

[root@48dd82a829b4 /]# cd /opt/
[root@48dd82a829b4 opt]# ls
a  b

需要注意的是这边的容器的开启是使用了交互式方式;所以为了避免在退出时容器直接exited;需要按住ctrl+P,Q来退出,使其在后天运行

  1. 使用数据卷容器
[root@localhost opt]# docker run -d --name="nginx_demo1" -p 8066:80 --volumes-from nginx_volumes nginx:1.15
bc7d6e751a5fd394f9c578e5c09dc5e0995fd6da92caeb35d712605da0312436
[root@localhost opt]# docker run -d --name="nginx_demo2" -p 8067:80 --volumes-from nginx_volumes nginx:1.15
28c1af4ea092e4eb67640c9c91cbd7643e977afca2de14b27161698ca1b3fb8d
[root@localhost ~]# docker container exec -it nginx_demo1 /bin/bash
root@bc7d6e751a5f:/# cd /opt
root@bc7d6e751a5f:/opt# ls
a  b
root@bc7d6e751a5f:/opt# cd a
root@bc7d6e751a5f:/opt/a# ls
a.txt
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值