docker 数据管理

 

学习目标:
说出数据卷、数据容器是什么
应用数据卷、数据容器的常见操作
 
    docker的镜像是只读的,虽然依据镜像创建的容器可以进行操作,但是我们不能将数据保存到容器中,因为容器会随时关闭和开启,那么如何将数据保存下来呢?
答案就是:数据卷和数据卷容器

数据卷简介

这一节,我们从定义、命令详解这两个方面来学习。
 
什么是数据卷?
就是将宿主机的某个目录,映射到容器中,作为数据存储的目录,我们就可以在宿主机对数据进行存储
缺点是:太单一了
docker 数据卷命令详解

# docker run --help

。。。

  -v, --volume list               Bind mount a volume (default [])

                                     挂载一个数据卷,默认为空

我们可以使用命令 docker run 用来创建容器,可以在使用docker run 命令时添加  -v 参数,就可以创建并挂载一个到多个数据卷到当前运行的容器中。
-v 参数的作用是将宿主机的一个目录(绝对路径)作为容器的数据卷挂载到docker容器中,使宿主机和容器之间可以共享一个目录,如果本地路径不存在,Docker也会自动创建。
-v 宿主机文件:容器文件
 

数据卷实践

这一节,我们从目录实践、文件实践两个方面来学习。
 
关于数据卷的管理我们从两个方面来说:
1、目录
2、普通文件
 
数据卷实践之目录
命令格式:

docker run -itd --name [容器名字] -v [宿主机目录]:[容器目录] [镜像名称] [命令(可选)]

命令演示:
创建测试文件

echo "file1" > /tmp/file1.txt

启动一个容器,挂载数据卷

docker run -itd --name test1 -v /tmp:/test1 nginx

测试效果

~# docker exec -it a53c61c77 /bin/bash

root@a53c61c77bde:/# cat /test1/file1.txt

file1

 
数据卷实践之文件
命令格式:

docker run -itd --name [容器名字] -v [宿主机文件]:[容器文件] [镜像名称] [命令(可选)]

注意:容器里面的文件虽然可以改名,但类型必须和宿主机文件一致
命令演示:
创建测试文件

echo "file1" > /tmp/file1.txt

启动一个容器,挂载数据卷

docker run -itd --name test2 -v /tmp/file1.txt:/nihao/nihao.sh nginx

测试效果

~# docker exec -it 84c37743 /bin/bash

root@84c37743d339:/# cat /nihao/nihao.sh

file1

数据卷实践之删除

docker volume rm

docker volume prune

数据卷容器简介

这一节,我们从定义、命令详解、操作流程这三个方面来学习。
 
什么是数据卷容器?
将宿主机的某个目录,使用容器的方式来表示,然后其他的应用容器将数据保存在这个容器中,达到大批量应用数据同时存储的目的
 
docker 数据卷命令详解

# docker run --help

。。。

  -v, --volumes-from value       Mount volumes from the specified  container(s) (default [])

                                     从指定的容器挂载卷,默认为空

 
数据卷容器操作流程
如果使用数据卷容器,在多个容器间共享数据,并永久保存这些数据,需要有一个规范的流程才能做得到:

 

 

1、创建数据卷容器
2、其他容器挂载数据卷容器
注意:
数据卷容器不启动
 

数据卷容器实践

这一节,我们从创建、使用、效果查看三个方面来学习。
数据卷容器实践包括两部分:创建数据卷容器和使用数据卷容器
 
创建一个数据卷容器
命令格式:

docker create -v [容器数据卷目录] --name [容器名字] [镜像名称] [命令(可选)]

执行效果

docker create -v /data --name v-test nginx

创建两个容器,同时挂载数据卷容器
命令格式:

docker run --volumes-from [数据卷容器id/name] -tid --name [容器名字] [镜像名称] [命令(可选)]

执行效果:
创建 vc-test1 容器

docker run --volumes-from 4693558c49e8 -tid --name vc-test1 nginx  /bin/bash

创建 vc-test2 容器

docker run --volumes-from 4693558c49e8 -tid --name vc-test2 nginx  /bin/bash

确认卷容器共享
进入vc-test1,操作数据卷容器

~# docker exec -it vc-test1 /bin/bash

root@c408f4f14786:/# ls /data/

root@c408f4f14786:/# echo 'v-test1' > /data/v-test1.txt

root@c408f4f14786:/# exit

进入vc-test2,确认数据卷

~# docker exec -it vc-test2 /bin/bash

root@7448eee82ab0:/# ls /data/

v-test1.txt

root@7448eee82ab0:/# echo 'v-test2' > /data/v-test2.txt

root@7448eee82ab0:/# exit

回到vc-test1进行验证

~# docker exec -it vc-test1 /bin/bash

root@c408f4f14786:/# ls /data/

v-test1.txt  v-test2.txt

root@c408f4f14786:/# cat /data/v-test2.txt

v-test2

回到宿主机查看/data/目录

~# ls /data/

~#

 
结果证明:
容器间可以共享数据卷你容器,不过数据是保存在数据卷内,并没有保存到宿主机的文件目录中 
posted @ 2021-12-26 22:44  养柱  阅读(67)  评论(0)    收藏  举报