📜  在 docker-compose 中自动备份 mongodb (1)

📅  最后修改于: 2023-12-03 15:37:19.852000             🧑  作者: Mango

在 docker-compose 中自动备份 mongodb

如果你在使用 docker-compose 来管理你的 MongoDB 服务,那么你可能会需要一个自动备份的功能来保障你的数据安全性。这篇文章将会介绍如何在 docker-compose 中实现自动备份 MongoDB。

步骤
1. 创建 MongoDB 数据卷

首先,我们需要创建一个 MongoDB 数据卷,以便备份数据。在 docker-compose 中可以通过 volumes 配置实现:

version: '3'
services:
  mongodb:
    image: mongo
    volumes:
      - mongodb_data:/data/db
  
volumes:
  mongodb_data:

这个配置会创建一个名为 mongodb_data 的数据卷,并将其挂载到 MongoDB 容器的 /data/db 目录。

2. 创建备份容器

接下来,我们需要创建一个备份容器来执行备份操作。我们可以使用 mongo:4.2 官方提供的备份工具 mongodump 来实现。我们可以通过 docker-compose 配置创建备份容器:

version: '3'
services:
  mongodb:
    image: mongo
    volumes:
      - mongodb_data:/data/db
      
  mongodb_backup:
    image: mongo:4.2
    volumes:
      - mongodb_backup:/backup
      - mongodb_data:/data/db:ro # 只读访问数据卷
    command: "mongodump --host mongodb --out /backup"
  
volumes:
  mongodb_data:
  mongodb_backup:

这个配置中,我们新建了一个 mongod_backup 容器,并挂载了名为 mongodb_backup 的数据卷(用来存放备份数据)。同时,我们还将 mongodb_data 数据卷挂载到容器中,并指定为只读访问。

在容器启动时,我们执行了命令 mongodump 去备份 MongoDB 数据,并将备份数据存放到 /backup 目录下。

3. 添加定时任务

最后,我们需要让备份容器能够定时执行备份。我们可以通过在容器中添加定时任务来实现。这里我们可以通过添加 crontab 来设置定时任务。我们可以通过在 Dockerfile 中添加以下行来设置定时任务:

RUN echo "0 3 * * * mongodump --host mongodb --out /backup" > /etc/crontabs/root

这个指令会在容器内部设置一个 crontab,每天凌晨 3 点执行 mongodump,备份 MongoDB 数据。

现在,我们把它们集成在一起,在 docker-compose.yml 文件中如下配置:

version: '3'
services:
  mongodb:
    image: mongo
    volumes:
      - mongodb_data:/data/db
      
  mongodb_backup:
    build:
      context: .
      dockerfile: Dockerfile.backup
    volumes:
      - mongodb_backup:/backup
      - mongodb_data:/data/db:ro
  
volumes:
  mongodb_data:
  mongodb_backup:

其中,将备份容器的配置拆分出来,单独重命名为 Dockerfile.backup 。内容如下:

FROM mongo:4.2

RUN echo "0 3 * * * mongodump --host mongodb --out /backup" > /etc/crontabs/root

CMD ["crond", "-f"]

这个 Dockerfile.backup 配置会先基于 mongo:4.2 镜像为基础镜像,然后在容器中安装 crond,并设置 crontab 任务的时间表。

总结

完成这些步骤后,我们就可以通过 docker-compose 启动服务,自动备份 MongoDB 数据库了。这是一个非常简单且有效的自动备份方案,可以帮助你保障 MongoDB 数据的安全。