当前位置: 首页 > 面试题库 >

在dockerized mongo上初始化数据

张建华
2023-03-14
问题内容

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

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

有任何想法吗?


问题答案:

首先创建一个docker卷

docker volume create --name mongostore

然后创建您的mongo容器

docker run -d --name mongo -v mongostore:/data/db mongo:latest

-v这里交换机负责安装的卷mongostore/data/db的位置,这是在蒙戈保存其数据。该卷是持久的(在主机上)。即使没有容器在运行,您也会看到mongostore的卷列出为

docker volume ls

您可以杀死该容器并创建一个新容器(与上述相同),新的mongo容器将获取先前容器的状态。

初始化卷
Mongo将初始化一个新数据库(如果不存在)。这负责在mongostore中创建初始数据。假设您要使用预先播种的数据库创建全新的环境。问题在于如何在创建mongo容器之前将数据从本地环境(例如)传输到卷。我将列出两种情况。

  1. 当地环境

您正在使用适用于Mac / Windows的Docker或Docker
Toolbox。在这种情况下,您可以轻松地将本地驱动器安装到临时容器以初始化卷。例如:

    docker run --rm -v /Users/myname/work/mongodb:/incoming \
  -v mongostore:/data alpine:3.4 cp -rp /incoming/* /data

这不适用于云存储。在这种情况下,您需要复制文件。

  1. 远程环境(AWS,GCP,Azure等)

最好将其压缩/压缩以加快上传速度。

    tar czf mongodata.tar.gz /Users/myname/work/mongodb

然后创建一个临时容器来解压缩并将文件复制到mongostore。在tail -f /dev/null刚刚可以确保容器不退出。

    docker run -d --name temp -v mongostore:/data alpine:3.4 tail -f /dev/null

复制文件到它

    docker cp mongodata.tar.gz temp:.

解压缩并移至该卷

    docker exec temp tar xzf mongodata.tar.gz && cp -rp mongodb/* /data

清理

    docker rm temp

您也可以将文件复制到远程主机并从那里进行安装,但是我倾向于完全避免与远程主机进行交互。

免责声明 我是从内存中编写此文件的(没有测试)。



 类似资料:
  • 初始化数据 打开MainSetup类,在Daos语句后面插入新建根用户的代码 // 初始化默认根用户 if (dao.count(User.class) == 0) { User user = new User(); user.setName("admin"); user.setPassword

  • 上一节中我们给大家介绍了Fullpage的基本用法,可能很多用户有个性化的需求,没关系Fullpage提供了多个参数,我们可以配置这些参数,满足我们项目的需求。 controlArrows 默认值:true,决定是否使用控制箭头向左或向右移动幻灯片。 verticalCentered 默认值:true,决定是否初始化后,是否垂直居中网页的内容,如果你想自定义元素的位置,那么你可以设置为false,

  • 1、什么是初始化函数 初始化函数的意思是,当你创建一个实例的时候,这个函数就会被调用。 比如: 当代码在执行 a = ClassA() 的语句时,就自动调用了 __init__(self) 函数。 而这个 __init__(self) 函数就是初始化函数,也叫构造函数。 初始化函数的写法是固定的格式:中间是 init,意思是初始化,然后前后都要有【两个下划线】,然后 __init__() 的括号中

  • 如下 ServletContext 接口方法允许 servlet 访问由应用开发人员在Web 应用中的部署描述符中指定的上下文初始化参数: getInitParameter getInitParameterNames 应用开发人员使用初始化参数来表达配置信息。代表性的例子是一个网络管理员的 e-mail 地址,或保存关键数据的系统名称。

  • 问题内容: 我知道您可以在实例化期间初始化数组,如下所示: 有没有办法用ArrayList做同样的事情?还是我必须单独添加内容? 问题答案: Arrays.asList可以在这里提供帮助:

  • 问题内容: 我知道当我初始化一个char数组时: 要么 为什么不喜欢 初始化数组: 为什么它们不同?它是Java哲学的本质之一还是其​​背后的某些原因? 问题答案: 如果您曾经使用过 C ,那么答案就非常简单。在 C语言中 ,创建数组的方式是在堆栈上分配一个足以容纳元素数量的静态内存长度,并使用指针指向第一个元素-或堆上动态内存长度,然后用指针指向第一个元素。 在 C ++中 ,第二个版本已更改为