2020年3月

rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。

rsync功能
作为命令,实现本地-远程文件同步
作为服务,实现本地-远程文件同步

rsync特点
可以镜像保存整个目录树和文件系统,可以保留原有的权限(permission,mode),owner,group,时间(修改时间,modify time),软硬链接,文件acl,文件属性(attributes)信息等。
传输效率高,使用同步算法,只比较变化的部分。
支持匿名传输,方便网站镜像;也可以做验证,加强安全。

rsync同类服务
sync 同步:刷新文件系统缓存,强制将修改过的数据块写入磁盘,并且更新超级块。
async 异步:将数据先放到缓冲区,再周期性(一般是30s)的去同步到磁盘。
rsync 远程同步:remote synchronous

脚本举例(需要先配置ssh免密登录):

#!/bin/bash

vip="192.168.80.13"                        #虚拟IP,表示以存在虚拟IP的服务器为源,同步远程服务器
dstip="192.168.80.12"
basedir="/www"
count=`/usr/sbin/ip a |grep $vip |wc -l`   #判断虚拟机IP是否存在

if [ $count = 1 ]; then
    rsync -a --delete /var/ftp/ $dstip:/var/ftp/      #a 表示归档,即保留文件原属性,比如创建时间,属主等
    rsync -a --delete $basedir/wwwroot/ $dstip:$basedir/wwwroot/  #delete 表示删除目标目录多余的文件,用来保证和源目录一致
    rsync -a --delete $basedir/server/pure-ftpd/etc/ $dstip:$basedir/server/pure-ftpd/etc/   #相当于是个简单的防篡改
else
    exit 1
fi

定时执行
/1 * /root/rsync.sh #表示每分钟执行一次

一 运行容器

docker run -it --name lk -p 80:80 -d 镜像名

关键参数说明:
i 表示保持输入
t 表示分配一个伪终端,一般和i一起使用
d 表示后台运行
如果没有it参数,容器运行后必须有进程在前台运行,要不然会自动退出。而加了it,就可以让bash作为前台进程。

二 进入容器

docker exec -it lk bash

关键参数说明:
lk 是容器名
这只是其中一种方式,还有其他方式,可以举一反三

三 使用systemctl或service命令

这两个命令是使进程在后台运行,但容器的理念是一个容器一个应用,直接在前台运行,所以默认使用不了。如果想使用,运行容器时需要加特权模式,命令如下:

docker run -it --name lk -p 80:80 --privileged -d 镜像名 /usr/sbin/init