Predictive Hacks

Docker Storage Tutorial

docker

Docker has two main categories of data storage, the persistent and the non-persistent.

Persistent Data Storage

Persistent data storage are the volumes which are decoupled from the containers.

Volumes:

  • Use a volume for persistent data:
    • Create the volume first, then create your container.
  • Mounted to a directory in the container
  • Data is written to the volume
  • Deleting a container does not delete the volume
  • First-class citizens
  • Uses the local driver
  • Third party drivers:
    • Block storage
    • File storage
    • Object storage
  • Storage locations:
    • Linux: /var/lib/docker/volumes/
    • Windows: C:\ProgramData\Docker\volumes

Non-Persistent Data Storage

  • Non-persistent
    • Local storage
    • Data that is ephemeral
    • Every container has it
    • Tied to the lifecycle of the contain
  • By default all container use local storage
  • Storage locations:
    • Linux: /var/lib/docker/[STORAGE-DRIVER]/
    • Windows: C:\ProgramData\Docker\windowsfilter\
  • Storage Drivers:
    • RHEL uses overlay2.
    • Ubuntu uses overlay2 or aufs.
    • SUSE uses btrfs.
    • Windows uses its own.

Volume Commands

List all Docker volume commands:

docker volume -h
  • create: Create a volume.
  • inspect: Display detailed information on one or more volumes.
  • ls: List volumes.
  • prune: Remove all unused local volumes.
  • rm: Remove one or more volumes.

List all volumes:

docker volume ls

Create two new volumes:

docker volume create test-volume1
docker volume create test-volume2

Get the flags available when creating a volume:

docker volume create -h

Inspecting a volume:

docker volume inspect test-volume1

Deleting a volume:

docker volume rm test-volume

Removing all unused volumes:

docker volume prune

Bind Mounts

Bind mounts have been around since the early days of Docker. They have limited functionality compared to volumes. With bind mount, a file or directory on the host machine is mounted into a container.

Volumes use a new directory that is created within Docker’s storage directory on the host machine, and Docker manages that directory’s contents.

Using the mount flag:

docker container run -d --name <NAME> --mount type=bind, source=<SOURCE>, target=<TARGET> <IMAGE>

Using the volume flag:

docker container run -d --name <NAME> -v <SOURCE>:<TARGET> <IMAGE>

Let’s provide a walk through example of how to run a container with volumes. We are in our working directory, and we create a folder called mysource which will be connected with our docker container under the mytarget folder, where in our case is the nginx. Let’s run the command (Note that I am on Windows that is the reason for the backslash in the source path):

docker container run -d --name nginx_with_volume -v  C:\ForTheBlog\VolumeExample\mysource:/mytarget nginx

Now, let’s say that we create a new file called myfile1.txt, in our local PC under the mysource folder:

Docker Storage Tutorial 1

Now, we expect to find the file1.txt within the container under the mytarget folder. Let’s run the bash command in an interactive terminal (-it):

docker exec -it nginx_with_volume bash

We’re inside the container. We can search for the files and directories with the ls command:

ls -ltr
Docker Storage Tutorial 2

We can change directory (cd) to mytarget:

cd mytarget
ls -ltr
Docker Storage Tutorial 3

As we can see the file1.txt mounted from our local PC inside the container. Finally, let’s create a new file called file2.txt within the container under the mytarget folder.

touch file2.txt
echo "A file created within the container" > file2.txt
Docker Storage Tutorial 4

We expect to find the file2.txt in our local PC under the mysource folder. As we can see it is there!

Docker Storage Tutorial 5
Docker Storage Tutorial 6

Remove the Container

Since we are done with this tutorial, it is time to clean our mess :). So, let’s stop and then remove the container.

docker stop nginx_with_volume
docker rm nginx_with_volume

Reference

[1] Linux Academy

Share This Post

Share on facebook
Share on linkedin
Share on twitter
Share on email

Leave a Comment

Subscribe To Our Newsletter

Get updates and learn from the best

More To Explore

Python

Document Splitting with LangChain

In this tutorial, we will talk about different ways of how to split the loaded documents into smaller chunks using