# Using MongoDB on Docker

Installing MongoDB is difficult and time-consuming and requires many configuration changes. All this process can be made easy by using MongoDB over Docker.

Here is a short and simple tutorial that I wrote for myself and sharing here. I'm using Kali Linux 20.04. It should be similar for all other OS.

> Depending on how docker is configured on your system you might need to use `sudo` before all the docker commands


### Step 1: Pull docker image of MongoDB

`docker pull mongo`

The MongoDB image will be downloaded.

> Check the list of docker images

> `docker images`
> ![Screenshot from 2021-01-30 20-31-06.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1612019022501/Lq2GYIR3R.png)

### Step 2: Create a container

`docker run -d -p 27017:27017 -v /data/db:/data/db --name mongo_cont mongo`

In `/data/db:/data/db`, the first part in the path where the data is stored on you system(change this if required). The 2nd part is the path where the data is saved by MongoDB inside the container. 

> The container mongo_cont should be running. Check the list of containers. Make sure port 27017 is not occupied already. 

> `docker ps -a`

> ![Screenshot from 2021-01-30 20-38-32.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1612019348126/nw3_MREBP.png)


### Step 3: Get into the container to use mongo shell

`docker exec -it <CONTAINER ID> bash`


> Now you are inside the container. Open mongo shell in the container using:-

> `mongo`

> ![Screenshot from 2021-01-30 20-59-13.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1612020595538/IzBwgghNT.png)

<br/>
### -  **Stopping the container**

`docker stop <CONTAINER ID>`

### - **Starting the container again after stopping and using it again**

`docker start <CONTAINER ID>`

`docker exec -it <CONTAINER ID> bash`
<br/>
### Some important points:-

- All the containers have the same databases
- Stopping the container doesn't delete the database data 
- Restarting the system doesn't delete the database data
- Deleting the container doesn't delete the database data. When a new container is created the previous data is present in it.



