Docker数据管理之三种方式- 数据卷(Volumes)- 挂载主机目录(Bind mounts)- 数据卷容器(Data Volume Containers)

文章主人公:帅哥BUG

文章路人: 路人   路人 

docker在容器中管理数据主要有三种方式哦~

:  啊!,我记得docker在容器中管理数据主要方式是这两种吧 

- 数据卷(Volumes)
- 挂载主机目录(Bind mounts)
    
:  额,主要的方式是这两种?我怎么记得是这两种
数据卷 Data Volumes 
数据卷容器(Data Volume Containers )
okok,你们说的都没有错
本帅的第一位老师教我的时候
主要的方式是 数据卷和数据卷容器,这两种
哦对了 我还发布过数据卷和数据卷容器的文章 可以去看看
Docker之数据卷(Data Volumes)和数据卷容器(Data Volume Containers )_我敲BUG的博客-CSDN博客

本帅的第二位 老师教我的时候是说

docker在容器管理数据的方式是 数据卷和挂载主机目录 这两种 。

斯~ 额...  好吧其实都没有错 只是老师的习惯不一样吧  没有掌握另一种主要方式的你,好好看看吧!上内容!!!!!!!!!!


目录

前言:docker在容器中管理数据主要有三种方式:

- 数据卷(Volumes)

- 挂载主机目录(Bind mounts)

- 数据卷容器(Data Volume Containers)

 一.数据卷(Data Volumes)

 1.数据卷的使用

(1)创建数据卷 

(2).查看数据卷详细信息

(3).删除一个数据卷

2.挂载数据卷

二.挂载主机目录(Bind mounts)

三.数据卷容器(Data Volume Containers)

1.创建数据卷容器

2.挂载数据卷容器


前言:docker在容器中管理数据主要有三种方式:

- 数据卷(Volumes)

- 挂载主机目录(Bind mounts)

- 数据卷容器(Data Volume Containers)

 一.数据卷(Data Volumes)

为了很好的实现数据保存和数据共享,Docker提出了Volume这个概念,简单的说就是绕过默认的联合 文件系统,而以正常的文件或者目录的形式存在于宿主机上。又被称作数据卷。

数据卷 是一个可供一个或多个容器使用的特殊目录,它绕过 UFS
可以提供很多有用的特性:
  •    数据卷 可以在容器之间共享和重用
  •    对数据卷的修改会立马生效
  •    对数据卷的更新,不会影响镜像
  •    数据卷 默认会一直存在,即使容器被删除

 1.数据卷的使用

(1)创建数据卷 

创建数据卷命令:
docker volume create BUG
 
Docker数据管理之三种方式- 数据卷(Volumes)- 挂载主机目录(Bind mounts)- 数据卷容器(Data Volume Containers)_第1张图片
使用 docker volume ls 查看所有数据卷
注:指令解释 
docker: 只要是docker里面的东西,要执行指令的时候必须docker打头
volume: 数据卷的意思 
create:创建
整条下来就是:我要创建一个数据卷 它的名字是BUG

(2).查看数据卷详细信息

查看数据卷详情命令:
docker volume inspect BUG
Docker数据管理之三种方式- 数据卷(Volumes)- 挂载主机目录(Bind mounts)- 数据卷容器(Data Volume Containers)_第2张图片

 划红线的是数据卷存放数据的路径 

注:指令解释
inspect:表示查看详细信息
整条下来就是 :查看数据卷BUG的详细信息

(3).删除一个数据卷

删除数据卷命令:
docker volume rm BUG
Docker数据管理之三种方式- 数据卷(Volumes)- 挂载主机目录(Bind mounts)- 数据卷容器(Data Volume Containers)_第3张图片

 使用 docker volume ls 查看所有数据卷  数据卷已经被删除了

注:指令解释
rm:表示删除
整条下来就是 :删除数据卷BUG

  数据卷 是被设计用来持久化数据的,它的生命周期独立于容器,Docker不会在容器被删除后自动 删除数据卷,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的数据卷,无主的数据卷 可能会占据很多空间,所以要及时删除.  

2.挂载数据卷

想要容器使用数据卷那就让容器挂载数据卷把 

在用 docker run 命令的时候,使用 --mount 标记来将 数据卷 挂载到容器里。在一次 docker
run 中可以挂载多个 数据卷
挂载数据卷命令(在创建容器的时候挂载数据卷):
docker run -itd \
--name 容器名字 \
--mount source=数据卷名称,target=容器中的对应目录 \
镜像名称
注:指令解释

 \ :是换行的意思 (也可以不打 \ 但是代码会不美观)
run:的意思是创建并且运行并且进入的到容器里面去 (我们之前创建容器的时候

使用的是create  特别麻烦,给大家做个对比

Docker数据管理之三种方式- 数据卷(Volumes)- 挂载主机目录(Bind mounts)- 数据卷容器(Data Volume Containers)_第4张图片

 从创建到进入我们想要用到三步才能进入容器,比较麻烦

使用 run 创建容器,直接进入容器,省略了部分操作,

)

it:是两个参数,-i:interactive容器具有交互功能,-t:容器将提供伪终端

在-it 后面加了d是让容器后台运行的意思 

-- name:是给容器取个名字

--mount :表示进行挂载 

source= :指定容器要挂载的数据卷

target= :把数据卷挂载到容器中的这个目录或文件夹中

假设:target=/aa 我要把数据卷挂载到容器的aa文件夹或目录中 ,没有aa会自动帮你创建一个

centos:latest是即镜像名字:版本(或镜像ID),将使用指定镜像创建容器。另外,Docker会检查本地是否存在指定的镜像

docker run -it \
--name bb \
--mount source=BUG,target=/aa \
centos

整条下来就是:创建一个容器 bb 挂载数据卷 BUG ,把数据卷挂载到容器的aa文件夹中 基于centos 镜像进行创建

在容器中输入ls  进行查看 aa文件夹被创建好了 

cd 进入aa 文件夹  并且输出 Hello BUG 到 a.txt 里面去

输出命令 echo 'hello BUG'  > a.txt

(另外在开一个窗口,进入到数据卷的数据存放位置查看是否有a.txt)

先用 dockers volume inspect BUG  查看数据卷详情 获取到数据卷存放数据的路径

Docker数据管理之三种方式- 数据卷(Volumes)- 挂载主机目录(Bind mounts)- 数据卷容器(Data Volume Containers)_第5张图片

得到路径之后 我们cd 进入

ls 查看所有文件 发现有a.txt ,

我们使用cat 打开文件a.txt

欧克  看到了我们在容器中编辑的内容,bb容器挂载了数据卷BUG,实现了数据共享了(可以理解为文件夹之间的共享),数据卷可以被多个容器挂载

二.挂载主机目录(Bind mounts)

挂载主机目录,应该是挂载当中最简单的一种方法了

挂主机目录命令(在创建容器的时候挂载主机目录
docker run -itd \
--name 容器名字 \
--mount type=bind,source= 宿主机目录 ,target= 容器中的对应目录 \
镜像名称
 
注:指令解释
type=bind:表示挂载目录 
source=:指定你要给容器挂载的主机目录或文件夹
假设 source=/usr/local/java   那么意思就是我要把主机上的java文件夹共享给容器,这个文件夹主机没有的话要自己创建一个哦 使用 mkdir -p 进行多级创建 

 

target= :把主机目录挂载到容器中的这个目录或文件夹中

假设:target=/aa 我要把主机目录挂载到容器的aa文件夹或目录中 ,没有aa会自动帮你创建一个 

挂载主机目录命令还有简单的方式

docker run -itd \
--name 容器名字 \
-v  宿主机目录: 容器中的对应目录 \
镜像名称
这个指令和上面的指令效果是一样的

-v :表示进行命令挂载

docker run -it \
--name cc \
--mount type=bind,source=/usr/local/java,target=/aa \
centos

整条下来就是:创建一个cc容器进行目录挂载,我要挂载java目录,把java目录挂载到容器的aa目录中 基于centos创建容器

 在容器中输入ls  进行查看 aa文件夹被创建好了 

cd 进入aa 文件夹  并且输出 Hello 目录 到 a.txt 里面去

输出命令 echo 'hello 目录'  > a.txt

(另外在开一个窗口,进入到主机的java中)

Docker数据管理之三种方式- 数据卷(Volumes)- 挂载主机目录(Bind mounts)- 数据卷容器(Data Volume Containers)_第6张图片

cd /usr/local/java  进入

ls 查看所有文件 发现有a.txt ,

我们使用cat 打开文件a.txt

欧克  看到了我们在容器中编辑的内容,bb容器挂载了主机目录java,实现了数据共享了(可以理解为文件夹之间的共享) 主机目录可以被多个容器挂载

三.数据卷容器(Data Volume Containers)

如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。

 数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其他容器挂载。

就是说我这个数据卷容器里面的目录或者文件夹数据可以给其他的容器去使用

数据卷容器用的不是特别多,还是要看自己的需求

1.创建数据卷容器

创建数据卷容器命令
docker run -it --name 容器名称 -v 要共享出去的文件 centos
指令解释: 这个命令里面的 -v 的意思是 你要把容器里面的哪个文件夹共享出去
docker run -it --name c1 -v /aa centos
整条下来就是:创建一个c1数据卷容器,我要把c1中的aa文件夹(就算c1里面没有aa这个文件夹也会自动创建一个)共享出去,基于centos镜像创建
 
这个窗口先留着,我们另外在开一个窗口去挂载数据卷容器

2.挂载数据卷容器

挂载数据卷容器命令
docker run -it --name 容器名称 --volumes-from 数据卷容器名称 centos

指令解释:--vloume-from 表示数据卷容器来源
docker run -it --name c2 --volumes-from c1 centos
整条下来就是:我要创建一个容器c2 我要挂载的数据卷容器是c1(因为c1共享出来的文件夹是aa所以会在c2容器里面自动创建一个aa文件夹) 基于centos镜像创建
可以看到的是c2容器里面被创建了一个aa文件夹

cd 进入aa 文件夹  并且输出 Hello 目录 到 a.txt 里面去

输出命令 echo 'hello 数据卷容器'  > a.txt

我们回到c1的窗口查看以下是否有a.txt这个文件 并使用cat 打开文件

 欧克  看到了我们在容器c2中编辑的内容,c1数据卷容器也有,实现了容器和数据卷容器数据共享了(可以理解为文件夹之间的共享) 

:本章内容不多,你...学到了吗!觉得不错,记得一键三连哦~

Docker数据管理之三种方式- 数据卷(Volumes)- 挂载主机目录(Bind mounts)- 数据卷容器(Data Volume Containers)_第7张图片

你可能感兴趣的:(docker,容器,运维,linux,服务器)