DEV Community

Z. QIU
Z. QIU

Posted on

3 3

Install MongoDB with Docker (in Ubuntu 18.04)

Info: This post is one of the articles in context of this post: Huawei Cloud ECS server notes

Firstly, create the mapping repository for mongodb:

  mkdir ~/docker/mongo_8301
  mkdir ~/docker/mongo_8301/db
  mkdir ~/docker/mongo_8301/config
  mkdir ~/docker/mongo_8301/log
Enter fullscreen mode Exit fullscreen mode

Then create the launch file for starting the docker container:

  touch ~/launchers/docker_mongo_8301.sh
  vi ~/launchers/docker_mongo_8301.sh
Enter fullscreen mode Exit fullscreen mode

Fill the following code into the launch file:

docker rm -f mongo_docker_8301
docker run -d -p 8301:27017 \
--name mongo_docker_8301 \
-v /home/jemaloQ/docker/mongo_8301/config:/data/configdb \
-v /home/jemaloQ/docker/mongo_8301/db:/data/db \
-v /home/jemaloQ/docker/mongo_8301/log:/data/log \
mongo --auth
Enter fullscreen mode Exit fullscreen mode

Now launch docker using cmd line: sh ~/launchers/docker_mongo_8301.sh. Wait till the end of image pull. Then check if mongo_docker_8301 is running correctly by executing docker ps -a | grep mongo.

Enter the inside of the container and execute mongo admin to login the default 'admin' database

   docker exec -it mongo_docker_8301 mongo admin
Enter fullscreen mode Exit fullscreen mode

Create an user of role administrator:

  > db.createUser({user:'admin',pwd:'JemaloAdmin', roles:[ { role:'userAdminAnyDatabase', db: 'admin'} ] })
  > exit
Enter fullscreen mode Exit fullscreen mode

Later on, I can login 'admin' as user admin:

  docker exec -it mongo_docker_8301 mongo admin
  > db.auth('admin','JemaloAdmin')
Enter fullscreen mode Exit fullscreen mode

I can create other users by specifying their info and roles. Now I create user "jemaloQ" as "dbOwner" of database "knowledge":

  > db.createUser({user:'jemaloQ',pwd:'123456', roles:[ { role:'dbOwner', db: 'knowledge'} ] })
Enter fullscreen mode Exit fullscreen mode

Snapshot of my Putty console:
Alt Text

Now try to connect the newly launched MongoDB by Python:

from pymongo import MongoClient

client = MongoClient("mongodb://jemaloQ:123456@111.22.123.117:8301")

# print all the Databases names in Mongodb, returns empty list if no database has been created 
client.list_database_names()

# connect to the 'knowledge' database, if it does not exist, this line shall create it and then connect to it
db = client['knowledge']

# get the 'test' collection of the 'knowledge' database, if it does not exist, this line shall create it
col = db.get_collection('test')

# this item shall be uploaded to my database
item_dic = {'uid': 123, 'name': 'jemaloQ'}

# a query filter for checking whether an item with same id exists or not
query_filter = {"uid": item_dic["uid"]}

# now insert the item to 'test' collection of knowledge' database
col.update( query_filter,  {'$setOnInsert': item_dic},  upsert=True)

# now, we can see the 'knowledge' database since it is no longer empty
client.list_database_names() # => ['knowledge']

Enter fullscreen mode Exit fullscreen mode

Thus, I have now implemented my MongoDB service using docker on my server.

API Trace View

How I Cut 22.3 Seconds Off an API Call with Sentry

Struggling with slow API calls? Dan Mindru walks through how he used Sentry's new Trace View feature to shave off 22.3 seconds from an API call.

Get a practical walkthrough of how to identify bottlenecks, split tasks into multiple parallel tasks, identify slow AI model calls, and more.

Read more →

Top comments (3)

Collapse
 
wclayferguson profile image
Clay Ferguson

You can also use "docker compose" like this:

github.com/Clay-Ferguson/quantizr/...

Collapse
 
zqiu profile image
Z. QIU • Edited

Thanks a lot. It's so helpful! I will try to implement my docker services in this way.

Collapse
 
lico profile image
SeongKuk Han

Thanks for sharing :DD

Some comments may only be visible to logged-in visitors. Sign in to view all comments.