在CentOS系统上使用Docker备份容器数据主要包括两种类型:备份正在运行的容器数据和备份Docker镜像。以下是具体的备份方法:
备份正在运行的容器数据
-
创建备份目录:
在服务器上创建一个目录,用于存放备份文件。例如:
mkdir -p /home/docker/mysql/data_back && chmod -R 777 /home/docker/mysql/data_back
-
查看docker下mysqld容器:
使用以下命令查看名为
mysql
的容器:docker ps -aqf "name=mysql"
-
创建备份脚本:
在
/home/docker/mysql/data_back
中创建backup.sh
文件,并添加以下内容:#!/bin/bash # 获取容器ID container_id=$(docker ps -aqf "name=mysql") echo "mysql的容器ID is $container_id" # 检查容器是否存在 if [ -z "$container_id" ]; then echo "没有找到名为 mysql 的容器!" exit 1 fi # 登录用户名和密码(请自行填入) MYSQL_USER="root" MYSQL_PASSWORD="123456" MYSQL_PORT="3306" # 是否删除过期数据 expire_backup_delete="true" expire_days=7 # 备份文件存放地址 backup_location="/home/docker/mysql/data_back" # 定义备份详细时间 backup_time=$(date +%Y%m%d%H%M) # 定义备份目录中的年月日时间 backup_Ymd=$(date +%Y-%m-%d) # 备份文件夹全路径 backup_dir=$backup_location/$backup_Ymd # 获取所有数据库的名称,排除信息库DATABASES=$(docker exec $container_id mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'SHOW DATABASES;' | grep -vE '^(Database|information_schema|performance_schema)$') echo "DATABASES == $DATABASES" # 判断是否有待备份的数据库 if [ -n "$DATABASES" ]; then mkdir -p "$backup_dir" # 循环备份每个数据库 echo "$DATABASES" | while read dbname; do echo "开始执行数据库 $dbname 备份..." # 备份数据库,备份为压缩包形式 docker exec $container_id mysqldump --defaults-extra-file=/etc/mysql/conf.d -F -B --default-character-set=utf8 "$dbname" | gzip > "$backup_dir/bak-$dbname-$backup_time.sql.gz" if [ $? -eq 0 ]; then echo "数据库 $dbname 成功备份到 $backup_dir/bak-$dbname-$backup_time.sql.gz" else echo "数据库 $dbname 备份失败!" fi done # 删除过期备份 if [ "$expire_backup_delete" == "true" ] && [ -n "$backup_dir" ]; then find "$backup_dir" -type f -mtime +$expire_days -exec rm -f {} \; echo "删除过期的数据库备份信息!" fi else echo "没有待备份的数据库,停止数据库备份" exit 1 fi echo "所有的数据库已完成备份" exit 0
-
编辑配置:
编辑 MySQL 的
my.cnf
文件,例如:[client] user=root password=123456 [mysqld] default-authentication-plugin=mysql_native_password [mysql] user=root password=123456 [mysqldump] user=root password=123456
-
赋予可执行权限:
设置脚本拥有者可读写:
chmod +x /home/docker/mysql/data_back/backup.sh
-
建立cron定时计划:
使用
crontab -e
添加定时任务,例如每天凌晨2点执行备份脚本:0 2 * * * /home/docker/mysql/data_back/backup.sh
备份Docker镜像
-
使用
docker save
命令:使用以下命令备份镜像为tar包:
docker save -o mycentos.tar mycentos_new:1.1
执行后,运行
ls
命令即可看到打包成的tar包。
通过上述步骤,你可以在CentOS系统上使用Docker备份正在运行的容器数据和Docker镜像。请根据实际需求调整备份脚本和定时任务。