1、Docker有两种类型的卷,每种类型都在容器中存在⼀个挂载点,但其在宿主机
上的位置有所不同;
volumes :该卷由Docker⾃⾏管理的数据卷,通常在 /var/lib/docker/volumes ⽬录下。
bind mounting :这种类型的数据卷允许,直接将主机系统上的⽬录路径绑定到容器中。
tmpfs :挂载仅存储在主机系统的内存中,并且不会写⼊主机系统的⽂件系统中。(临时存储)
运行一个容器,并检查容器的挂载点数据:
[root@localhost docker]# docker run -d --name mysql2 -v mysql_data:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:8.0
d56d06c16284bbebb862dbc0ad9ca11f3dbd1fbd8a876fae27befb82388a3c37
[root@localhost docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d56d06c16284 mysql:8.0 "docker-entrypoint.s…" 5 seconds ago Up 3 seconds 3306/tcp, 33060/tcp mysql2
[root@localhost docker]# docker volume ls
DRIVER VOLUME NAME
local 7ddf24f7d53658d5acef896789ac62a130f695c8a99b8ddc7d8d647f4de9e8df
local 77580cbf3c99fc4a4f592c42c0d15fd9339f958772c7ced8c8fa2c033fbe7c6f
local mysql_data
[root@localhost docker]# docker volume inspect mysql_data
[
{
"CreatedAt": "2024-07-02T14:23:37+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/mysql_data/_data",
"Name": "mysql_data",
"Options": null,
"Scope": "local"
}
]
[root@localhost docker]#
2、使用实例进行验证数据存储的持久化:
使用上面创建的mysql2;
1、首先在mysql2里面创建一个新的数据库testdata0702; 然后删掉容器mysql2
2、创建mysql3容器,挂载的数据目录与mysql2一样,然后进入数据库里面看看,是否存在testdata0702这个数据库。
[root@localhost docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d56d06c16284 mysql:8.0 "docker-entrypoint.s…" 15 minutes ago Up 15 minutes 3306/tcp, 33060/tcp mysql2
[root@localhost docker]# docker exec -it mysql2 /bin/bash
root@d56d06c16284:/# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.27 MySQL Community Server - GPL
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
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> create database testdata0702;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| testdata0702 |
+--------------------+
5 rows in set (0.00 sec)
mysql>
下面开始删除容器mysql2:
[root@localhost docker]# docker rm -f mysql2
启动mysql3,然后使用mysql2容器持久化下来的数据,作为挂载的数据目录,
然后登录mysql3,检查是否有testdata0702这个数据库:
[root@localhost docker]# docker run -d --name mysql3 -v mysql_data:/var/lib/mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql:8.0
8370e3c736e026de2d348a8f48dbacf2ab6689e32d62226e117fa5defad9add4
[root@localhost docker]# docker exec -it mysql3 mysql -e "show databases;"
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| testdata0702 |
+--------------------+
[root@localhost docker]#
数据是一样的,所以可以持久化数据。