【Docker】7、数据卷详解:具名挂载、匿名挂载、初识DockerFile、数据卷容器
1、什么是容器数据卷?
docker的理念回顾
将应用和环境打包成一个镜像!
- 如果数据都在容器中,那么容器删除,数据就会丢失!需求:数据可以持久化。如:MySQL,容器删除了,MySQL数据可以存储在本地!
容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!这就是卷技术!目录的挂载,将容器内的目录,挂载到Linux上面!
卷的作用:
- 容器数据的持久化和同步操作!
- 容器间数据共享!
2、使用数据卷
方式一 :直接使用命令挂载
-v 宿主机目录:容器内目录
-v, --volume list Bind mount a volumedocker 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 只指定容器内路径
|
docker volume inspect 卷名 | 随机 |
/var/lib/docker/volumes/xxxx/_data
|
具名 [推荐] |
-v 卷名:容器内路径
|
docker volume inspect 卷名 | 指定 |
/var/lib/docker/volumes/xxxx/_data
|
指定路径 |
-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 centosVOLUME ["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中的快捷方式),而是复制(备份),有多少个挂载容器,就会存在多少份数据,当一个容器中的挂载数据变化后,会同步到其它容器;当删除任意一个容器后,其它容器中的数据不受影响;所以数据卷容器的生命周期一直持续到没有容器使用为止,只要有一个挂载容器存在,数据就不会丢失。
- 如果数据挂载到外部宿主机,那么即使所有容器删除,宿主机中的对应数据也是不会删除的!
【Docker】7、数据卷详解:具名挂载、匿名挂载、初识DockerFile、数据卷容器相关推荐
- android studio 跳转后保留原页面数据_Intent详解以及Activity的跳转与数据传递
在上一次讲述Activity的时候,还有一个非常重要且常用的知识点没有讲,就是不同Activity之间的跳转和数据传递.我们在平常在使用app应用的时候,Activity的跳转和数据传递是经常会接触到 ...
- Oracle数据泵详解
Oracle数据泵详解 Oracle Database 10g中采用了数据泵(Data Dump)技术,使DBA或开发人员可以将数据库元数据(对象定义)和数据快速移动到另一个oracle数据库中 ...
- Docker容器数据卷详解
文章目录 1. 数据卷介绍 2. 简单使用 3. MySQL容器建立数据卷同步数据 4. 常用命令 5. 具名挂载和匿名挂载 5.1 匿名挂载 5.2 具名挂载 6. Dockerfile中设置数据卷 ...
- Docker的基础知识详解(镜像,容器,网络)
文章目录 Docker 一. Docker的概述 1. Docker为什么会出现 2. Docker能干什么 3. Docker的组成 4. Docker的运行流程 5. Docker的底层原理 二. ...
- kubernetes系列10—存储卷详解
kubernetes系列10-存储卷详解 1.认识存储卷 1.1 背景 默认情况下容器中的磁盘文件是非持久化的,容器中的磁盘的生命周期是短暂的,这就带来了一系列的问题:第一,当一个容器损坏之后,kub ...
- Docker(十四):Docker:网络模式详解
Docker作为目前最火的轻量级容器技术,牛逼的功能,如Docker的镜像管理,不足的地方网络方面. Docker自身的4种网络工作方式,和一些自定义网络模式 安装Docker时,它会自动创建三个网络 ...
- Docker:网络模式详解
http://www.cnblogs.com/zuxing/articles/8780661.html Docker:网络模式详解 袖珍指南 Docker作为目前最火的轻量级容器技术,牛逼的功能,如D ...
- Docker持续部署图文详解
2019独角兽企业重金招聘Python工程师标准>>> Docker持续部署图文详解 博客分类: docker 架构 JAVA项目如何通过Docker实现持续部署(只需简单四步),即 ...
- 基于Kubernetes构建Docker集群管理详解
from: 基于Kubernetes构建Docker集群管理详解 Kubernetes是Google开源的容器集群管理系统,基于Docker构建一个容器的调度服务,提供资源调度.均衡容灾.服务注册.动 ...
最新文章
- 【通俗理解】差模电压和共模电压
- 【MyBatis使用】mapper.xml 文件内<if test>标签判断参数值不等于null和空 当参数值为 0 时筛选条件失效原因分析(源码探究)
- webdriverAPI-Java
- Spring boot (1)--- 第一个应用程序helloworld
- 为什么要远程连接Linux
- Centos7下Yum安装PHP5.5,5.6,7.0
- 敏友的【敏捷个人】有感(6): 我的改变从执行力分享开始
- 没有计算机基础可以学python-Python的学习,都需要具备哪些计算机基础知识?
- 斯坦福大学CS143编译原理课程笔记:2.编译器结构
- 如何用C语言编写字母游戏,怎么样用C语言编写一个小游戏?
- 及时搜索工具下载地址 listary
- 清华女硕士代言西湖名胜六和塔(组图),张姣怡,杭州西湖六和塔
- 如何调出手机信任计算机的指令,如何取消信任iPhone或iPad上的计算机 | MOS86
- 深度学习——DRD-Net
- BOF——Bag-of-Featrures
- 黎曼猜想(一) 欧拉乘积式
- NRF52832学习笔记(19)——TWI(I2C)接口使用
- 2011年国外最受欢迎的15个儿童网站
- 荒野行动服务器维护什么时候好,荒野行动12月21日服务器维护到几点 12月21日具体开服时间公告...
- php开源堡垒机,Jumpserver开源跳板机(堡垒机)