第1关:创建一个数据卷
任务描述
本关任务是学习创建一个数据卷,要求学习者参照示例,创建一个名为vo1的数据卷,并将该数据卷挂载到container1容器的/dir1目录。
相关知识
为了完成本关卡,你需要掌握:创建一个数据卷。
在阅读相关知识之前,请先阅读背景知识对数据卷有一定的了解。如果您能够看明白数据卷的原理,那么我相信接下来的学习会非常地轻松。如果看不懂也没有关系,让我们在学习中慢慢地加深理解。希望学习完这个实训,能让你对数据卷有一个全新的理解。
#!/bin/bash
#创建一个名为vo1的数据卷,并将该数据卷挂载到container1容器的/dir1目录。
#拉取ubutun 最新镜像,实际生产中,docker pull 这一步可以省略,docker run的时候会自己去拉取。
docker pull ubuntu
#********** Begin *********#
docker run -v vo1:/dir1 --name container1 ubuntu
#********** End **********#
第2关:挂载和共享数据卷
任务概述
本关任务是学习挂载和共享数据卷,要求学习者参照示例,完成以下功能:
(1)创建一个名为container1的容器,并将本地主机的/dir1目录挂载到容器中的/codir1中;
(2)创建一个名为container2的容器,与container1共享数据卷。
相关知识
为了完成本关卡,你需要掌握:
挂载数据卷;
与其他容器共享数据卷(--volumes-from)。
上一节我们介绍了创建一个数据卷,现在我们来讲挂载和共享数据卷。
#1.创建一个名为container1的容器,并将本地主机的/dir1目录挂载到容器中的/codir1中。
docker pull ubuntu
#********** Begin *********#
docker run -v /dir1:/codir1 --name container1 ubuntu
#********** End **********#
#2.创建一个名为container2的容器,与container1共享数据卷。
#********** Begin *********#
docker run --volumes-from container1 --name container2 ubuntu
#********** End **********#
第3关:查看数据卷的信息
任务描述
想象一下这样的场景,假设事先执行了docker run -v /data --name vocontainer1 ubuntu,由于-v标签没有指定“数据卷名”,那么为数据卷会随机生成一个“数据卷名”。那我们如何知道vocontainer1对应的数据卷名是什么呢??
本关任务是学习查看一个数据卷的信息,要求学习者参照示例,输出容器container1创建的数据卷的名字。
相关知识
为了完成本关卡,你需要掌握:
查看数据卷的具体信息;
仅查看数据卷的名字。
#创建一个容器,并创建一个随机名字的数据卷挂载到容器的/data目录
#拉取ubutun 最新镜像,实际生产中,docker pull 这一步可以省略,docker run的时候会自己去拉取。
docker pull ubuntu &> /dev/null
docker rm container1 -f &>/dev/null
docker run -v /data --name container1 ubuntu
#输出容器container1创建的数据卷的名字
#********** Begin *********#
docker inspect --type container --format='{{range .Mounts}}{{.Name}}{{end}}' container1
#********** End **********#
第4关:删除数据卷
任务描述
数据卷是被设计用来持久化数据的,它的生命周期独立于容器,如果在创建容器时挂载了数据卷,执行docker rm删除容器时,并不会自动地将容器对应的数据卷删除掉。在Docker中也不存在垃圾回收这样的机制来处理没有任何容器引用的数据卷。
本关的任务是学习删除数据卷,要求学习这参照示例,将container1容器对应的数据卷删除掉。
相关知识
为了完成本关卡,你需要掌握:
删除数据卷的三种方式;
删除无用的数据卷。
#!/bin/bash
#创建一个名为container1的容器,创建一个数据卷挂载到容器的/data目录
#拉取ubutun 最新镜像,实际生产中,docker pull 这一步可以省略,docker run的时候会自己去拉取。
docker pull ubuntu
docker run -v vo4:/data --name container1 ubuntu
#删除container1对应的数据卷
#********** Begin *********#
docker rm -v container1
docker volume rm vo4
#********** End **********#
第5关:备份、恢复数据卷
任务描述
在我们的日常工作中,有时就需要备份和恢复数据卷,本关将针对这个进行展开。
本关任务是学习备份和恢复数据卷,要求学习者参照示例,完成以下功能:
(1)将名为vo1的数据卷备份;
(2)使用备份文件恢复vo1数据卷。
相关知识
为了完成本关卡,你需要掌握:
备份一个数据卷;
恢复一个数据卷。
#!/bin/bash
#拉取ubutun 最新镜像,实际生产中,docker pull 这一步可以省略,docker run的时候会自己去拉取。
docker pull ubuntu
# 创建一个vo1的数据卷,并在数据卷中添加1.txt文件
docker run --name vocontainer1 -v vo1:/dir1 ubuntu touch /dir1/1.txt
#1.将vo1数据卷的数据备份到宿主机的/newback中,将容器的/backup路径挂载上去,并将容器内/dir1文件夹打包至/backup/backup.tar
#********** Begin *********#
docker run --volumes-from vocontainer1 -v /newback:/backup ubuntu tar -cvf /backup/backup.tar /dir1
#********** End **********#
#删除所有的容器以及它使用的数据卷
docker rm -vf $(docker ps -aq)
docker volume rm vo1
#在次创建一个vo1的数据卷
docker run -itd --name vocontainer2 -v vo1:/dir1 ubuntu /bin/bash
#2.将保存在宿主机中备份文件的数据恢复到vocontainer2的/中
#********** Begin *********#
docker run --volumes-from vocontainer2 -v /newback:/backup ubuntu tar -xvf /backup/backup.tar -C /
#********** End **********#