mongodb - 在 dockerized mongo 上初始化数据

标签 mongodb docker

我正在运行一个 dockerized mongo 容器。

我想用一些初始化数据创建一个 mongo 图像。

有什么想法吗?

最佳答案

更独立的方法:

  • 创建初始化数据库的 javascript 文件
  • 创建包含这些文件的派生 MongoDB docker 镜像

使用一次性容器或创建卷并将它们链接起来的答案有很多,但这似乎过于复杂。如果您查看 mongo docker 图像的 docker-entrypoint.sh ,您会看到第 206 行执行了 /docker-entrypoint-initdb.d/*.js使用语法初始化的文件:mongo <db> <js-file> .如果您创建包含种子数据的派生 MongoDB docker 镜像,您可以:

  • 有一个 docker run 命令,可以用种子数据建立一个 mongo
  • 通过容器停止和启动来持久化数据
  • 使用 docker stop、rm 和 run 命令重置该数据
  • 使用运行时调度程序(如 k8s、mesos、swarm、rancher)轻松部署

这种方法特别适合:

  • 只需要一些真实数据来展示的 POCs
  • 需要一致数据进行黑盒测试的 CI/CD 管道
  • 产品演示的示例部署(销售工程师、产品所有者)

如何:

  1. 创建和测试您的初始化脚本(根据需要整理数据)
  2. 为您的派生镜像创建一个 Dockerfile 以复制您的初始化脚本

    FROM mongo:3.4
    COPY seed-data.js /docker-entrypoint-initdb.d/
    
  3. 构建你的 docker 镜像

    docker build -t mongo-sample-data:3.4 .
    
  4. (可选)将您的图像推送到 docker 注册表以供其他人使用

  5. 运行你的 docker 镜像

    docker run                               \
        --name mongo-sample-data             \
        -p 27017:27017                       \
        --restart=always                     \
        -e MONGO_INITDB_DATABASE=application \
        -d mongo-sample-data:3.4
    

默认情况下,docker-entrypoint.sh 会将您的脚本应用到 test D b;上面的运行命令 env var MONGO_INITDB_DATABASE=application会将这些脚本应用到 application db 代替。或者,您可以在 js 文件中创建并切换到不同的 db。

我有一个 github 存储库可以做到这一点 - 这里是 relevant files .

关于mongodb - 在 dockerized mongo 上初始化数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39348478/

相关文章:

javascript - 如何在 bulkwrite 的 for 循环中设置异步/等待?

Dockerfile 环境变量

docker - 将 JIRA 从 native 实例恢复到 docker 容器

javascript - 在 Java 中的 MongoDB $where 子句中使用 lambda 函数

node.js - 如何返回 mongoDB 数组中值的最大出现次数

java - kubernetes 上的 Spark 作业失败,没有特定错误

php - 从 Docker-compose php-apache 退出,消息退出,代码为 0

macos - 在 mac os x 上使用 boot2docker 运行 docker?

javascript - 无法将 id 保存到变量

python - 读取文件是否比从数据库读取数据快?