数据卷之dockerfile
一)自己创建一个dockerfile
dockerfile就是用来构建docker镜像的构建文件、用下面的案例来体验一下。通过这个脚本可以生成镜像、镜像是一层一层的、脚本是一个个的命令、每个命令都是一层。
基于centos环境创建一个ztsq/centos1.0镜像
[root@xiaozhang1999 ~]# cd /home
[root@xiaozhang1999 home]# ll
total 0
drwxr-xr-x 2 root root 37 Jun 24 15:27 ceshi
drwxr-xr-x 4 root root 30 Jun 25 14:55 mysql
[root@xiaozhang1999 home]# mkdir docker-test-volume
[root@xiaozhang1999 home]# ls
ceshi docker-test-volume mysql
[root@xiaozhang1999 home]# cd docker-test-volume
# 创建一个dockerfile文件、名字最好就为dockerfile
[root@xiaozhang1999 docker-test-volume]# vim dockerfile1
[root@xiaozhang1999 docker-test-volume]# cat dockerfile1
FROM centos
VOLUME ["Volume01","Volume02"]
CMD echo ".................end........................"
CMD /bin/bash
[root@xiaozhang1999 docker-test-volume]# docker build -f /home/docker-test-volume/dockerfile1 -t ztsq/centos1.0 .
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM centos
---> 300e315adb2f
Step 2/4 : VOLUME ["Volume01","Volume02"]
---> Running in 8ff322dce9cb
Removing intermediate container 8ff322dce9cb
---> e02a6a5af26b
Step 3/4 : CMD echo ".................end........................"
---> Running in c56b03a03b68
Removing intermediate container c56b03a03b68
---> 4faf06ace140
Step 4/4 : CMD /bin/bash
---> Running in 883fb14b0216
Removing intermediate container 883fb14b0216
---> 513eba9a38ec
Successfully built 513eba9a38ec
Successfully tagged ztsq/centos1.0:latest
[root@xiaozhang1999 docker-test-volume]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ztsq/centos1.0 latest 513eba9a38ec 5 minutes ago 209MB
tomcattunc latest 276239fa14a3 4 days ago 672MB
生成dockerfile时报错、报错信息为
[root@xiaozhang1999 docker-test-volume]# docker run -it 513eba9a38ec /bin/bash
docker: Error response from daemon: OCI runtime create failed: invalid mount {Destination:Volume01 Type:bind Source:/var/lib/docker/volumes/dc606ec3f8bad69571589a2d8ddc0a70234496cb20f17218b802dca89b6ebd7b/_data Options:[rbind]}: mount destination Volume01 not absolute: unknown.
ERRO[0000] error waiting for container: context canceled
解决报错方法::VOLUME ["/Volume01","/Volume02"](属匿名挂载)内容加斜杠.删除513eba9a38ec后再重新创建镜像
查看生成的数据卷Volume1、Volume2


二)数据卷容器
退出ztsq/centos1.0镜像创建个docker02挂载在ztsq/centos1.0的docker01下


创建个dockercopy文件、验证容器内数据同步性
同理新建个docker03挂载在ztsq/centos1.0下、docker02、docker03、及ztsq/centos1.0下的docker01数据都是同步的

可以删除数据卷docker01 ztsq/centos1.0后。docker02和docker03的数据依然存在。
"双向绑定"


实际生产场景举例:利用数据卷容器同步mysql数据

docker run -d -p 3310:3306 -v /home/mysql/comf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
docker run -d -p 3310:3306 -v /home/mysql/comf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 mysql:5.7
docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volume-from mysql01
结论:容器之间配置信息的传递、数据卷容器的生命周期一直持续到没有人使用为止。
但是一旦持久化到了本地上、这个时候、本地的数据是不会删除的。

浙公网安备 33010602011771号