Friday, August 5, 2022

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

Categories

Kubernetes (24) Docker (20) git (13) Jenkins (12) AWS (7) Jenkins CI (5) Vagrant (5) K8s (4) VirtualBox (4) CentOS7 (3) docker registry (3) docker-ee (3) ucp (3) Jenkins Automation (2) Jenkins Master Slave (2) Jenkins Project (2) containers (2) create deployment (2) docker EE (2) docker private registry (2) dockers (2) dtr (2) kubeadm (2) kubectl (2) kubelet (2) openssl (2) Alert Manager CLI (1) AlertManager (1) Apache Maven (1) Best DevOps interview questions (1) CentOS (1) Container as a Service (1) DevOps Interview Questions (1) Docker 19 CE on Ubuntu 19.04 (1) Docker Tutorial (1) Docker UCP (1) Docker installation on Ubunutu (1) Docker interview questions (1) Docker on PowerShell (1) Docker on Windows (1) Docker version (1) Docker-ee installation on CentOS (1) DockerHub (1) Features of DTR (1) Fedora (1) Freestyle Project (1) Git Install on CentOS (1) Git Install on Oracle Linux (1) Git Install on RHEL (1) Git Source based installation (1) Git line ending setup (1) Git migration (1) Grafana on Windows (1) Install DTR (1) Install Docker on Windows Server (1) Install Maven on CentOS (1) Issues (1) Jenkins CI server on AWS instance (1) Jenkins First Job (1) Jenkins Installation on CentOS7 (1) Jenkins Master (1) Jenkins automatic build (1) Jenkins installation on Ubuntu 18.04 (1) Jenkins integration with GitHub server (1) Jenkins on AWS Ubuntu (1) Kubernetes Cluster provisioning (1) Kubernetes interview questions (1) Kuberntes Installation (1) Maven (1) Maven installation on Unix (1) Operations interview Questions (1) Oracle Linux (1) Personal access tokens on GitHub (1) Problem in Docker (1) Prometheus (1) Prometheus CLI (1) RHEL (1) SCM (1) SCM Poll (1) SRE interview questions (1) Troubleshooting (1) Uninstall Git (1) Uninstall Git on CentOS7 (1) Universal Control Plane (1) Vagrantfile (1) amtool (1) aws IAM Role (1) aws policy (1) caas (1) chef installation (1) create organization on UCP (1) create team on UCP (1) docker CE (1) docker UCP console (1) docker command line (1) docker commands (1) docker community edition (1) docker container (1) docker editions (1) docker enterprise edition (1) docker enterprise edition deep dive (1) docker for windows (1) docker hub (1) docker installation (1) docker node (1) docker releases (1) docker secure registry (1) docker service (1) docker swarm init (1) docker swarm join (1) docker trusted registry (1) elasticBeanStalk (1) global configurations (1) helm installation issue (1) mvn (1) namespaces (1) promtool (1) service creation (1) slack (1)