docker — volumes、MySQL数据库持久化
一、概述
-
容器数据丢失情况:
- 每个容器每次启动都是从镜像定义开始的。
虽然容器可以创建、更新和删除文件,但当容器被移除并且所有更改都与该容器隔离时,这些更改会丢失。 - 示例:
- 如数据库相关操作中:
利用 MySQL 镜像创建了 数据库容器,并且在容器中新建了数据库,正常使用没有问题。
-> 但是当删除该容器(或者docker-compose方式 down 完,又重新构建容器),原来容器中的数据库文件将会丢失。
- 如数据库相关操作中:
- 每个容器每次启动都是从镜像定义开始的。
-
volumes :
- docker 提供了数据持久化的机制为 volumes,即为 挂载。
- volumes:提供了将容器的特定文件系统路径连接回主机的能力,如果容器中的目录已挂载,则该目录中的更改也会在主机上看到。如果我们在容器重启时挂载相同的目录,我们会看到相同的文件。
二、配置步骤
1、核心配置
以安装 MySQL 5.7 为例子:
# 1. volumes 参数
-v 【宿主机本地磁盘路径】:/var/lib/mysql
# 2. 完整命令:
docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root -v 【宿主机本地磁盘路径】:/var/lib/mysql mysql:5.7
# 3. 示例
docker run -d \
--name mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root \
-v /home/xxx-user/mysql:/var/lib/mysql \
mysql:5.7
2、完整步骤
-
查看docker仓库中的 mysql 版本:
docker search mysql
-
选择数据库镜像,以5.7为例:
docker pull mysql:5.7
-
查看已下载的镜像:
docker images
-
启动Mysql容器
# 启动容器,忽略MySQL大小写,设置数据库挂载到本地磁盘 # 宿主机本地磁盘路径,示例:/home/xxx-user/mysql docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root --lower_case_table_names=1 -v 【宿主机本地磁盘路径】:/var/lib/mysql -d mysql:5.7 # 完整示例 docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root -v /home/xxx-user/mysql:/var/lib/mysql -d mysql:5.7
-
登录Mysql数据库:
# 进入 mysql 终端 docker exec -it 【容器id】 bash #输入命令,并按提示输入密码root mysql -u root -p
三、volume常用命令
# 创建volume:
docker volume create【volume名称】
# 查看volume参数:
docker volume inspect【volume名称】
# 使用volume:
# -v 宿主机本地磁盘路径:容器内路径
docker run -dit --name 【容器名称】 -v【volume名称】:/volume 【镜像名称】
# 例如:
docker run -d -p 3306:3306 --name mysql_test -e MYSQL_ROOT_PASSWORD=root -v volume-mysql:/var/lib/mysql mysql:5.7
#查看docker数据卷
docker volume ls
# 删除volume:Remove one or more volumes
docker volume rm 【volume名称】
# 删除没使用的数据卷(谨慎使用):Remove all unused local volumes
docker volume prune