github.com/guilhermebr/docker@v1.4.2-0.20150428121140-67da055cebca/docs/sources/examples/mongodb.md (about)

     1  page_title: Dockerizing MongoDB
     2  page_description: Creating a Docker image with MongoDB pre-installed using a Dockerfile and sharing the image on Docker Hub
     3  page_keywords: docker, dockerize, dockerizing, article, example, docker.io, platform, package, installation, networking, mongodb, containers, images, image, sharing, dockerfile, build, auto-building, virtualization, framework
     4  
     5  # Dockerizing MongoDB
     6  
     7  ## Introduction
     8  
     9  In this example, we are going to learn how to build a Docker image with
    10  MongoDB pre-installed.  We'll also see how to `push` that image to the
    11  [Docker Hub registry](https://hub.docker.com) and share it with others!
    12  
    13  Using Docker and containers for deploying [MongoDB](https://www.mongodb.org/)
    14  instances will bring several benefits, such as:
    15  
    16   - Easy to maintain, highly configurable MongoDB instances;
    17   - Ready to run and start working within milliseconds;
    18   - Based on globally accessible and shareable images.
    19  
    20  > **Note:**
    21  > 
    22  > If you do **_not_** like `sudo`, you might want to check out: 
    23  > [*Giving non-root access*](/installation/binaries/#giving-non-root-access).
    24  
    25  ## Creating a Dockerfile for MongoDB
    26  
    27  Let's create our `Dockerfile` and start building it:
    28  
    29      $ nano Dockerfile
    30  
    31  Although optional, it is handy to have comments at the beginning of a
    32  `Dockerfile` explaining its purpose:
    33  
    34      # Dockerizing MongoDB: Dockerfile for building MongoDB images
    35      # Based on ubuntu:latest, installs MongoDB following the instructions from:
    36      # http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/
    37  
    38  > **Tip:** `Dockerfile`s are flexible. However, they need to follow a certain
    39  > format. The first item to be defined is the name of an image, which becomes
    40  > the *parent* of your *Dockerized MongoDB* image.
    41  
    42  We will build our image using the latest version of Ubuntu from the
    43  [Docker Hub Ubuntu](https://registry.hub.docker.com/_/ubuntu/) repository.
    44  
    45      # Format: FROM    repository[:version]
    46      FROM       ubuntu:latest
    47  
    48  Continuing, we will declare the `MAINTAINER` of the `Dockerfile`:
    49  
    50      # Format: MAINTAINER Name <email@addr.ess>
    51      MAINTAINER M.Y. Name <myname@addr.ess>
    52  
    53  > **Note:** Although Ubuntu systems have MongoDB packages, they are likely to
    54  > be outdated. Therefore in this example, we will use the official MongoDB
    55  > packages.
    56  
    57  We will begin with importing the MongoDB public GPG key. We will also create
    58  a MongoDB repository file for the package manager.
    59  
    60      # Installation:
    61      # Import MongoDB public GPG key AND create a MongoDB list file
    62      RUN apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv 7F0CEB10
    63      RUN echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | tee /etc/apt/sources.list.d/10gen.list
    64  
    65  After this initial preparation we can update our packages and install MongoDB.
    66  
    67      # Update apt-get sources AND install MongoDB
    68      RUN apt-get update && apt-get install -y mongodb-org
    69  
    70  > **Tip:** You can install a specific version of MongoDB by using a list
    71  > of required packages with versions, e.g.:
    72  > 
    73  >     RUN apt-get update && apt-get install -y mongodb-org=2.6.1 mongodb-org-server=2.6.1 mongodb-org-shell=2.6.1 mongodb-org-mongos=2.6.1 mongodb-org-tools=2.6.1
    74  
    75  MongoDB requires a data directory. Let's create it as the final step of our
    76  installation instructions.
    77  
    78      # Create the MongoDB data directory
    79      RUN mkdir -p /data/db
    80  
    81  Lastly we set the `ENTRYPOINT` which will tell Docker to run `mongod` inside
    82  the containers launched from our MongoDB image. And for ports, we will use
    83  the `EXPOSE` instruction.
    84  
    85      # Expose port 27017 from the container to the host
    86      EXPOSE 27017
    87  
    88      # Set usr/bin/mongod as the dockerized entry-point application
    89      ENTRYPOINT usr/bin/mongod
    90  
    91  Now save the file and let's build our image.
    92  
    93  > **Note:**
    94  > 
    95  > The full version of this `Dockerfile` can be found [here](/examples/mongodb/Dockerfile).
    96  
    97  ## Building the MongoDB Docker image
    98  
    99  With our `Dockerfile`, we can now build the MongoDB image using Docker. Unless
   100  experimenting, it is always a good practice to tag Docker images by passing the
   101  `--tag` option to `docker build` command.
   102  
   103      # Format: docker build --tag/-t <user-name>/<repository> .
   104      # Example:
   105      $ docker build --tag my/repo .
   106  
   107  Once this command is issued, Docker will go through the `Dockerfile` and build
   108  the image. The final image will be tagged `my/repo`.
   109  
   110  ## Pushing the MongoDB image to Docker Hub
   111  
   112  All Docker image repositories can be hosted and shared on
   113  [Docker Hub](https://hub.docker.com) with the `docker push` command. For this,
   114  you need to be logged-in.
   115  
   116      # Log-in
   117      $ docker login
   118      Username:
   119      ..
   120  
   121      # Push the image
   122      # Format: docker push <user-name>/<repository>
   123      $ docker push my/repo
   124      The push refers to a repository [my/repo] (len: 1)
   125      Sending image list
   126      Pushing repository my/repo (1 tags)
   127      ..
   128  
   129  ## Using the MongoDB image
   130  
   131  Using the MongoDB image we created, we can run one or more MongoDB instances
   132  as daemon process(es).
   133  
   134      # Basic way
   135      # Usage: docker run --name <name for container> -d <user-name>/<repository>
   136      $ docker run --name mongo_instance_001 -d my/repo
   137  
   138      # Dockerized MongoDB, lean and mean!
   139      # Usage: docker run --name <name for container> -d <user-name>/<repository> --noprealloc --smallfiles
   140      $ docker run --name mongo_instance_001 -d my/repo --noprealloc --smallfiles
   141  
   142      # Checking out the logs of a MongoDB container
   143      # Usage: docker logs <name for container>
   144      $ docker logs mongo_instance_001
   145  
   146      # Playing with MongoDB
   147      # Usage: mongo --port <port you get from `docker ps`> 
   148      $ mongo --port 12345
   149  
   150   - [Linking containers](/userguide/dockerlinks)
   151   - [Cross-host linking containers](/articles/ambassador_pattern_linking/)
   152   - [Creating an Automated Build](/docker-io/builds/#automated-builds)