我正在运行一个 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 管道
- 产品演示的示例部署(销售工程师、产品所有者)
如何:
- 创建和测试您的初始化脚本(根据需要整理数据)
为您的派生镜像创建一个 Dockerfile 以复制您的初始化脚本
FROM mongo:3.4 COPY seed-data.js /docker-entrypoint-initdb.d/
构建你的 docker 镜像
docker build -t mongo-sample-data:3.4 .
(可选)将您的图像推送到 docker 注册表以供其他人使用
运行你的 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/