【docker学习之路】6.docker持久化存储和数据共享体验之volume

在刚接触docker之前,因为不熟悉docker在存储方面的内容,所以有时候创建的容器,如果操作不当,会删掉容器重新创建,这样会把之前容器中产生的数据一并被删除。如果是数据存储容器,比如mysql容器,那将是我们都不愿意看到的。这里介绍一下关于docker持久化存储和数据共享方面的内容。

paste image

先贴几张图简单了解一下关于持久化的内容

paste image

paste image

volume体验-以mysql为例

1
2
3
4
5
# 创建一个mysql容器,-e后面表示环境变量
docker run -d --name mysql1 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql

# 查看该容器设置的环境变量(也就是执行该容器的env命令)
docker exec 1fc5a5f00315 env

paste image

从中我们能查看到我们设置的环境变量:MYSQL_ALLOW_EMPTY_PASSWORD=true
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 查看容器创建的volume挂载点(挂载点我俗称的,表示容器内部将文件挂载到容器外部)
docker volume ls
DRIVER VOLUME NAME
local 059d816fea54bba972ae7d4e2c1511091bd1b8fe93484580ac3c7a19f449352b

# 查看volume详细信息
docker volume inspect 059d816fea54bba972ae7d4e2c1511091bd1b8fe93484580ac3c7a19f449352b

[
{
"CreatedAt": "2018-12-12T02:03:55Z",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/059d816fea54bba972ae7d4e2c1511091bd1b8fe93484580ac3c7a19f449352b/_data",
"Name": "059d816fea54bba972ae7d4e2c1511091bd1b8fe93484580ac3c7a19f449352b",
"Options": null,
"Scope": "local"
}
]

# 再新建一个MySQL2容器
docker run -d --name mysql2 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql

# 通过volume可以查看到多了一个volume
docker volume ls

# 停止并删除容器
docker stop mysql1 mysql2
docker rm mysql1 mysql2

# 再次通过volume命令查看挂载信息依然存在
docker volume ls
说明容器在不增加volume参数启动的情况下会自己默认增加volume挂载信息,我们可以通过volume的命令来查看其详细信息。

volume名称改善

通过上面的体验,我们看到默认的volume产生一串很长的值,不方便我们查看,我们可以对其进行优化。

1
2
3
4
5
# 先删除之前的两个volume
docker volume rm *** ***

# 创建新的改善volume内容的容器
docker run -d -v mysql:/var/lib/mysql --name mysql1 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql


参数介绍:-d表示后台运行,-v表示volume挂载配置mysql为volume名称,/var/lib/mysql为挂载到容器外的目录,–name设置容器的名称为mysql1,-e添加系统环境变量参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# 查看volume信息
docker volume ls

DRIVER VOLUME NAME
local mysql

# 为了验证mysql容器volume设置,我们进入容器中创建数据库来验证
# 以交互式方式执行mysql容器/bin/bash
docker exec -it mysql1 /bin/bash

# 此时已经进入容器内部
# 连接mysql服务,之前创建已经无需密码,所以可以直接进入,不需要密码
mysql -u root

# 查看数据库
show databases;

# 创建数据库,命名为docker
create database docker;

# 退出mysql并退出容器;
exit
exit

# 下面进入验证环节
# 强制停止正在运行的mysql1容器并删除容器
docker rm -f mysql1

# 查看volume挂载信息,可以发现mysql的volume依然存在
docker volume ls

# 重新创建一个mysql2并使用这个volume
docker run -d -v mysql:/var/lib/mysql --name mysql2 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql

# 进入mysql2容器查看数据库信息
docker exec -it mysql2 /bin/bash

# 进入mysql服务
mysql -uroot

# 查看数据库信息
show databases;

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| docker |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.01 sec)


# 到此成功验证!
下一篇会介绍第二种挂载方式,更利于开发人员进行使用!
-------------本文结束感谢您的阅读😜-------------
喜欢较真儿的平头哥 wechat
微信扫一扫,没事常联系 [请注明博客添加]
支持原创,支持开源,感谢打赏,不懈努力。
点击打赏,可领取支付宝红包,不信你试试😏😏😏!
0%