将Docker容器转移至另一服务器

  • 1 把当前的容器提交为一个镜像:
1
docker commit 容器名 镜像名
  • 2 将镜像存为tar文件
1
docker save 镜像名 >备份文件.tar
  • 3将 备份文件.tar 复制到目的主机下
1
[localhost$ ~]scp nginx.tar root@192.X.X.X:/data
  • 4将 备份文件.tar恢复为镜像 ,具体用法请见docker load –help
1
docker load -i <备份文件.tar
  • 5根据镜像重新运行起容器
1
2
3
docker run  -p 81:80 --name='容器名' -d -镜像名

[这里注意暴露的端口不是当前主机在用的端口号,要不然会报错失败]

#备份脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/bin/bash
# 设置mysql的登录用户名和密码(根据实际情况填写)
mysql_user="root"
mysql_password="root"
# mysql_host="localhost"
# mysql_port="3306"
# mysql_charset="utf8mb4"
container_id='543f03622637'
#dbname=''

# 备份文件存放地址(根据实际情况填写)
#backup_dir='/usr/local'
backup_dir=~/docker-bak/
# 判断目录是不是已经存在,如果不存在则创建
if [ ! -d $backup_dir ]; then
mkdir -p $backup_dir
fi
#===================================
# 是否删除过期数据
expire_backup_delete="ON"
expire_days=7
backup_time=`date +%Y%m%d%H%M`
welcome_msg="Welcome to use MySQL backup tools!"
#===========================================
# 备份指定数据库中数据(此处假设数据库是mysql_backup_test)
#docker exec $container_id mysqldump -u$mysql_user -p$mysql_password -B $dbname > $backup_dir/$dbname-$backup_time.sql

#备份全部数据库
docker exec ${container_id} mysqldump -u${mysql_user} -p${mysql_password} -A > ${backup_dir}/alldb-${backup_time}.sql
#==================================================
删除过期数据
if [ "$expire_backup_delete" == "ON" -a "$backup_dir" != "" ];then
`find $backup_dir/ -type f -mtime +$expire_days | xargs rm -rf`
echo "Expired backup data delete complete!"
fi