You can experiment this by starting a basic ubuntu image and create a test file or dir. The soon you exit the container all your changes will disappear.

Shell

1

2

3

4

docker run-t-iubuntu/bin/bash

touch/my_file

ls->you will see my_file

exit

Let’s try to bring that container up again:

Shell

1

2

docker run-t-iubuntu/bin/bash

ls->my_file isGONE

Thankfully Docker provides the solution to keep data persistent.

Docker Data Volumes

Docker data volumes are used when:

You want to persist data, even through container restarts

You want to share data between the host filesystem and the Docker container

You want to share data with other Docker containers.

Data persist

There’s no way to directly create a “data volume” in Docker, so instead we create a data volume containerwith a volume attached to it. For any other containers that you then want to connect to this data volume container, use the Docker’s –volumes-from option to grab the volume from this container and apply them to the current container.

Le’s create a data volume container to store our volume:

Shell

1

2

docker create-v/data--name datacontainer ubuntu

docker volume ls

Shell

1

2

DRIVER VOLUME NAME

local c8b7031de3a7504c677b38617426ee22b28e3718c87331758d5022fd485b1e26

This created a container named datacontainer based on ubuntu image and in the directory /data.

If we reiterate our initial test with –volumes-from flag, anything we write to /data directory into current container will be saved to the /data volume of our datacontainer.

Shell

1

docker run-t-i--volumes-from datacontainer ubuntu/bin/bash

Shell

1

2

root@60c6e7f8307c:/# touch /data/my_file

exit

Now rerun the container and check if /data/my_file is persisted.

Shell

1

2

docker run-t-i--volumes-from datacontainer ubuntu/bin/bash

ls/data/

You can also create as many data volume containers as you’d like but you are restricted to choose the mount inside the container (/data in our example).

Sharing data between containers – shared volumes

There is the need to share data between host and container itself. Docker gives you the option to run a container and override one of its directories with the contents of a directory on the host system.

Let’s imagine you’re running your application and you want to keep the logs out of container.

C#

1

2

mkdir~/nginxlogs

docker run-d-v~/nginxlogs:/var/log/nginx-p8080:80-inginx

We set up a volume that links the /var/log/nginx directory from the nginx container to ~/nginxlogs on our host.

C#

1

2

curl localhost:80800

tail~/nginxlogs/access.log

If you make any changes to the ~/nginxlogs folder, you’ll be able to see them from inside the Docker container in real-time as well.

Advantages of MongoDB vs RDBMS

Schema less – the document is flexible compared to “table” structure including nullable fields from RDBMS. One collection can hold even different different documents. Number of fields, content and size of the document can be differ from one document to another.

No complex joins – as data is usually stored with the same document. We’re going to discuss about embedding related data in document and how MongoDB is dealing with the lack of relations.

Relational databases (RDBMS) were not designed to cope with the scale and agility challenges that face modern applications, nor were they built to take advantage of the commodity storage and processing power available today.

The Next Generation of Databases is addressing some of the points: being non-relational, distributed, open-source and horizontally scalable.

The movement began early 2009 and is growing rapidly. Often more characteristics apply such as: schema-free, easy replication support, simple API, eventually consistent / BASE (not ACID), a huge amount of data and more.

Why is NoSQL exploding? The easy way to explain this is flexibility and power. So do we want to drop 40+ years of RDBMS ? No, more than that the community now translates “nosql” mostly with “not only sql“.

The NoSQL market is expected to be $3.5 billion by 2018, according to a Market Research Media Ltd. In the meantime the RDBMS market is around $26 billion (n.r. 2013) with about 9 percent annual growth so by 2018 the RDBMS market will reach $40 billion.

In the future posts I’m going to focus on MongoDB database, covering from basic aspects and DevOps to more advanced topics.