关于备份,公司使用的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等等等…