文章主人公:帅哥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提出了Volume这个概念,简单的说就是绕过默认的联合 文件系统,而以正常的文件或者目录的形式存在于宿主机上。又被称作数据卷。
数据卷 是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:
- 数据卷 可以在容器之间共享和重用
- 对数据卷的修改会立马生效
- 对数据卷的更新,不会影响镜像
- 数据卷 默认会一直存在,即使容器被删除
创建数据卷命令:docker volume create BUG
使用 docker volume ls 查看所有数据卷注:指令解释docker: 只要是docker里面的东西,要执行指令的时候必须docker打头volume: 数据卷的意思create:创建整条下来就是:我要创建一个数据卷 它的名字是BUG
查看数据卷详情命令:docker volume inspect BUG划红线的是数据卷存放数据的路径
注:指令解释inspect:表示查看详细信息整条下来就是 :查看数据卷BUG的详细信息
删除数据卷命令:docker volume rm BUG使用 docker volume ls 查看所有数据卷 数据卷已经被删除了
注:指令解释rm:表示删除整条下来就是 :删除数据卷BUG数据卷 是被设计用来持久化数据的,它的生命周期独立于容器,Docker不会在容器被删除后自动 删除数据卷,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的数据卷,无主的数据卷 可能会占据很多空间,所以要及时删除.
想要容器使用数据卷那就让容器挂载数据卷把
挂载数据卷命令(在创建容器的时候挂载数据卷):docker run -itd \--name 容器名字 \--mount source=数据卷名称,target=容器中的对应目录 \镜像名称注:指令解释\ :是换行的意思 (也可以不打 \ 但是代码会不美观)
run:的意思是创建并且运行并且进入的到容器里面去 (我们之前创建容器的时候使用的是create 特别麻烦,给大家做个对比
从创建到进入我们想要用到三步才能进入容器,比较麻烦
使用 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 查看数据卷详情 获取到数据卷存放数据的路径
得到路径之后 我们cd 进入
ls 查看所有文件 发现有a.txt ,
我们使用cat 打开文件a.txt,
欧克 看到了我们在容器中编辑的内容,bb容器挂载了数据卷BUG,实现了数据共享了(可以理解为文件夹之间的共享),数据卷可以被多个容器挂载
挂载主机目录,应该是挂载当中最简单的一种方法了
挂主机目录命令(在创建容器的时候挂载主机目录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中)
cd /usr/local/java 进入
ls 查看所有文件 发现有a.txt ,
我们使用cat 打开文件a.txt,
欧克 看到了我们在容器中编辑的内容,bb容器挂载了主机目录java,实现了数据共享了(可以理解为文件夹之间的共享) 主机目录可以被多个容器挂载
数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其他容器挂载。
就是说我这个数据卷容器里面的目录或者文件夹数据可以给其他的容器去使用
数据卷容器用的不是特别多,还是要看自己的需求
创建数据卷容器命令
挂载数据卷容器命令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文件夹