Docker (八)容器数据卷使用
什么是容器数据卷!
docker的理念回顾
将应用和环境打包成一个镜像
如果数据都在容器中,那么我们容器删除,数据就会丢失!
容器删了,等同于MySQL删库跑路!
需求:数据可以持久
MySQL数据可以存储再本地
容器之间可以有一个数据共享的技术! Docker容器中产生的数据,同步到本地!
这就是卷技术,目录的挂载,将我们容器内的目录,挂载在Linux上!
总结:为什么要用卷? 容器的持久化和同步操作! 容器间可是可以数据共享的 !
使用数据卷
方式一:直接使用命令来挂载 -v
docker run -it -v 主机目录:容器内目录
测试:
[root@localhost home]# docker run -it -v /home/ceshi:/home centos /bin/bash
#启动起来之后可以通过 docker inspect 容器id 查看挂载情况
测试文件同步
再测试
1.停止容器
2.宿主机上修改文件
3.启动容器
4.宿主机上修改的文件会同步到容器上
好处:我们以后修改只需要在本地修改即可,容器内会自动同步!
**
实战:安装MySQL
思考,MySQL的数据持久化的问题
#获取镜像
[root@localhost home]# docker pull mysql:5.7
#运行容器,需要做数据挂载 安装mysql ,需要配置密码,这是要注意的!
#启动MySQL
[root@localhost home]# 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
-d后台运行
-p端口映射
-v卷挂载
-e环境配置
--name 容器名字
#启动成功之后,使用我们本地sqlyog 来连接测试一下
#sqlyog 连接到服务器的3310 , 3310端口和容器内的3306端口映射,这个时候我们是可以连接上的!
#在本地测试创建一个数据库,查看一下我们映射的路径是否OK.
假设我们将容器删除
发现, 我们挂载到本地的数据卷依旧没有丢失,这就实现了容器数据持久化功能!
具名和匿名挂载
> #匿名挂载:
> -v 容器内路径!
> docker run -d -P --name nginx01 -v /etc/nginx nginx
>
> #查看所有卷的名字
> [root@localhost data]# docker volume list
> DRIVER VOLUME NAME
local 2ffcf5982416180d2004004a326d149fcfbbb07e5e271e6148a65f8ff0576c82
local 70071cdbb61b5c9b60b536f68d65c6b6379036ecad18f7ffa0b622e4be3c1f4d
#这里发现,这种就是匿名挂载,我们在-v只写了容器内的路径,没有写容器外的路径!#具名挂载
[root@localhost data]# docker run -d -P --name naginx02 -v juming-nginx:/etc/nginx nginx
2c931432ece0880db81d3489aeaf7c68896b6f19edb1a63f0889cb4349d54f31
[root@localhost data]# docker volume list
DRIVER VOLUME NAME
local 2ffcf5982416180d2004004a326d149fcfbbb07e5e271e6148a65f8ff0576c82
local 70071cdbb61b5c9b60b536f68d65c6b6379036ecad18f7ffa0b622e4be3c1f4d
local juming-nginx
#通过 -v 卷名:容器内路径 指定挂载目录
#查看一下具名挂载的卷
[root@localhost data]# docker volume inspect juming-nginx
[{"CreatedAt": "2020-12-02T14:38:23+08:00","Driver": "local","Labels": null,"Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data","Name": "juming-nginx","Options": null,"Scope": "local"}
]
所有的docker 容器内的卷, 没有指定目录的情况下,都是在 ‘/var/lib/docker/volumes/****/_data’
我们通过具名挂载可以方便的找到我们一个卷,大多数情况都是在使用 **具名挂载的**
#如何确定是具名挂载还是匿名挂载,还是指定路径挂载
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径:容器内路径 #指定路径挂载
拓展:
#通过 -v 容器内路径:ro rw 改变读写权限
ro readonly #只读
rw readwrite #客户可写
#一旦设置了容器权限,容器对我们挂载出来的内容就有限定了!
#ro 只能通过宿主机来操作,容器内部是无法操作的
[root@localhost _data]# docker run -d -P --name naginx02 -v juming-nginx:/etc/nginx:ro nginx
[root@localhost _data]# docker run -d -P --name naginx02 -v juming-nginx:/etc/nginx:rw nginx
初识Dockerfile
Dokcerfile 就是用来构建docker镜像的文件! 命令脚本!
通过脚本可以生成镜像, 镜像是一层一层的对应的脚本一个个的命令,每个命令都是一层!
#创建一个dockerfile文件,名字可以随机创建 Dockerfile
#文件中的内容 指令(全大写) 参数
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "------end------"
CMD /bin/bash
#这里的每个命令, 就是镜像的一层!
[root@ayu docker-test-volume]# docker build -f /home/docker-test-volume/dockerfiles1 -t ayu/centos:1.0 .
Sending build context to Docker daemon 2.56kB
Step 1/4 : FROM centos---> 0d120b6ccaa8
Step 2/4 : VOLUME ["volume01","volume02"]---> Running in 23d35563221e
Removing intermediate container 23d35563221e---> c2ee1d592bea
Step 3/4 : CMD echo "------end------"---> Running in 0a32dfa3e2f9
Removing intermediate container 0a32dfa3e2f9---> 56176e942fbf
Step 4/4 : CMD /bin/bash---> Running in c91cd3c7eb1e
Removing intermediate container c91cd3c7eb1e---> 1b716b9264d7
Successfully built 1b716b9264d7
Successfully tagged ayu/centos:1.0
#启动容器
这个卷和外部一定是有一个同步的目录
查看一下卷挂载的路径
测试一下刚才在容器中创建的文件 是否有同步出去!
这种方式我们在未来会是用的十分多, 因为我们通常会构建自己的镜像!
假设构建镜像时候没有挂在卷,要手动镜像挂载 -v 卷名:容器内路径
数据卷容器
两个或多个mysql同步数据
#通过刚刚创建的镜像启动三个容器!
ctrl+p+q 退出容器继续运行下一个容器!
Docker (八)容器数据卷使用相关推荐
- docker之容器数据卷
目录 1.使用volume添加数据卷 2.dockerFile添加数据卷 3.数据卷容器 4.dockerFile解析 4.1dockerfile解析过程 4.2 dockerfile保留关键字 介绍 ...
- Docker 使用容器数据卷 实现宿主机与容器共享数据 容器数据持久化
容器数据卷:可以实现宿主机与容器进行共享.容器数据持久化,容器与容器共享数据.可以在run镜像时使用-v参数指定宿主机与容器进行挂载的目录,也可以使用dockerfile的volume指定容器中容器数 ...
- docker容器数据卷基本操作
在实际运用中,如果使用docker部署应用的时候,有这么一种情况,需要有个位置可以同步docker容器上的数据到服务器上,更通俗点讲,我们需要在服务器上开启一个位置,这个位置可以连接docker容器中 ...
- Docker容器数据卷讲解
概述 为什么Docker需要容器数据卷技术:如果没有数据卷技术,比如一个由mysql镜像创建运行的容器,产生的数据就会保存在容器中,数据的生命周期与容器的生命周期一致,如果删除了该容器,相应的数据也会 ...
- docker入门,镜像,容器,数据卷,dockerfile,docker网络,springboot微服务打包docker镜像[狂神yyds]
docker学习大纲 docker概述 docker安装 docker命令 镜像命令 容器命令 操作命令 - docker镜像 容器数据卷 dockerfile docker网络原理 IDEA整合do ...
- SpringBoot 入坑(八)Docker 暴露端口 容器数据卷 基本使用
Docker端口+数据卷 1).暴露端口 2).容器数据卷使用 1).暴露端口 1.在不暴露端口的情况下启动tomcat docker run -d --name mTM01 tomcat 通过宿主机 ...
- docker 数据卷 mysql_Docker容器数据卷原理及使用方法解析
什么是容器数据卷 如果数据都在容器中,一旦容器删除,数据就会丢失! eg : mysql容器删了,就是我们常说的删库跑路. 需求:数据可以持久化,即时删掉容器,我们的数据还在 容器直接可以有一个数据共 ...
- Docker镜像、容器数据卷和Dockerfile
Docker镜像 概述 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码.运行时.库.环境变量和配置文件. UnionFS ...
- Docker系列 五.Docker容器数据卷
五.Docker容器数据卷 环境&工具: 阿里云轻量级服务器.CentOS 7系统.FinalShell(其他连接客户端也可以) 是什么 docker的理念将运行的环境打包形成容器运行,运行可 ...
最新文章
- 改变2020年及未来的8大人工智能趋势
- r230/r250/m200
- 【python笔记】python模块 datatime模块
- .so是什么文件_安卓 so 文件解析详解
- debian 9.4 安装教程 linux系统debian9.4图文详细安装步骤
- LINUX下定时备份MYSQL数据库SHELL脚本
- c/c++教程 - 2.3 函数的提高 函数的形参列表默认值 占位参数 函数重载
- 2018-2019-2 网络对抗技术 20165115 Exp6 信息搜集与漏洞扫描
- 【计算机网络】【硬件】交换机芯片介绍
- 小程序图片裁剪组件基于image-cropper(修改版)
- svn里 is already locked
- 我的前端“先行”之路
- 奇趣分享综合趣事百科文章类型discuz模板
- 推荐关于ElasticSearch的好文
- 招商银行笔试题之X游戏
- alanwang[GDOU] 直接插入排序法简单演示
- CodeForces - 1485D Multiples and Power Differences (构造+lcm)
- 虚拟机包OVF和OVA的区别
- 题解1211判断元素是否存在
- 纯干货!埃森哲的大数据分析框架分享-part 1
热门文章
- sklearn 的基本机器学习(分类方法)
- leetcode 974. Subarray Sums Divisible by K
- sql中以sa命名的用户名无法使用,错误码1845
- Spark常见错误剖析与应对策略
- 高效深度学习:让模型更小、更快、更好!
- 用python采集数据_python数据分析4之自动采集数据
- Verilog-组合电路设计
- 02-组件注册-@ComponentScan-自动扫描组件指定扫描规则
- py2neo的neo4j数据库增删改查节点node、关系relationship、属性property操作
- thinkcmf5.1项目实现pc端和wap手机端自动切换