DockerFile数据卷挂载
这种方式我们实际开发当中很常用
首先是我们创建一个脚本文件dockerfile 文件内容
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "-------end-------"
CMD /bin/bash
我们通过buidld 创建一个镜像容器
这里记住一定要添加这个点.
docker build -f 脚本文件的位置 -t 镜像名字:tag .
docker build -f dockerfile -t aw:1.0 .
我们可以在容器内查看到创建的两个挂载卷
[root@Aw docker-test-volume]# docker exec -it 6e606f40b64b bash
[root@6e606f40b64b /]# ls
bin etc lib lost+found mnt proc run srv tmp var volume02
dev home lib64 media opt root sbin sys usr volume01
我们在volume01里面创建一个文件
[root@6e606f40b64b /]# cd volume01
[root@6e606f40b64b /]# mkdir testVolume
[root@6e606f40b64b volume01]# ls
testVolume
[root@6e606f40b64b v
退出来之后我们通过容器id进行查找
docker inspect 容器id
我们可以看到这样方式生成的挂载目录是匿名的
我们通过上面查找的匿名进入目录进行查看
[root@Aw _data]# cd /var/lib/docker/volumes/8668351d837c1132e3360231f05f4cd6f9a2fcfa4928f745206eac6f576a0ef5
[root@Aw 8668351d837c1132e3360231f05f4cd6f9a2fcfa4928f745206eac6f576a0ef5]# ls
_data
[root@Aw 8668351d837c1132e3360231f05f4cd6f9a2fcfa4928f745206eac6f576a0ef5]# cd _data/
[root@Aw _data]# ls
testVolume
数据卷容器
我们会经常在多个mysql之间同步数据使用,
他的实现原理是通过–volumes-from 进行多个容器间的数据共享。他们是直接把夫类拷贝过来,这样他就是和夫类同级的了
我们还是使用我们之前的镜像先创建一个docker01镜像
#创建docker01容器
[root@Aw ~]# docker run -it -P --name docker01 aw:1.0 bash
[root@7281ac46ded4 /]# ls
bin etc lib lost+found mnt proc run srv tmp var volume02
dev home lib64 media opt root sbin sys usr volume01
ctrl+q+p退出
#创建docker02容器 并--volumes-from继承成docker01容器
[root@Aw ~]# docker run -it -P --name docker02 --volumes-from docker01 aw:1.0 bash
[root@61cb5a8a4c1f /]# ls
bin etc lib lost+found mnt proc run srv tmp var volume02
dev home lib64 media opt root sbin sys usr volume01
[root@61cb5a8a4c1f /]# cd volume01
[root@61cb5a8a4c1f volume01]# touch a.java 我们这个volume01数据卷中创建一个文件
[root@61cb5a8a4c1f volume01]# ls
a.java
ctrl+q+p退出
#我们进入docker01的容器中进行查看 我们可以看到a.java存在
[root@Aw ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
61cb5a8a4c1f aw:1.0 "bash" 31 minutes ago Up 31 minutes docker02
7281ac46ded4 aw:1.0 "bash" 34 minutes ago Up 23 minutes docker01
[root@Aw ~]# docker attach 7281ac46ded4
[root@7281ac46ded4 /]# ls
bin etc lib lost+found mnt proc run srv tmp var volume02
dev home lib64 media opt root sbin sys usr volume01
[root@7281ac46ded4 /]# cd volume01
[root@7281ac46ded4 volume01]# ls
a.java
#创建一个容器docker3同样继承docker01
[root@Aw ~]# docker run -it -P --name docker03 --volumes-from docker01 aw:1.0 bash
[root@8b8ddad3dec8 /]# ls
bin etc lib lost+found mnt proc run srv tmp var volume02
dev home lib64 media opt root sbin sys usr volume01
[root@8b8ddad3dec8 /]# cd volume01
[root@8b8ddad3dec8 volume01]# ls
a.java
exit 退出
#停止docker01
[root@Aw ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8b8ddad3dec8 aw:1.0 "bash" 33 minutes ago Up 33 minutes docker03
61cb5a8a4c1f aw:1.0 "bash" 44 minutes ago Up 44 minutes docker02
7281ac46ded4 aw:1.0 "bash" 46 minutes ago Up 2 minutes docker01
[root@Aw ~]# docker stop 7281ac46ded4
7281ac46ded4
[root@Aw ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8b8ddad3dec8 aw:1.0 "bash" 36 minutes ago Up 36 minutes docker03
61cb5a8a4c1f aw:1.0 "bash" 48 minutes ago Up 48 minutes docker02
[root@Aw ~]# docker exec -it docker02 bash 进入docker02创建一个文件b.java
[root@61cb5a8a4c1f /]# cd volume01
[root@61cb5a8a4c1f volume01]# ls
a.java
[root@61cb5a8a4c1f volume01]# touch b.java
[root@61cb5a8a4c1f volume01]# ls
a.java b.java
[root@61cb5a8a4c1f volume01]# exit
exit
#进入容器docker03 查看到文件亦然存在
[root@Aw ~]# docker exec -it docker03 bash
[root@8b8ddad3dec8 /]# cd volume01
[root@8b8ddad3dec8 volume01]# ls
a.java b.java
[root@8b8ddad3dec8 volume01]# exit
exit
#删除容器docker01 也是一样
mysql实现的的情况
docker run -d -p 3310:3306 -v /etc/mysql/conf.d -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --name mysql01 mysql:8.0
docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=root --name mysql02 --volumes-from mysql01 mysql:8.0