docker之数据卷和数据卷容器

前言

Docker 数据管理
在生产环境中使用 Docker ,往往需要对数据进行持久化,或者需要在多个容器之间进行
数据共享,这必然涉及容器的数据管理操作

那么数据管理策略的方式有三种:
1、原始的copy到容器中
2、创建数据卷目录用来关联容器,数据是双向绑定的
3、创建数据卷容器,联系其他容器,数据是双向绑定的


一、原始的copy到容器中

语法:docker cp 需要拷贝的文件或者目录 容器名称:容器目录

docker cp /liwangwang/tomcat/ mycentos01:/javawwl/software

安装语法来就行,把宿主机的文件或内容放入到容器中。

ps:在放入容器的什么地方记得必须得保证有这个文件

在这里插入图片描述

二、创建数据卷目录用来关联容器,(数据是双向绑定的)

先看一组图片:

在这里插入图片描述

根据上面的图解,应该已经讲解了一半的问题了。
怎么说,
在上面传统的方法中,那仅仅是把文件copy过去了,
在这个方法中,是在宿主机上建好数据卷,把数据卷给挂载到其他容器上,以实现数据双向绑定。


1、创建数据卷

创建一个数据卷

docker volume create 名字

查看所有数据卷信息

docker volume ls

查看单个数据卷的详情

docker volume inspect 名字

在这里插入图片描述


2、挂载到容器上

在挂载之前我们做一个测试:
在这里插入图片描述

好了,准备工作做好了。

其实最简单的挂载方式就是在启动容器的时候挂载上去就行了
1、语法:

   docker run -d \
       -it \
       --name tomcat01 \
       --mount source=my-vol,target=/webapp \
       centos:7
	   
注意:此行命令执行后的效果是,宿主机路径/var/lib/docker/volumes/my-vol/_data与tomcat01容器路径/webapp完成映射

2、语法:

   docker run -d \
       -it \
       --name tomcat01 \
       --mount type=bind,source=/javawwl,target=/webapp \
       centos:7
	   
注意:此行命令执行后的效果是,宿主机路径/javawwl与tomcat01容器路径/webapp完成映射

ps:linux命令结尾加斜杠有什么用?
加了“\”意为将最后的回车换行给注释了,系统理解为命令还没有结束,因而是继续等待用户进行输入,直到读到结束符,如回车

当然也可以看下面的:

docker run -d -it --mount source=my-vol,target=/webapp --name tomcat01 centos

在这里插入图片描述
查看一下结果:
在这里插入图片描述

在这个时候就已经搭好了双向绑定,可以自行测试;

		  :mount选项高级用法
          --mount选项的type参数支持三种类型的数据卷
          --mount标志:由多个名值对组成,逗号分隔,每个键值由 <key> = <value> 元组组成 
          1.type=volume普通数据卷(默认即这种类型),映射到主机/var/lib/docker/volumes路径下;
            --mount type=volume,source=my-vol,target=/webapp
            注:这是type的默认值
          2.bind:绑定数据卷,映射到主机指定路径下;
            --mount type=bind,source=/webapp,destination=/webapp2
          3.tmpfs :临时数据卷,只存在于内存中
            docker run -d \
              -it \
              --name tmptest \
              --mount type=tmpfs,destination=/app \
              nginx:latest


3、删除数据卷

语法:

docker volume rm 名字

三、创建数据卷容器,联系其他容器,(数据是双向绑定的)

look this:
在这里插入图片描述

就是连接到其他容器的一个关联数据卷容器。

ok,上面的双向绑定的概念已经讲明白了,所以下面为了不太复杂,所以就写如何实现代码

1、新建数据卷容器

 docker run -di --name db_data -v /db_data centos:7
 注:-v 后面接的共享数据真实存放路径

在这里插入图片描述

2、新建依赖于数据卷容器的容器

语法:

  docker run -di --name 名字--volumes-from 数据卷容器 centos:7
  进入:
  docker exec -it db1 bash

在这里插入图片描述

同样方法创建另一个db2。

方法如上面一样自行测试即可
然后进行测试:

在这里插入图片描述

后记

这里有个小东西要给大家讲一下:
如果是用-di 启动的容器是没办法用 attach 进入到容器的,会卡死。
但是可以用 docker exec -it 名字 bash 进入

如果是用-it 启动的容器是没有问题的,依然可以用attach进入。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章