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]# 

docker数据的持久化以及dockerfile_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> 

docker数据的持久化以及dockerfile_docker_02

下面开始删除容器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]#

docker数据的持久化以及dockerfile_数据_03

数据是一样的,所以可以持久化数据。