栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

【Docker】7、数据卷详解:具名挂载、匿名挂载、初识DockerFile、数据卷容器

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Docker】7、数据卷详解:具名挂载、匿名挂载、初识DockerFile、数据卷容器

1、什么是容器数据卷?

docker的理念回顾

将应用和环境打包成一个镜像!

如果数据都在容器中,那么容器删除,数据就会丢失!需求:数据可以持久化。如:MySQL,容器删除了,MySQL数据可以存储在本地!

容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!这就是卷技术!目录的挂载,将容器内的目录,挂载到Linux上面!

卷的作用:

容器数据的持久化和同步操作!容器间数据共享!

2、使用数据卷

方式一 :直接使用命令挂载 -v 宿主机目录:容器内目录

-v, --volume list                    Bind mount a volume

docker run -it -v 主机目录:容器内目录  -p 主机端口:容器内端口

# 把容器内的home目录,挂载(映射)到宿主机的/home/test目录
docker run -it -v /home/test:/home centos /bin/bash

查看挂载情况

# 该命令在宿主机环境下;容器内没有这个命令
docker inspect 容器id

测试

容器中修改文件,宿主机下查看

宿主机中修改文件,容器下查看

删除容器,查看宿主机下文件

3、测试安装 MySql

目的:需要将 MySql 中的配置信息和数据文件,同步到容器外部;如果 MySql 容器被删除时,数据依然存在

搜索下载 mysql

# 搜索 mysql
docker search mysql

# 下载 mysql 镜像;此处仅为测试;建议下载5.7,高版本mysql会有密码的加密规则
docker pull mysql:5.7

启动 mysql

数据挂载:-v 宿主机目录:mysql容器内文件或目录,可以有多个挂载 -v配置密码:-e MYSQL_ROOT_PASSWORD=密码

# 运行容器
# 需要做数据挂载
# 安装启动 mysql,需要配置密码
# 参考官网hub 
# docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

# 启动
# -d 后台运行
# -p 端口映射
# -v 卷挂载
# -e 环境配置
# -- name 容器名字
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

查看挂载目录

外部连接测试

在虚拟机之外用 Navicat 连接

删除 MySql 容器,查看挂载点数据

4、具名挂载和匿名挂载 1)匿名挂载
# 匿名挂载:不推荐
# -v 只有容器内路径!不指定宿主机目录;会生成随机的宿主机挂载目录
docker run -d -P --name 容器名称 -v 容器内路径

# 查看所有的 volume 的情况
docker volume ls

2)具名挂载
# 具名挂载:推荐
# 指明挂载点的文件名(卷名),不是路径
docker run -d -P --name nginx02 -v nginx02:/etc/nginx nginx

查看特定的卷

docker volume inspect 卷名

所有的 docker 容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/xxxx/_data下,如果指定了目录,docker volume ls 是查看不到的

3)三种挂载区分
区别挂载命令
匿名挂载-v 只指定容器内路径
具名挂载-v 卷名:容器内路径
指定路径挂载-v 宿主机指定路径:容器内路径
4)读写权限

在容器内路径后面加 :ro 或 :rw

ro readonly 只读;容器内无法修改,只能在宿主机的挂载点操作rw readwrite 可读可写

docker run -d -P --name nginx05 -v juming:/etc/nginx:ro nginx
5、初识DockerFile

方式二:使用DockerFile生成卷挂载

DockerFile 就是用来构建docker镜像的构建文件!这种方式使用的十分多,因为项目开发后会构建自己的镜像!

通过脚本生成镜像

# 创建一个dockerfile文件,名字可以随便 建议Dockerfile
# 文件中的内容 指令(大写) 参数
FROM centos

VOLUME ["volume01","volume02"]

CMD echo "----end----"
CMD /bin/bash
#这里的每个命令,就是镜像的一层!

生成镜像

# -f : file缩写;指的是dockerfile文件路径,下面例子为dockerfile1文件的所在目录下
# -t : target缩写;指的是生成镜像的名称,不是路径,前面不要加 /
# .  : 生成在当前目录下
docker build -f dockerfile1 -t tuwer/centos .

启动镜像

docker run -it tuwer/centos /bin/bash

查看卷挂载

同步测试

6、数据卷容器

不同容器间的挂载,可以实现数据同步

--volumes-from 被挂载容器

启动被挂载容器

# 指定容器名称为 centos01
docker run -it --name centos01 tuwer/centos

启动挂载容器

# 指定容器名称为 centos02
# --volumes-from centos01 挂载到容器 centos01 上
docker run -it --name centos02 --volumes-from centos01 tuwer/centos

测试容器间数据同步

在容器centos01下,进入volume01挂载目录,创建文件 test.txt在容器centos02下,进入对应的挂载目录volume01查看,发现目录内也有 test.txt,文件实现了同步

启动第三个容器,挂载第二个容器

容器3中创建文件,容器1和容器2中查看

删除容器1,查看容器2和容器3

结论:

容器间挂载后,数据的传递,不是简单的共享(不像windows中的快捷方式),而是复制(备份),有多少个挂载容器,就会存在多少份数据,当一个容器中的挂载数据变化后,会同步到其它容器;当删除任意一个容器后,其它容器中的数据不受影响;所以数据卷容器的生命周期一直持续到没有容器使用为止,只要有一个挂载容器存在,数据就不会丢失。如果数据挂载到外部宿主机,那么即使所有容器删除,宿主机中的对应数据也是不会删除的!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/751606.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号