数据卷之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

结论:容器之间配置信息的传递、数据卷容器的生命周期一直持续到没有人使用为止。
但是一旦持久化到了本地上、这个时候、本地的数据是不会删除的。

posted @ 2021-07-13 10:03  LanceYa  阅读(108)  评论(0)    收藏  举报