乐趣区

关于docker:52-数据持久化之Data-Volume

应用场景:mysql 容器在被销毁之后,数据能够长久化

初始化一个 mysql 容器

# 为了便于测试,设置 root 明码为空
docker run -d --name mysql1 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes mysql:latest

查看 mysql 容器对应的 volume

Mountpoint 的值 /var/lib/docker/volumes/5bcd1cb1088a71fbf595fb817ea9511501f794ac17971529cd3451102f872a87/_data,就是 mysql 容器保留数据到虚拟机的中央了


[vagrant@docker-node1 ~]$ docker volume ls
DRIVER VOLUME NAME
local 5bcd1cb1088a71fbf595fb817ea9511501f794ac17971529cd3451102f872a87


[vagrant@docker-node1 ~]$ docker volume inspect 5bcd1cb1088a71fbf595fb817ea9511501f794ac17971529cd3451102f872a87
[
    {
        "CreatedAt": "2018-07-03T12:12:36Z",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/5bcd1cb1088a71fbf595fb817ea9511501f794ac17971529cd3451102f872a87/_data",
        "Name": "5bcd1cb1088a71fbf595fb817ea9511501f794ac17971529cd3451102f872a87",
        "Options": null,
        "Scope": "local"
    }
]

删除 mysql 容器

docker container stop mysql1
docker container rm mysql1

删除之后发现该容器对应的 volume 还是存在的,这也就是 mysql 数据的长久化了

如果是降级 mysql 的版本,因为 volume data 的存在,可能低版本的 mysql 不兼容,导致呈现问题,此时还须要删除 volume data。

命名 Volume

[vagrant@docker-node1 ~]$ docker run -d -v mysql:/var/lib/mysql --name mysql2 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes mysql:latest
028c9a31c4b1bbe0ef1aa40517e881fb655d2efb81d5591460c323b320ac2e84
[vagrant@docker-node1 ~]$ docker volume ls
DRIVER VOLUME NAME
local mysql
[vagrant@docker-node1 ~]$ docker volume inspect mysql
[
    {
        "CreatedAt": "2018-07-03T12:25:48Z",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/mysql/_data",
        "Name": "mysql",
        "Options": null,
        "Scope": "local"
    }
]

长久化数据的应用

进入到 mysql2 容器,创立一个数据库,名称为 docker

docker exec -it mysql2 /bin/sh
mysql -u root
mysql> create database docker;
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| docker |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)

而后删除 mysql2 容器

docker container stop mysql2
docker container rm mysql2

创立一个 mysql3 容器

docker run -d -v mysql:/var/lib/mysql --name mysql3 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes mysql:latest
docker exec -it mysql3 /bin/sh
mysql -u root
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| docker |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)

nice!发现 docker 数据库在容器 mysql3 中仍然是能够应用的。

退出移动版