Run mongodb as a docker container

The following Dockerfile definition runs a mongodb 3.4.18 database inside a docker container.

Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
FROM debian:jessie-slim

RUN apt-get update && \
apt-get install -y ca-certificates && \
rm -rf /var/lib/apt/lists/*

RUN gpg --keyserver ha.pool.sks-keyservers.net --recv-keys 0C49F3730359A14518585931BC711F9BA15703C6 && \
gpg --export $GPG_KEYS > /etc/apt/trusted.gpg.d/mongodb.gpg

ARG MONGO_PACKAGE=mongodb-org
ARG MONGO_REPO=repo.mongodb.org

ENV MONGO_PACKAGE=${MONGO_PACKAGE} MONGO_REPO=${MONGO_REPO}
ENV MONGO_MAJOR 3.4
ENV MONGO_VERSION 3.4.18

RUN echo "deb http://$MONGO_REPO/apt/debian \
jessie/${MONGO_PACKAGE%-unstable}/$MONGO_MAJOR main" | \
tee "/etc/apt/sources.list.d/${MONGO_PACKAGE%-unstable}.list"
RUN echo "/etc/apt/sources.list.d/${MONGO_PACKAGE%-unstable}.list"
RUN apt-get update
RUN apt-get install -y ${MONGO_PACKAGE}=$MONGO_VERSION

COPY users.json ./users.json
COPY start.sh ./start.sh
RUN chmod +x ./start.sh

VOLUME ["/data/db"]
WORKDIR /data
EXPOSE 27017
CMD /start.sh # To run a startup script

The file start.sh can be also useful in order to preimport data into the mongodb:

start.sh
1
2
3
4
5
#!/bin/bash
set -m # bash jobs module!!
mongod --smallfiles &
mongoimport --db test --collection users --file /users.json
fg %1