1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- :title: Building a Docker Image with MongoDB
- :description: How to build a Docker image with MongoDB pre-installed
- :keywords: docker, example, package installation, networking, mongodb
- .. _mongodb_image:
- Building an Image with MongoDB
- ==============================
- .. include:: example_header.inc
- The goal of this example is to show how you can build your own
- docker images with MongoDB preinstalled. We will do that by
- constructing a Dockerfile that downloads a base image, adds an
- apt source and installs the database software on Ubuntu.
- Creating a ``Dockerfile``
- +++++++++++++++++++++++++
- Create an empty file called ``Dockerfile``:
- .. code-block:: bash
- touch Dockerfile
- Next, define the parent image you want to use to build your own image on top of.
- Here, we’ll use `CentOS <https://index.docker.io/_/ubuntu/>`_ (tag: ``latest``)
- available on the `docker index`_:
- .. code-block:: bash
- FROM ubuntu:latest
- Since we want to be running the latest version of MongoDB we'll need to add the
- 10gen repo to our apt sources list.
- .. code-block:: bash
- # Add 10gen official apt source to the sources list
- RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
- RUN echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | tee /etc/apt/sources.list.d/10gen.list
- Then, we don't want Ubuntu to complain about init not being available so we'll
- divert /sbin/initctl to /bin/true so it thinks everything is working.
- .. code-block:: bash
- # Hack for initctl not being available in Ubuntu
- RUN dpkg-divert --local --rename --add /sbin/initctl
- RUN ln -s /bin/true /sbin/initctl
- Afterwards we'll be able to update our apt repositories and install MongoDB
- .. code-block:: bash
- # Install MongoDB
- RUN apt-get update
- RUN apt-get install mongodb-10gen
- To run MongoDB we'll have to create the default data directory (because we want it to
- run without needing to provide a special configuration file)
- .. code-block:: bash
- # Create the MongoDB data directory
- RUN mkdir -p /data/db
- Finally, we'll expose the standard port that MongoDB runs on (27107)
- .. code-block:: bash
- EXPOSE 27017
- Now, lets build the image which will go through the ``Dockerfile`` we made and
- run all of the commands.
- .. code-block:: bash
- docker build -t <yourname>/mongodb .
- Now you should be able to run ``mongod`` as a daemon and be able to connect on
- the local port!
- .. code-block:: bash
- # Regular style
- MONGO_ID=$(docker run -d <yourname>/mongodb mongod)
- # Lean and mean
- MONGO_ID=$(docker run -d <yourname>/mongodb mongod --noprealloc --smallfiles)
- # Check the logs out
- docker logs $MONGO_ID
- # Connect and play around
- mongo --port <port you get from `docker ps`>
- Sweet!
|