Docker容器数据卷

什么是容器数据卷?

Docker的理念

当我们在使用docker容器的时候,会产生一系列的数据文件,这些数据文件在我们删除docker容器时,数据文件也会被删除掉,这个时候其中 部分的数据文件,我们是可以把它给保存起来用到其他地方的;Docker将应用与运行环境打包成容器发布,在运行过程钟产生的部分数据是可以持久化的的,而且容器之间我们希望能够实现数据共享。

Docker容器数据卷存在于一个或多个的容器中,由docker挂载到容器,但不属于联合文件系统,Docker不会在容器删除时删除其挂载的数据卷。

能干什么?

卷的设计目的就是数据的持久化,完全独立与容器的生命周期。因此Docker不会在容器删除时删除其挂载的数据卷。

特点:

  1. 数据卷可以在容器之间共享和重用数据。
  2. 卷的更改可以直接生效。
  3. 数据卷的更改不会包含在镜像的更新中。
  4. 数据卷的生命周期一直持续到没有容器使用它为止。

总结:容器的持久化和同步操作;容器间可以数据共享;

数据卷的使用

方式一:通过命令挂载

docker run -it -v 主机绝对路径目录:容器内目录  镜像名

示例一:

1、挂载目录

[root@iZwz9geewjuo2sogidqn50Z home]# docker run -it -v /home/ceshi:/home centos /bin/bash

2、在容器外查看是否挂载成功

docker inspect 容器id
[root@iZwz9geewjuo2sogidqn50Z home]# docker inspect d8c19193d02d

在这里插入图片描述
3、在容器内home目录下创建一个文件,看是否能同步到主机目录

[root@d8c19193d02d /]# cd /home/
[root@d8c19193d02d home]# ls
[root@d8c19193d02d home]# touch test.java
[root@d8c19193d02d home]# ls
test.java

查看主机目录也存在该文件,如下:

[root@iZwz9geewjuo2sogidqn50Z home]# cd ceshi/
[root@iZwz9geewjuo2sogidqn50Z ceshi]# ll
total 0
[root@iZwz9geewjuo2sogidqn50Z ceshi]# ls
test.java

4、接下来我们来修改下主机目录的文件,看看容器内的文件是否有变化
①停止容器
②宿主机上修改文件
③启动容器
④容器内的问件依旧是同步的
在这里插入图片描述

好处:以后修改文件只需要在本地修改即可,容器内会自动同步(类似于双向绑定)

方式二:通过dockerfile挂载

1、宿主机上创建一个文件夹docker-test-volume

[root@iZwz9geewjuo2sogidqn50Z home]# mkdir docker-test-volume
[root@iZwz9geewjuo2sogidqn50Z home]# ls
ceshi  docker-test-volume

2、在docker-test-volume目录下,创建一个dockerfile1的文件,文件内容如下

FROM centos

VOLUME ["volume01","volume02"]

CMD echo "----end----"
CMD /bin/bash

3、通过dockerfile构建自己的镜像li/centos:1.0

[root@iZwz9geewjuo2sogidqn50Z docker-test-volume]# docker build -f /home/docker-test-volume/dockerfile1 -t li/centos:1.0 .
Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM centos
 ---> 5d0da3dc9764
Step 2/4 : VOLUME ["volume01","volume02"]
 ---> Running in 8f314dd7c686
Removing intermediate container 8f314dd7c686
 ---> 8e5115198f76
Step 3/4 : CMD echo "----end----"
 ---> Running in f7f92e715845
Removing intermediate container f7f92e715845
 ---> 37aac1a16af8
Step 4/4 : CMD /bin/bash
 ---> Running in 49e935449dc2
Removing intermediate container 49e935449dc2
 ---> 947512cdc1a5
Successfully built 947512cdc1a5
Successfully tagged li/centos:1.0
[root@iZwz9geewjuo2sogidqn50Z docker-test-volume]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED          SIZE
li/centos     1.0       947512cdc1a5   34 seconds ago   231MB
hello-world   latest    feb5d9fea6a5   4 months ago     13.3kB
centos        latest    5d0da3dc9764   5 months ago     231MB

4、启动镜像

docker run -it 947512cdc1a5

在这里插入图片描述
这个卷跟外部一定有一个同步的目录!
在这里插入图片描述
5、查看卷挂载的路径

[root@iZwz9geewjuo2sogidqn50Z home]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS                      PORTS     NAMES
8bb6700fc721   947512cdc1a5   "/bin/sh -c /bin/bash"   9 minutes ago   Up 9 minutes                          friendly_clarke
[root@iZwz9geewjuo2sogidqn50Z home]# docker inspect 8bb6700fc721

在这里插入图片描述6、通过挂载的路径,查看文件是否同步

[root@iZwz9geewjuo2sogidqn50Z home]# cd /var/lib/docker/volumes/15509e60f7d9406102862361a9d5dc9cf6fdf518ae0350a65ee7af7225c748de/_data
[root@iZwz9geewjuo2sogidqn50Z _data]# ls
contain.txt

文件已经同步!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值