Docker 数据管理
在生产环境中使用 Docker ,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这必然涉及容器的数据管理操作
容器中的管理数据主要有两种方式:
数据卷 Data Volumes 是一个可供容器使用的特殊目录(存在在宿主机上)
数据卷容器(Data Volume Containers 使用特定容器维护数据卷
注1:上节课还介绍过cp命令在宿主机和docker容器之间复制文件
docker cp 宿主机绝对路径 容器id:容器的路径
docker cp /zking/readme.txt 容器id:/work
目的:eg:把宿主机/zking/readme.txt命令复制到容器的/work目录下
数据卷(Data Volumes)
- 创建数据卷
docker volume create 数据卷名字 - 查看数据卷
docker volume ls - 查看数据卷详情
docker volume inspect my-vol - 删除数据卷
docker volume rm 数据卷名字
数据卷是一个可供一个或多个容器使用的特殊目录,它将主机操作系统目录直接映射进容器,它可以提供很多有用的特性:
-
数据卷可以在宿主机和容器之间共享和重用
-
对数据卷的修改会立马生效
-
对数据卷的更新,不会影响镜像
-
数据卷 默认会一直存SS
## 挂载数据卷,最好是通过run而非create/start创建启动容器
## create/start命令创建启动容器后,再挂载数据卷相当麻烦,要修改很多配置文件,但并非不可以 -
启动一个挂载数据卷的容器
## demo1
docker run -it -d --name tomcat02
–mount type=volume,source=my-vol,target=/webapps centos:latest /bin/bash就是把宿主机/var/lib/docker/volumes目录下的数据卷中的数据映射到容器tomcat02的webapps目录下
## demo2 docker run -d -it --name tomcat03 \ --mount type=bind,source=/zking,target=/tools centos:latest /bin/bash
注1:linux命令结尾加斜杠有什么用
加了“\”意为将最后的回车换行给注释了,系统理解为命令还没有结束,因而是继续等待用户进行输入,直到读到结束符,如回车
注2:source=my-vol,target=/webapps
–mount选项的type参数支持三种类型的数据卷
–mount标志:由多个名值对组成,逗号分隔,每个键值由 = 元组组成
- type=volume普通数据卷(默认即这种类型),映射到主机/var/lib/docker/volumes路径下(就是demo1)
–mount type=volume,source=my-vol,target=/webapp
注:type的默认值,提前先创建数据卷 - bind:绑定数据卷,映射到主机指定路径下(推荐)
–mount type=bind,source=/webapp,destination=/webapp2 - tmpfs :临时数据卷,只存在于内存中(不推荐)
docker run -d
-it
–name tmptest
–mount type=tmpfs,destination=/app
nginx:latest
数据卷容器
如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。
数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其他容器挂载
数据卷容器相关操作
-
新建数据卷容器
docker run -itd --name data_tomcat04 -v /_data centos:latest相比之前的run命令创建并进入容器就多了一个-v的参数:容器挂载存储卷,挂载到容器的某个目录
docker run -it -d --name webapp centos:latest
-
用容器tomcat05测试数据卷容器是否可用
docker run -itd --name tomcat05 --volumes-from data_tomcat04 centos:latest
docker exec -it tomcat05 bash
cd _data
## 使用echo命令向tomcat05_test.txt中写入内容
echo “tomcat05 test” > tomcat05_test.txt
-
备份数据卷容器
docker run -it -d --name data_tomcat04 -v /_data centos:latest
docker run --rm --name beifen --volumes-from data_tomcat04 -v /zking:/container_backup centos:latest tar cvf /container_backup/backup.tar /_data
新建1个名为beifen的(暂时性,之后会删除)容器,由于volumes-from了data_tomcat04,所以在根目录下也会生成1个_data文件夹,经过执行命令后,将_data文件下的数据压缩在container_backup文件夹下,并存在宿主机上的host_backup_path下
注:
1)run:create+start
2)–rm:创建之后删除容器
3)–name:容器名称
4)–volumes-from:来自于哪个数据卷容器的容器NAME
5)-v:给容器挂载存储卷,挂载到容器的某个目录
- 还原数据卷容器
-
新建一个数据卷容器data_tomcat05
docker run -it -d --name data_tomcat05 -v /_data centos:latest -
备份data_tomcat05(其实就是把data_tomcat05打了个压缩包得到一个backup.tar的压缩包)
docker run --rm --name beifen --volumes-from data_tomcat05 -v /zking:/container_backup centos:latest tar cvf /container_backup/backup.tar /_data -
还原(就是把backup.tar的压缩包解压出来))
docker run --rm --name huanyuan --volumes-from data_tomcat04 -v /zking:/container_backup centos:latest tar xvf /container_backup/backup.tar -C /_data
新建1个名为huanyuan的(暂时性,之后会删除)容器,由于volumes-from data_tomcat05,所以在根目录下也会生成1个_data文件夹,宿主机上的host_backup_path下的压缩数据映射到了container_backup文件夹下,并解压至_data文件夹下
-