废话不多说直接操作

1.启动一个MySQL测试容器
[root@localhost labs]# docker pull mysql  #下载MySQL镜像
[root@localhost labs]# docker run -d --name mysql1 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql #启动一个测试容器,注意 MYSQL_ALLOW_EMPTY_PASSWORD 参数为使用空密码,需要使用true显示设置
root@localhost labs]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6ea6b8b8988a mysql "docker-entrypoint..." seconds ago Up seconds /tcp, /tcp mysql1
2.查看MySQL volume信息(在MySQL dockerfile中定义了VOLUME /var/lib/mysql)
[root@localhost labs]# docker volume ls  #查看当前主机上docker volume
DRIVER VOLUME NAME
local 454e122fc14e377e8328dbd66fb20751ccf6c0cf55988956bcee20dd2e1fcf4b
[root@localhost labs]# docker volume inspect 454e122fc14e377e8328dbd66fb20751ccf6c0cf55988956bcee20dd2e1fcf4b
[
{
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/454e122fc14e377e8328dbd66fb20751ccf6c0cf55988956bcee20dd2e1fcf #在宿主机上的路径
"Name": "454e122fc14e377e8328dbd66fb20751ccf6c0cf55988956bcee20dd2e1fcf4b",
"Options": {},
"Scope": "local"
}
]
3.再创建一个MySQL测试容器并观察volume信息
[root@localhost labs]# docker run -d --name mysql2 -e MYSQL_ALLOW_EMPTY_PASSWORD=true  mysql
c228c2caa839d51f9da356912dc56d3689f43ab8efecb97edb65f5557fb5ef02
[root@localhost labs]#
[root@localhost labs]# docker volume ls
DRIVER VOLUME NAME
local 454e122fc14e377e8328dbd66fb20751ccf6c0cf55988956bcee20dd2e1fcf4b
local 5c10a74e6798a503aa0c7a76412c7d27ab17e1e817843057b19c2acb2829c87b
[root@localhost labs]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORT
c228c2caa839 mysql "docker-entrypoint..." seconds ago Up seconds
6ea6b8b8988a mysql "docker-entrypoint..." seconds ago Up seconds
[root@localhost labs]# docker volume inspect 5c10a74e6798a503aa0c7a76412c7d27ab17e1e817843057b19c2acb2829c87b
[
{
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/5c10a74e6798a503aa0c7a76412c7d27ab17e1e817843057b19c2acb2829c8
"Name": "5c10a74e6798a503aa0c7a76412c7d27ab17e1e817843057b19c2acb2829c87b",
"Options": {},
"Scope": "local"
}
]
4.删除刚刚创建的两个测试容器,查看volume是否还在
[root@localhost labs]# docker rm -f mysql1
mysql1
[root@localhost labs]# docker rm -f mysql2
mysql2
[root@localhost labs]# docker volume ls #在容器被删除时,volume并不会被删除
DRIVER VOLUME NAME
local 454e122fc14e377e8328dbd66fb20751ccf6c0cf55988956bcee20dd2e1fcf4b
local 5c10a74e6798a503aa0c7a76412c7d27ab17e1e817843057b19c2acb2829c87b
5.删除所有volume
[root@localhost labs]# docker volume rm 454e122fc14e377e8328dbd66fb20751ccf6c0cf55988956bcee20dd2e1fcf4b 5c1017e1e817843057b19c2acb2829c87b
454e122fc14e377e8328dbd66fb20751ccf6c0cf55988956bcee20dd2e1fcf4b
5c10a74e6798a503aa0c7a76412c7d27ab17e1e817843057b19c2acb2829c87b
[root@localhost labs]# docker volume ls
DRIVER VOLUME NAME
6.使用-v参数绑定一个volume,并查看volume信息
[root@localhost labs]# docker run -d --name mysql1 -v mysql:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=true   #使用-v 参数绑定。/var/lib/mysql值于docker VOLUME的值一致
fe98466f9854c14657aa4b2139c060283c965a82e67c436f8a072b6961d0770d
[root@localhost labs]# docker volume ls
DRIVER VOLUME NAME
local mysql
[root@localhost labs]# docker volume inspect mysql
[
{
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/mysql/_data", #可以看到挂载路径名称变为了我们指定的名称
"Name": "mysql",
"Options": {},
"Scope": "local"
}
]
7.进入mysql1容器内部,新建一个库名称为docker,然后退出容器并删除容器
[root@localhost labs]# docker exec -it mysql1 /bin/bash
root@fe98466f9854:/# mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is
Server version: 8.0. MySQL Community Server - GPL Copyright (c) , , Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
rows in set (0.01 sec) mysql> create database docker;
Query OK, row affected (0.00 sec) mysql> show databases;
+--------------------+
| Database |
+--------------------+
| docker |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
rows in set (0.00 sec) mysql> exit
Bye
root@fe98466f9854:/# exit
exit
[root@localhost labs]# docker rm -f mysql1
mysql1
[root@localhost labs]# docker ps -a
8.查看volume是否还存在
[root@localhost labs]# docker volume ls
DRIVER VOLUME NAME
local mysql
9.新建一个mysql2测试容器,并绑定mysql volume
[root@localhost labs]# docker run -d --name mysql2 -v mysql:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=true  mysql
29398d828164f046f7f605cfa32028079aab241bcf4fda0f11c4889cbc71036b
[root@localhost labs]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
29398d828164 mysql "docker-entrypoint..." seconds ago Up seconds /tcp, /tcp mysql2
10.进入mysql2容器,查看在mysql1中的库
[root@localhost labs]# docker exec -it mysql2 /bin/bash
root@29398d828164:/# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is
Server version: 8.0. MySQL Community Server - GPL Copyright (c) , , Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases;
+--------------------+
| Database |
+--------------------+
| docker | #mysql1上新建的docker库mysql2挂载后依然存在
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+

总结:

.在Dockerfile中使用VOLUME关键字可以为镜像定义一个volume卷,在使用镜像创建容器时会自动创建一个,名称默认为一串UUID,使用-v参数则目录名是volume名称。volume里的数据都存储在这个子目录的_data目录下。
.Docker Volume能让容器从宿主主机中读取文件或持久化数据到宿主主机内,让容器与容器产生的数据分离开来。你可以简单地把它理解为linux服务器上的挂载点。一个容器可以挂载多个不同的目录。Volume的生命周期是独立于容器的生命周期之外的,即使容器删除了,volume也会被保留下来,Docker也不会因为这个volume没有被容器使用而回收。在容器中,添加或修改这个文件夹里的文件也不会影响容器的联合文件系统。

数据持久化之Data Volume的更多相关文章

  1. Docker容器的数据卷(data volume),数据卷容器,数据卷的备份和还原。

    Docker容器的数据卷(data volume),数据卷容器,数据卷的备份和还原. 数据卷就是数据(一个文件或者文件夹). Docker的理念之一是将应用与其运行的环境打包,docker容器的生命周 ...

  2. iOS数据持久化 -- Core Data-备用

    Core Data是一个功能强大的层,位于SQLite数据库之上,它避免了SQL的复杂性,能让我们以更自然的方式与数据库进行交互.Core Data将数据库行转换为OC对象(托管对象)来实现,这样无需 ...

  3. iOS数据持久化 -- Core Data

    Core Data是一个功能强大的层,位于SQLite数据库之上,它避免了SQL的复杂性,能让我们以更自然的方式与数据库进行交互.Core Data将数据库行转换为OC对象(托管对象)来实现,这样无需 ...

  4. docker--数据持久化之Data Volume

    使用mysql为例 查看docker hub官方的mysql image 的dockerfile,有这一行:VOLUME /var/lib/mysql -v给volume创建别名 [root@loca ...

  5. Named Volume 在 MySQL 数据持久化上的基本应用

    原文作者:春哥 初识春哥时,春哥是美术设计大咖.后不久,创业并致力于游戏开发,已有3年.从Unity3D到IOS(Swift)开发,从前端开发到后端以及容器技术,从设计开发测试到产品经理以及CEO,已 ...

  6. 22. docker 数据持久化 Data Volume

    1 . 使用场景 在docker 容器被删除的时候  希望数据不丢失 2 . Volume 的使用 * 注意 在 mysql 的 Dockerfile 内 定义了 VOLUME ["var/ ...

  7. [Docker] 容器持久化数据的首选机制 Volume

    Volume 是 docker 容器生成持久化数据的首选机制.bind mounts 依赖主机机器的目录机构,volume 完全由 docker 管理.volume 较 bind mounts 有几个 ...

  8. Docker Swarm volume 数据持久化

    Docker Swarm volume 数据持久化 volume 是将宿主级的目录映射到容器中,以实现数据持久化. 可以用两种方式来实现: volume 默认模式:工作节点宿主机数据同步到容器内. v ...

  9. Docker 容器数据卷(Data Volume)与数据管理

    卷(Volume)是容器中的一个数据挂载点,卷可以绕过联合文件系统,从而为Docker 提供持久数据,所提供的数据还可以在宿主机-容器或多个容器之间共享.通过卷,我们可以可以使修改数据直接生效,而不必 ...

随机推荐

  1. PAT 1002 A+B for Polynomials(map模拟)

    This time, you are supposed to find A+B where A and B are two polynomials(多项式). Input Each input fil ...

  2. Web前端——css

    css 推荐的样式编写顺序: Positioning:定位 Box model:盒子模型.大小等 Typographic:文字系列.排印等 Visual:可视化.背景等 Misc:其它混杂模式 居中 ...

  3. python基础(2):python的安装、第一个python程序

    1. 第一个python程序 1.1 python的安装 自己百度,这是自学最基本的,安装一路确定即可,记得path下打钩. 1.2 python的编写 python程序有两种编写方式: 1.进入cm ...

  4. Python爬取《冰雪奇缘2》豆瓣影评

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 刘铨@CCIS Lab PS:如有需要Python学习资料的小伙伴可 ...

  5. CSS符合选择器

    CSS复合选择器 后代选择器 后代选择器又称为包含选择器,可以选择父元素里面的子元素.其写法就是把外层标签写在前面,内层标签写在后面,中间用空格分隔,当标签发生嵌套时,内层标签就成为外层标签的后代 元 ...

  6. js监听屏幕方向如何第一次默认不监听

    this.supportOrientation = typeof window.orientation === 'number'; // 检查屏幕方向 checkScreenOrientation() ...

  7. 仓库管理移动应用解决方案——C#开发的移动应用开源解决方案

    产品简介 SmoWMS是一款仓库管理移动解决方案,通过Smobiler平台开发,包含了仓库管理中基础的入库.出库.订单管理.调拨.盘点.报表等功能.支持扫码条码扫描.RFID扫描等仓库中常见的场景. ...

  8. [b0031] python 归纳 (十六)_线程同步_锁

    # -*- coding: utf-8 -*- """ 学习 多线程同步 使用锁 threading.Lock() 逻辑: 2 个线程,操作同一个整型变量,一个加法,另外 ...

  9. Weblogic的三种部署方式

    Weblogic的三种部署方式     在weblogic中部署项目通常有三种方式:第一,在控制台中安装部署:第二,将部署包放在domain域中autodeploy目录下部署:第三,使用域中配置文件c ...

  10. Linxu:磁盘分区

    了解磁盘分区 磁盘的物理组成: 圆形的磁盘盘(主要记录数据的部分): 机械手臂,与在机械手臂上的磁盘读取头(可擦写磁盘盘上的数据): 主轴马达,可以转动磁盘盘,让机械手臂的读取头在磁盘盘上读写数据. ...