云计算-Dokcer容器的数据管理

qshy
发布于 2022-4-25 21:16
浏览
0收藏

作者 | springboot葵花宝典
来源 | 今日头条

什么是数据卷

数据卷是可以供一个或者多个容器使用的特殊目录,它绕过UFS(UNIX文件系统),数据卷的设计目的,在于数据的持久化存储,它完全独立于容器的生命周期,所以在删除docker容器的时候不会删除其挂载的数据卷,也不存在类似垃圾收集机制,对容器挂载的数据卷进行处理。

数据卷有以下特点:

  • 数据卷在容器启动的时候进行初始化,如果容器使用的进行在挂载点包含数据,那么数据也会拷贝到初始化的数据卷中
  • 数据卷可以在容器之间进行共享或者重用
  • 可以对数据卷里面的内容直接进行修改
  • 数据卷的变化不会影响镜像的更新
  • 数据卷会一直存在,哪怕是挂载数据卷的容器被删除

容器的数据卷

为容器添加数据卷

-v 宿主机绝对路径:Docker容器内部绝对路径:叫挂载

我们还以centos为例:创建一个名为mycentos的容器,并且加载一个数据卷l在宿主机上的/centos/mydata,同步容器/data 目录下数据

docker run -v /centos/mydata:/data -it centos

此时已经进入容器,然后进入到/data目录

cd /data

此时该路径下不存在任何数据,我们在该目录下创建一个text.txt文件

touch text.txt

然后我们在宿主机的查看/centos/mydata下文件也存在text.txt云计算-Dokcer容器的数据管理-鸿蒙开发者社区

因为数据卷是独立存在的,所以此时我们删除容器,数据卷还会存在

docker rm -f  $(docker ps -qa) # 删除所有容器

-v 不以/开头的路径:Docker容器内部绝对路径:叫绑定

docker run -v  mydata:/data -it centos

其他步骤和上面一致,然后我们使用docker inspect 容器名查看容器的信息

docker inspect youthful_swanson

云计算-Dokcer容器的数据管理-鸿蒙开发者社区

发现在启动容器的时候自动创建了一个volume。

创建一个数据卷

 docker volume create mycentos

查看所有 数据卷

docker volume ls

云计算-Dokcer容器的数据管理-鸿蒙开发者社区

docker volume inspect mycentos:查询卷详情
docker volume mycentos: 移除无用卷

为数据卷添加访问权限

docker run -v /centos/mydata:/data:ro -it centos

:ro给容器内部添加只读权限,这样docker容器内的目录下就不能创建文件,只能在宿主机的/centos/mydata下创建文件。

使用Dockerfile构建包含数据卷的镜像

指令格式:

volume["/test"]

dockerfile文件如下

FROM nexus.gree.com/centos
VOLUME ["/mycentos1","/mycentos2"]
CMD /bin/bash

构建镜像

docker build -t  mycentos:v1  .

启动镜像,并进入容器

docker run --name mycentos2 -it mycentos:v1

查看容器目录,发现容器下有两个目录,/mycentos1和/mycentos2云计算-Dokcer容器的数据管理-鸿蒙开发者社区

Docker的数据卷容器

什么是数据卷容器

一个容器挂在数据卷,然后其他容器通过挂载这个容器实现数据共享,挂载数据卷的容器叫做数据卷容器

挂载数据卷容器的方法

docker run --volumes-from [容器名]

举例说明:

docker run --name mycentos3 -it mycentos:v1  #(mycentos镜像是之前上面的dockerfile创建的)

mycentos:v1镜像存在两个数据卷mycentos1和mycentos2

进入容器后创建一个文件在数据卷mycentos1创建testcentos.txt

touch /mycentos1/testcentos.txt

创建一个新的容器,挂载刚才mycentos3这个容器创建的数据卷

docker run --name mycentos4  --volumes-from mycentos3  -it mycentos:v1

然后查看mycentos4容器的mycentos1数据卷下也存在testcentos.txt。

docker cp指令

Docker cp指令有两种格式

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- :把容器里面的复制出来
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH:把外部的复制进去

OPTIONS说明:

  • **-L :**保持源目标中的链接

举例说明

  • 将/mydata/test目录拷贝到8899992容器的/mydata目录下
docker cp /mydata/test 8899992:/mydata
  • 将容器8899992的/mydata目录拷贝到主机/mydata目录下
docker cp  8899992:/mydata /mydata/

 

收藏
回复
举报
回复
    相关推荐