1. 绪论
我们在VMware上的Linux系统上安装启动mysql服务后,可以在本机Windows系统上通过Navicat远程访问,可以进行数据库表的增删改查,但是会存在一个问题: 此时如果通过docker关闭MySQL容器,就会导致数据丢失,因此修改容器之后需要保存或者挂载mysql数据库,挂载到本地之后避免了数据丢失,同时也是对数据的备份。
2. 步骤
-
先在我的F盘新建 几个文件夹准备几个文件夹,留作后面挂载使用
F:\docker\mysql\conf 即 /f/docker/mysql/conf F:\docker\mysql\data 即 /f/docker/mysql/data F:\docker\mysql\log 即 /f/docker/mysql/log F:\docker\mysql\mysql-files 即 /f/docker/mysql/mysql-files
-
下载镜像 image
# 最新版本 docker pull mysql # 指定版本 docker pull mysql:8.0
查看当前镜像
docker image ls 或者 docker images
-
运行镜像创建 容器container,先不挂载
docker run --name mysql -p 3309:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql # --name 为创建的容器命名。(默认会随机给名字,不支持中文字符) # -p 表示端口映射,即<宿主机端口:容器中端口> 。 比如:-p 8080:80 就是将容器中的80端口,映射到主机中的8080端口 # -e 环境配置 # 安装启动mysql需要配置密码 # -d 会创建一个守护式容器在后台运行
查看当前运行的容器
-
复制配置到主机
docker cp mysql_test:/etc/mysql/. E:\docker\mysql\conf # mysql_test是容器名,/etc/mysql/.表示/mysql/目录下的所有文件
-
停止并删除旧容器
docker stop mysql_test docker rm mysql_test
# 停止容器 docker container stop 容器名或容器id # 或可简写为 docker stop 容器名或容器id # 强制关闭容器 docker container kill 容器名或容器id # 或可简写为 docker kill 容器名或容器id # 启动容器 docker container start 容器名或容器id # 或可简写为 docker start 容器名或容器id # 使用rm删除容器 docker rm 容器名或容器id # 例如 docker rm docker-test
-
重新运行镜像生成容器
docker run -p 3309:3306 --name mysql_test -v /e/docker/mysql/mysql-files:/var/lib/mysql-files -v /e/docker/mysql/log:/var/log/mysql -v /e/docker/mysql/data:/var/lib/mysql -v /e/docker/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai --restart=always -d mysql
# 这是一行代码,没有中间换行
-e TZ=Asia/Shanghai 启动时通过环境变量TZ设置容器内国内时区Asia/Shanghai
代码分段(供阅读用)
docker run --name mysql_test \
-p 3309:3306 \
-v /e/docker/mysql/mysql-files:/var/lib/mysql-files \
-v /e/docker/mysql/conf:/etc/mysql \
-v /e/docker/mysql/data:/var/lib/mysql \
-v /e/docker/mysql/log:/var/log/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-e TZ=Asia/Shanghai
--restart=always \
-d mysql
- 配置完成,Navicat测试
连接成功,数据挂载成功!!!
3. 结语
可以发现,容器删除,但是挂载到本地的数据卷依旧没有丢失,这就实现了容器持久化功能。