Rsync的Docker容器备份

关于备份,公司使用的rsync,恰逢Docker容器很火,所以,在享受到docker带来的好处之后,也是为了统一一下,所以备份我也想用容器。当然了,要想用容器,就得有镜像,一般用的也是官方镜像,好巧不巧官方没有rsync镜像,用别人的吧,感觉又不是很好,没有安全感,索性就自己写了一个。这就涉及到Docker里面Dockerfile了。
那就先从创建镜像开始吧!

[root@localhost rsync]# cat Dockerfile 
FROM centos:7
EXPOSE 873
RUN yum install rsync -y
CMD ["rsync", "--no-detach", "--daemon"]

嗯,是的,DockerFile写好了。简单的解释一下:

FROM:该镜像的基础镜像
EXPOSE:当前容器对外暴露的端口号
RUN:构建镜像时需要运行的指令,此处是下载rsync
CMD:容器启动时要运行的命令

接下来是创建镜像

[root@localhost ~]# docker build -t rsync:latest .
[root@localhost ~]# docker images
REPOSITORY   TAG            IMAGE ID       CREATED         SIZE
rsync        latest         ce6827216f50   46 hours ago    305MB

创建一个简单的镜像就写好了。没别的需要注意的,唯一需要注意的就是命名了,最好是叫Dockerfile。
简单的解释一下

docker build:创建一个镜像
-t rsync:latest:镜像名称:版本号
. :表示当前目录下的Dockerfile文件

好,接下来就是创建容器了。

[root@localhost rsync]# cat rsync_init.sh 
#!/bin/sh
set -e

PORT="873"
NAME="rsync"

if [ ! -z $1 ]; then
    NAME=$1
fi

if [ ! -z $2 ]; then
    PORT=$2
fi

echo "The container name is:${NAME}"
echo "The container port is:${PORT}"

##########################################################################################

if [ "`docker images | grep rsync`" ]; then
    echo 'Detecting image exist. Will not pull again.'
    docker images rsync
else
    echo 'Begin to pull image ...'
    docker build -t rsync:latest .
fi

##########################################################################################

echo 'Start creating the container......'

if [ "`docker ps -a | grep $NAME`" ]; then
     read -p "The container already exists. Do you need to delete it?(y/n)" flag
     if [ $flag == 'y' ]; then
	  if [ "`docker ps | grep $NAME`" ]; then
	       docker stop $NAME
          fi
	  docker rm $NAME
     else 
	  echo 'Failed to create container......'
          exit 0
     fi
fi

docker run -d -p $PORT:873 --restart=always \
           --name $NAME --hostname $NAME rsync:latest

docker logs -f $NAME

exit 0

以上是写的一个启动脚本,大致的意思是

先判断是否有rsync镜像,如果没有就构建镜像,所以,当你启动这个脚本时,最好是在Dockerfile同目录下,不然,在docker build时,需要指定Dockerfile的完整路径。接下来就是判断是否存在相同的容器,如果存在需要删除就直接按y,就删掉当前容器,否则就退出。前面两个if语句都是在进行检查,后面才是真正的创建容器。

启动脚本

[root@localhost ~]# sh rsync_init.sh

查看创建的容器

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE              COMMAND                  CREATED        STATUS        PORTS                                      NAMES
c0e54c4b43c1   rsync:latest       "rsync --no-detach -…"   46 hours ago   Up 45 hours   0.0.0.0:873->873/tcp                       rsync

接下来,关于rsync的配置问题,就直接docker exec -it 容器名 bash,就可以进入容器进行配置。

特别注意的是:在创建容器的脚本中,我并没有对需要备份的目录或文件进行挂载,因此,备份的内容需要自行根据自身的情况,修改创建容器的脚本,实现挂载。

该文章主要是为了说明怎么用docker创建一个rsync的容器,所以并没有对docker以及rsync相关知识进行扩展补充,具体的一些知识还是需要自行查阅。当然,方法不是只有这一种,也存在很多需要改进的地方,比如说基础镜像其实还可以使用更加小的镜像,还有使用yum下载rsync时可以先更新一下yum等等等…

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker是一种开源的容器化平台,可以帮助开发人员和系统管理员更轻松地构建、部署和运行应用程序。而rsync是一个用于文件同步和备份的工具,它可以在本地或远程系统之间同步文件和目录。 要在Docker中使用rsync,你可以使用两种不同的镜像:eeacms/rsync和apnar/rsync-server。这两个镜像都可以通过Docker Hub获取。 1. 使用eeacms/rsync镜像: - 首先,你需要准备好rsync的密码文件。可以使用以下命令创建密码文件并设置权限: ```shell echo "pass" >/etc/rsync.password chmod 600 /etc/rsync.password ``` - 然后,你可以使用以下命令从Docker Hub上拉取eeacms/rsync镜像: ```shell docker pull eeacms/rsync ``` - 最后,你可以使用以下命令来构建容器并运行rsync: ```shell docker run -d --name rsync-server -p 873:873 -v /path/to/source:/data -v /etc/rsync.password:/etc/rsync.password eeacms/rsync ``` 其中,`/path/to/source`是你要同步的源文件或目录的路径。 2. 使用apnar/rsync-server镜像: - 首先,你需要准备好rsync的配置文件。可以使用以下命令创建一个简单的配置文件: ```shell echo "uid = root" >/path/to/rsyncd.conf echo "gid = root" >>/path/to/rsyncd.conf echo "[data]" >>/path/to/rsyncd.conf echo "path = /data" >>/path/to/rsyncd.conf echo "read only = false" >>/path/to/rsyncd.conf ``` - 然后,你可以使用以下命令从Docker Hub上拉取apnar/rsync-server镜像: ```shell docker pull apnar/rsync-server ``` - 最后,你可以使用以下命令来构建容器并运行rsync-server: ```shell docker run -d --name rsync-server -p 873:873 -v /path/to/rsyncd.conf:/etc/rsyncd.conf -v /path/to/source:/data apnar/rsync-server ``` 其中,`/path/to/rsyncd.conf`是你准备好的rsync配置文件的路径,`/path/to/source`是你要同步的源文件或目录的路径。 请注意,上述命令中的`-p`参数用于将容器的873端口映射到主机的873端口,以便可以通过rsync客户端访问。`-v`参数用于将主机上的文件或目录挂载到容器中,以便进行同步操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值