Add docker-compose file for dev environment

This commit is contained in:
Victor Denisov 2017-04-09 10:39:31 -07:00
parent a11d573ff1
commit b33294eec3
3 changed files with 82 additions and 0 deletions

View File

@ -11,3 +11,68 @@ This is the Haskell MongoDB driver (client). [MongoDB](http://www.mongodb.org) i
* [MapReduce example](http://github.com/mongodb-haskell/mongodb/blob/master/doc/map-reduce-example.md)
* [Driver design](https://github.com/mongodb-haskell/mongodb/blob/master/doc/Article1.md)
* [MongoDB DBMS](http://www.mongodb.org)
### Dev Environment
It's important for this library to be tested with various versions of mongodb
server and with different ghc versions. In order to achieve this we use docker
containers and docker-compose. This repository contains two files: docker-compose.yml
and reattach.sh.
Docker compose file describes two containers.
One container is for running mongodb server. If you want a different version of
mongodb server you need to change the tag of mongo image in the
docker-compose.yml. In order to start your mongodb server you need to run:
```
docker-compose up -d mongodb
```
In order to stop your containers without loosing the data inside of it:
```
docker-compose stop mongodb
```
Restart:
```
docker-compose start mongodb
```
If you want to remove the mongodb container and start from scratch then:
```
docker-compose stop mongodb
docker-compose rm mongodb
docker-compose up -d mongodb
```
The other container is for compiling your code. By specifying the tag of the image
you can change the version of ghc you will be using. If you never started this
container then you need:
```
docker-compose run mongodb-haskell
```
It will start the container and mount your working directory to
`/opt/mongodb-haskell` If you exit the bash cli then the conainer will stop.
In order to reattach to an old stopped container you need to run script
`reattach.sh`. If you run `docker-compose run` again it will create another
container and all work made by cabal will be lost. `reattach.sh` is a
workaround for docker-compose's inability to pick up containers that exited.
When you are done with testing you need to run:
```
docker-compose stop mongodb
```
Next time you will need to do:
```
docker-compose start mongodb
reattach.sh
```
It will start your stopped container with mongodb server and pick up the stopped
container with haskell.

14
docker-compose.yml Normal file
View File

@ -0,0 +1,14 @@
version: '3'
services:
mongodb:
image: mongo:3.4.3
mongodb-haskell:
image: phadej/ghc:8.0.2
environment:
- HASKELL_MONGODB_TEST_HOST=mongodb
entrypoint:
- /bin/bash
volumes:
- ./:/opt/mongodb-haskell
# vim: ts=2 et sw=2 ai

3
reattach.sh Executable file
View File

@ -0,0 +1,3 @@
#!/bin/bash
docker start -ai mongodb_mongodb-haskell_run_1