docker容器数据卷的使用

什么是容器数据卷

docker的理念回顾

  • 将应用和运行的环境打包形成容器运行,运行可以伴随着容器,但是我们对于数据的要求,是希望能够持久化的!
    就好比,你安装一个MySQL,结果你把容器删了,就相当于删库跑路了.
  • 所以我们希望容器之间有可能可以共享数据,Docker容器产生的数据,如果不通过docker commit 生成新的镜像,使得数据作为镜像的一部分保存下来,
    那么当容器删除后,数据自然也就没有了!这样是行不通的!
    为了能保存数据在Docker中我们就可以使用卷!通过目录的挂载将我们容器内目录挂载到Linux上面!让数据挂载到我们本地!这样数据就不会因为容器删除而丢失了!

作用

  • 卷就是目录或者文件,存在一个或者多个容器中,由docker挂载到容器,但不属于联合文件系统,
    因此能够绕过 Union File System ,提供一些用于持续存储或共享数据的特性:
    卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。

特点

1、数据卷可在容器之间共享或重用数据
2、卷中的更改可以直接生效
3、数据卷中的更改不会包含在镜像的更新中
4、数据卷的生命周期一直持续到没有容器使用它为止
总结为:就是容器的持久化,以及容器间的继承和数据共享!

使用数据卷

容器中直接使用命令来添加 -v

  • 挂载
# 命令
docker run -it -v 主机绝对路径目录:容器内目录 镜像名

# 测试
[root@zheng ~]# docker run -it -v /home/ceshi:/home centos /bin/bash
  • 查看数据卷是否挂载成功
docker inspect 容器id #获取镜像元数据

  • 测试容器和宿主机之间数据共享:可以发现,在容器中,创建的会在宿主机中看到!
cd /home			 #容器内进入/home目录
ls					 #容器内查看没有test.txt文件
touch test.txt		 #容器内随便创建一个文件
ls					 #查看创建好的test.txt文件
cd /home/ceshi		 #主机内进入挂载的路径
即可看到有test.txt	 #已经同步有test.txt文件
  • 测试容器停止退出后,主机修改数据是否会同步?
#1.停止容器
#2.在宿主机上修改文件,增加些内容
#3.启动刚才停止的容器
#4.然后查看对应的文件,发现数据依旧同步!ok
exit容器
cd /home/ceshi  #进入主机内路径
ls				#查看有之前的test.txt文件
vim test.txt	#使用vim往里面写东西(随便写)
docker ps -a 	#查看后台运行的容器
docker start 容器ID  #启动容器
docker attach 容器ID #进入正在运行的容器
cd /home		#进入容器内路径
ls				#查看之前的test.txt文件
cat test.txt	#查看里面内容已经同步

便捷之处:以后修改数据只需要在本地修改即可,容器内会自动同步!

使用 docker 安装 mysql

# 1、搜索镜像
[root@zheng ~]# docker search mysql
NAME	DESCRIPTION
STARS
mysql	MySQL is a widely used, open-source
relation…	9488

# 2、拉取镜像
[root@zheng ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
54fec2fa59d0: Already exists
bcc6c6145912: Pull complete
951c3d959c9d: Pull complete
05de4d0e206e: Pull complete
319f0394ef42: Pull complete
d9185034607b: Pull complete
013a9c64dadc: Pull complete
e745b3361626: Pull complete
03145d87b451: Pull complete
3991a6b182ee: Pull complete
62335de06f7d: Pull complete
Digest:
sha256:e821ca8cc7a44d354486f30c6a193ec6b70a4eed8c8362aeede4e9b8d74b8ebb
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

# 3、启动容器 做数据卷挂载,-e 配置环境变量!
# 注意: mysql的数据应该不丢失!先体验下 -v 挂载卷! 参考官方文档
[root@zheng 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 数据卷挂载 两个-v可挂载两个;-e配置初始密码;--name 起名字。

# 4、使用本地的sqlyog连接测试一下 3310
sqlyog->连接到服务器的3310—>3310和容器内3306映射,此时就可以连接上了

# 5、查看本地的 /home/mysql 目录
 在sqlyog里创建一个文件
[root@zheng ~]# cd /home/mysql/data
[root@zheng data]# ls
... ... ... test # 在sqlyog上建立的mysql数据库在本地存储着,数据绑定在本地了

# 6、删除mysql容器
[root@zheng data]# docker rm -f mysql01 # 删除容器
mysql01
[root@zheng data]# ls
.. ... . test	# mysql数据库在本地存储着,数据不会丢失!!!
  • 可发现,我们挂载到本地的数据卷依旧没有丢失,这就实现了容器数据持久化功能!
posted @ 2022-04-04 15:38  郑琰  阅读(158)  评论(0编辑  收藏  举报
#

# #