Switching storage drivers for Docker on Ubuntu

 Switch Storage Driver for Docker on Ubuntu

This blog post is aimed to experiment based on "How to switch to a different storage driver on an existing docker installation in Ubuntu".


Prerequisites

  • Ubuntu Linux VM instance on any Cloud or Local VM
  • Knowledge about filesystem how it works

Step1: What filesystem provided by your OS

cat /proc/filesystem or grep btrfs /etc/filesystem
Is your docker version supports the filesystem available on your VM instance.
grep brtfs /proc/filesystem
Step 2: Take a backup of docker folder
cp -au /var/lib/docker /var/lib/docker.bk
Create loop devices attach them using images created by dd command
  dd if=/dev/zero of=test1 bs=1 count=1 seek=4294967295
  dd if=/dev/zero of=test2 bs=1 count=1 seek=4294969343
Here the /dev/zero provides an endless stream of zero bytes when read (if). This function is provided by the kernel and does not require allocating memory. and all writes (of) to given file location. As a result, when you perform the dd, the system generates number of megabytes in zero bytes that simply get discarded.
ls -lh
Adding the test1, test2 files as loop devices using losetup command.
 losetup -f test1
 losetup -f test2
Check for the loop devices used:
 losetup | grep test
Creating pool of BTRFS Filesystem Let us create the Btrfs file-system now for our logical volumes created above.
 mkfs.btrfs -f /dev/loop4 /dev/loop5
 lsblk
Now all set for the Docker storage driver switch So now mount the BTRFS filesystem for /var/lib/docker path.
 
mkdir -p /var/lib/docker #if already exists ignore this
mount -t btrfs /dev/loop4 /var/lib/docker

# Validate the device mappings
df -h
btrfs filesystem mounting


Get back the docker engine configurations
cp -au /var/lib/docker.bk/* /var/lib/docker/
where you need to create a file called daemon.json if it is not exists. vi /etc/docker/daemon.json that contains by default storage driver 'overlay2'.
{
	"storage-driver": "overlay2"
}
change overlay2 to btrfs driver. After the changes to take effect of the storage driver restart the docker daemon.
# content in the file  /etc/docker/daemon.json
{
  "storage-driver": "btrfs"
}
Start the Docker daemon:
systemctl start docker
systemctl status docker
When we do this experiment changing the storage driver overlay2 to btrfs driver everything in-accessible. Check images list with overlay2 driver:
docker images
Here you could see the difference by checking the docker images list with btrfs, where it is new filesystem no image visible here.

Revert back from BTRFS to Overlay2 driver

This part of exeriment will confirms that all the images which you have saved in the overlay2 are accessible back when storage driver shifted from btrfs to 'Overlay2'.
cd /var/lib/docker/overlay2; ls -lrt
Validate you have storage driver as btrfs `docker info` Stop the docker daemon
systemctl stop docker
Change back to overlay2 in the daemon.json file vi /etc/docker/daemon.json start the docker daemon and check the storage driver:
systemctl start docker; systemctl status docker; docker info

#Check the info filter out the 'Storage Driver' value
docker info -f 'Storage Driver: {{.Driver}}'
#Check the docker images which will show all the previous images.
docker images

Comments

Popular posts from this blog

Ansible 11 The uri module with examples

Jenkins Active choices parameter - Dynamic input

DevOps Weapons