如何使用docker-compose创build一个mongo数据库?
我试图分发一组连接的应用程序运行在几个链接的容器,其中包括一个需要:
- 分发包含一些种子数据;
- 允许用户添加额外的数据。
理想情况下,数据也将保存在链接的数据容器中。
我可以使用mongo
基础实例,不装载任何卷(dockerhub图像: psychemedia/mongo_nomount
– 这实质上是没有VOLUME /data/db
语句的基础mongo Dockerfile)和一个Dockerfile
configuration行的:
ADD . /files WORKDIR /files RUN mkdir -p /data/db && mongod --fork --logpath=/tmp/mongodb.log && sleep 20 && \ mongoimport --db testdb --collection testcoll --type csv --headerline --file ./testdata.csv #&& mongod --shutdown
其中./testdata.csv
与./testdata.csv
在同一个目录( ./mongo-with-data
)中。
我的docker组成configuration文件包括以下内容:
mongo: #image: mongo build: ./mongo-with-data ports: - "27017:27017" #Ideally we should be able to mount this against a host directory #volumes: # - ./db/mongo/:/data/db #volumes_from: # - devmongodata #devmongodata: # command: echo created # image: busybox # volumes: # - /data/db
每当我尝试挂载VOLUME时,似乎删除了存储在/data/db
的原始数据。 我想当一个卷被挂载到/data/db
它会replace当前的任何东西。
也就是说, docker用户指南build议: 当容器被创build时 , 卷被初始化。 如果容器的基本映像包含指定安装点上的数据,那么在卷初始化时,现有数据将被复制到新卷中 ? 所以我希望如果在播种RUN
命令之后放置VOLUME命令,数据将会持续存在?
那么我做错了什么?
长远来看,我想自动化几个链接容器的构build,然后分发一个Vagrantfile
/ Vagrantfile
-compose YAML文件,这个文件将启动一组链接的应用程序,包括一个预先接种的mongo
数据库,填充的)持久性数据容器。
我使用另一个docker集装箱来做这个,它的唯一目的就是种下孟戈,然后退出。 我怀疑这跟ebaxt是一样的,但是当我正在寻找这个答案的时候,我只是想看到一个快速而又简单的例子。 所以这里是我的:
泊坞窗,compose.yml
mongodb: image: mongo ports: - "27017:27017" mongo-seed: build: ./mongo-seed links: - mongodb # my webserver which uses mongo (not shown in example) webserver: build: ./webserver ports: - "80:80" links: - mongodb
蒙戈种子/ Dockerfile
FROM mongo COPY init.json /init.json CMD mongoimport --host mongodb --db reach-engine --collection MyDummyCollection --type json --file /init.json --jsonArray
蒙戈种子/ init.json
[ { "name": "Joe Smith", "email": "jsmith@gmail.com", "age": 40, "admin": false }, { "name": "Jen Ford", "email": "jford@gmail.com", "age": 45, "admin": true } ]
这里是我们如何使用一次性容器清理和种子图像的写法https://ardoq.com/delightful-database-seeding-with-docker/
您可以使用此图像为许多作业提供docker容器(导入,导出,转储)
看看使用docker-compose的例子
回答我自己的问题:
- 简单的YAML文件来创build链接到数据容器容器的简单的mongo容器,由Vagrant docker构build。
- 在Vagrantfile中,代码大致如下:
config.vm.provision :shell, :inline => <<-SH docker exec -it -d vagrant_mongo_1 mongoimport --db a5 --collection roads --type csv --headerline --file /files/AADF-data-minor-roads.csv SH
导入数据。
打包盒子。
分配盒子。
对于用户来说,一个简单的Vagrantfile来加载这个盒子并运行一个简单的docker-compose YAML脚本来启动容器,并将mongo db安装在数据卷容器上。