什么是容器数据卷?
Docker的理念
当我们在使用docker容器的时候,会产生一系列的数据文件,这些数据文件在我们删除docker容器时,数据文件也会被删除掉,这个时候其中 部分的数据文件,我们是可以把它给保存起来用到其他地方的;Docker将应用与运行环境打包成容器发布,在运行过程钟产生的部分数据是可以持久化的的,而且容器之间我们希望能够实现数据共享。
Docker容器数据卷存在于一个或多个的容器中,由docker挂载到容器,但不属于联合文件系统,Docker不会在容器删除时删除其挂载的数据卷。
能干什么?
卷的设计目的就是数据的持久化,完全独立与容器的生命周期。因此Docker不会在容器删除时删除其挂载的数据卷。
特点:
- 数据卷可以在容器之间共享和重用数据。
- 卷的更改可以直接生效。
- 数据卷的更改不会包含在镜像的更新中。
- 数据卷的生命周期一直持续到没有容器使用它为止。
总结:容器的持久化和同步操作;容器间可以数据共享;
数据卷的使用
方式一:通过命令挂载
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
文件已经同步!