文档背景
由于应用服务器里静态文件数量特别大,所以需要对文件卷进行同步备份。使用Docker + Rsync
目的:
- 将客户端目录备份到服务端目录中
- 减小宿主机侵占性
- 提高文件传输的性能
下面是使用的Rsync通信的方法来定时同步文件夹的
服务端(Slave-Server)
服务端用于接收和备份客户端服务器的文件,需要设置账户密码,开放容器22端口和rsync端口。可以让客户端进行Rsync通信和SSH通信来使得文件同步
参考文档
官方镜像: https://github.com/rendam/docker-image-rsync-server
SSH通信案例: https://blog.csdn.net/lhc198623/article/details/87862381
环境准备
- 使用Docker安装rsync-server
docker pull apnar/rsync-server
- 构建容器
参数详解
-p 222:22 映射容器远程连接端口
-p 873:873 映射容器rsync端口
-v /home/yyl/RsyncSlave/:/data 映射备份文件夹存放目录
-v /root/.ssh/:/root/.ssh/ 映射ssh秘钥信息目录 (可以根据你宿主机秘钥的位置更改)
–name rsync-server 容器名称
apnar/rsync-server 镜像名称
docker run -d \
--restart always \
-p 222:22 \
-p 873:873 \
-v /home/yyl/RsyncSlave/:/data \
-v /root/.ssh/:/root/.ssh/ \
-e USERNAME=user \
-e PASSWORD=pass \
--name rsync-server \
apnar/rsync-server
客户端(Master-Client)
参考文档
官方镜像: https://hub.docker.com/r/eeacms/rsync
Linux Crontab语法: https://blog.csdn.net/qq_15821487/article/details/120154421
Rsync参数详解: https://blog.csdn.net/wlh525/article/details/113310310
环境准备
- 备份Rsync密码
echo "pass" >/etc/rsync.password
chmod 600 /etc/rsync.password
- 使用Docker安装 eeacms/rsync
docker pull eeacms/rsync
- 构建容器
参数详解
-d 守护式进程启动
–name 容器名称
-v /data/yyl/RsyncMaster/tongbu1:/data 映射备份文件
-v /etc/rsync.password:/etc/rsync.password 映射密码文件
-e CRON_TASK_1=“*/1 * * * * rsync -atuz --progress --delete /data/ rsync://user@server_ip:873/data/tongbu1 --password-file=/etc/rsync.password” 开启一个名为定时任务1且1分钟执行一次的同步任务
eeacms/rsync client 启动镜像名为eeacms/rsync为客户端程序启动
docker run -d --name=rsync_client01 -v /data/yyl/RsyncMaster/tongbu1:/data -v /etc/rsync.password:/etc/rsync.password \
-e CRON_TASK_1="*/1 * * * * rsync -atuz --progress --delete /data/ rsync://user@server_ip:873/data/tongbu1 --password-file=/etc/rsync.password" \
eeacms/rsync client
docker run -d --name=rsync_client02 -v /data/yyl/RsyncMaster/tongbu2:/data -v /etc/rsync.password:/etc/rsync.password \
-e CRON_TASK_1="*/1 * * * * rsync -atuz --progress --delete /data/ rsync://user@server_ip:873/data/tongbu2 --password-file=/etc/rsync.password" \
eeacms/rsync client
docker run -d --name=rsync_client03 -v /data/yyl/RsyncMaster/tongbu3:/data -v /etc/rsync.password:/etc/rsync.password \
-e CRON_TASK_1="*/1 * * * * rsync -atuz --progress --delete /data/ rsync://user@server_ip:873/data/tongbu3 --password-file=/etc/rsync.password" \
eeacms/rsync client
指令完成后,即可完成客户端备份文件向服务端备份的功能