123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- :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 pre-installed. 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 `Ubuntu <https://index.docker.io/_/ubuntu/>`_ (tag: ``latest``)
- available on the `docker index <http://index.docker.io>`_:
- .. 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, as well as
- define an ``ENTRYPOINT`` instruction for the container.
- .. code-block:: bash
- EXPOSE 27017
- ENTRYPOINT ["usr/bin/mongod"]
- Now, lets build the image which will go through the ``Dockerfile`` we made and
- run all of the commands.
- .. code-block:: bash
- sudo 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=$(sudo docker run -d <yourname>/mongodb)
- # Lean and mean
- MONGO_ID=$(sudo docker run -d <yourname>/mongodb --noprealloc --smallfiles)
- # Check the logs out
- sudo docker logs $MONGO_ID
- # Connect and play around
- mongo --port <port you get from `docker ps`>
- Sweet!
|