Docker数据备份与迁移(MYSQL,Tomcat)

通过以下命令将容器保存为镜像

docker commit [-m="提交的描述信息"] [-a="创建者"] 容器名称|容器ID 生成的镜像名[:标签名]

无目录挂载-容器保存为镜像

查看是否有挂载目录

docker inspect --format='{{.Mounts}}' 容器名

在这里插入图片描述
无目录挂载的容器打包为镜像

docker commit -m="jianghaojie Frist" -a="jhj" jhj newjhj:1.1

查看版本号
在这里插入图片描述

有挂载目录的容器保存为镜像

问题: 如果Docker对容器挂载了数据目录, 在将容器保存为镜像时,数据不会被保存到镜像中。
原因:因为宿主机与容器做了路径映射,再commit一个新的镜像时,该路径下的所有数据都会被抛弃,不会
被保存到新镜像中。可通过 docker inspect --format=‘{{.Mounts}}’ 镜像名 查看是否有目录挂载.
解决:
目录挂载方法。先把在宿主机的数据备份在某个目录下,在 docker run 的时候使用-v参数将宿主机上的目录映射到容器里的目标路径中(tomcat是 /usr/local/tomcat/webapps ,mysql是 var/lib/mysql )
拷贝方法。先把在宿主机的数据备份在某个目录下,通过拷贝的方法 docker cp 将备份的数据复制进容器里的目标路径中(tomcat是 /usr/local/tomcat/webapps ,mysql是 var/lib/mysql )。
(1)查看有挂载目录容器的映射文件的地址

 docker inspect --format='{{.Mounts}}' jhjTomcat 

前面一个是宿主机映射文件地址,后面一个是容器的映射文件地址
在这里插入图片描述
(2)将有目录挂载的容器保存为镜像

docker commit jhjTomcat jhjnewTomcat:1.1

在这里插入图片描述
(3)创建新的守护式容器使用复制的地址和新的镜像

docker run -id --name=jhjnewTomcat -p 8081:8080 -v /usr/local/localproject:/usr/local/tomcat/webapps jhjnewtomcat:1.1

这样有挂载目录的容器也能生成
在这里插入图片描述

备份MySQL容器

1.为什么mysql容器是目录挂载的容器
下面是mysql容器创建时候的命令如下,可以看出没有-v目录映射的文件,但是其实docker在创建mysql的时候已经将mysql的数据做了目录映射

docker run -id --name=jhjMysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

2.查看mysql的目录映射

docker inspect --format='{{.Mounts}}' jhjMysql 

在这里插入图片描述
3现在先将宿主机mysql的数据备份
使用 cp -rf 宿主机原生的路径 空格 /mysql(宿主机备份路径)

 cp -rf /var/lib/docker/volumes/8715c16052a4a344ee083bdb7ec7842f71697c2e3d4316d4e117fb2dd4c834cc/_data /mysql

在这里插入图片描述
在这里插入图片描述
4将原本的mysql容器生成镜像(当然因为是目录挂载容器,生成的镜像没有打包带走原生的mysql数据)
(1)提交生成新的mysql镜像文件newmysqljx

docker commit jhjMySQL newmysqljx:1.1

在这里插入图片描述
5使用生成的镜像创建新的容器并使用Navicat连接

docker run -id --name=newjhjMySQL -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 newmysqljx:1.1

可以看出上面那个新建的数据库比起下面那个少了testDockermysql这个数据库
在这里插入图片描述
6拷贝保存的文件并覆盖新的容器存储目录
docker cp 宿主机文件目录 空格 容器名:将要拷贝到的目录

docker cp /mysql/ newjhjMySQL:/var/lib/

7重启新的docker容器

docker restart  newjhjMySQL

将数据库刷新则可以看见拷贝过来的文件
在这里插入图片描述

docker 安装mysql8

1、创建目录

mkdir -p /data/mysql/conf
mkdir -p /data/mysql/data
mkdir -p /data/mysql/logs

2、在conf下面创建配置文件 my.cnf


[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
# 设置东八区时区
default-time_zone = '+8:00'
# 设置密码验证规则,default_authentication_plugin参数已被废弃
# 改为authentication_policy
#default_authentication_plugin=mysql_native_password
authentication_policy=mysql_native_password

lower_case_table_names=1

#secure_file_priv=/var/lib/mysql
secure_file_priv=
init_connect='SET collation_connection = utf8mb4_0900_ai_ci'
init_connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
collation-server=utf8mb4_0900_ai_ci
skip-character-set-client-handshake
skip-name-resolve


3、创建容器

docker run -p 3306:3306 --name mysql8 --restart always
-v /data/mysql/conf/my.cnf:/etc/my.cnf
-v /data/mysql/logs:/logs
-v /data/mysql/data:/var/lib/mysql
-v --privileged=true
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.3

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值