Creating a docker volume
To use the external volume for our future container, we need to format a filesystem on the volume.
We use the ext4 filesystem to format our block device, we will demonstrate that as follows:
vamshi@node03:~$ sudo mkfs.ext4 /dev/sdb mke2fs 1.43.4 (31-Jan-2017) Discarding device blocks: done Creating filesystem with 524288 4k blocks and 131072 inodes Filesystem UUID: bc335e44-d8e9-4926-aa0a-fc7b954c28d1 Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912 Allocating group tables: done Writing inode tables: done Creating journal (16384 blocks): done Writing superblocks and filesystem accounting information: done
Here is the command to create a volume by mentioning the path to the block device and using it in the local scope
docker volume create jenkins_vol1 --driver local --opt device=/dev/sdb jenkins_vol1
We have successfully creates a docker volume using a block device.
Inspecting the docker volume that is created:
vagrant@node03:~$ docker volume inspect jenkins_vol1 [ { "CreatedAt": "2020-05-12T17:22:11Z", "Driver": "local", "Labels": {}, "Mountpoint": "/var/lib/docker/volumes/jenkins_vol1/_data", "Name": "jenkins_vol1", "Options": { "device": "/dev/sdb", "type": "ext4" }, "Scope": "local" } ]
Creating my jenkins container which will use the docker volume jenkins_vol1 and mount it to /var/jenkins_home/.m2
docker run -d -p 8080:8080 --name jenkins --mount 'type=volume,src=temp_vol,dst=/var/jenkins_home/.m2, volume-driver=local' jenkins:latest
We have successfully started our container and now lots login to the container and check our volume.
jenkins@fc2c49313ddb:/$ df -hT Filesystem Type Size Used Avail Use% Mounted on overlay overlay 29G 4.9G 23G 18% / tmpfs tmpfs 64M 0 64M 0% /dev tmpfs tmpfs 970M 0 970M 0% /sys/fs/cgroup shm tmpfs 64M 0 64M 0% /dev/shm /dev/sda3 ext4 29G 4.9G 23G 18% /var/jenkins_home /dev/sdb ext4 2.0G 6.0M 1.8G 1% /var/jenkins_home/.m2 tmpfs tmpfs 970M 0 970M 0% /proc/acpi tmpfs tmpfs 970M 0 970M 0% /sys/firmware
As we can see from the output the mount point /var/jenkins_home/.m2 is mounted with block device /dev/sdb using a ext4 filesystem
/dev/sdb ext4 2.0G 6.0M 1.8G 1% /var/jenkins_home/.m2
Creating a 200MB temp filesystem volume.
docker volume create --name temp_vol --driver local --opt type=tmpfs --opt device=tmpfs --opt o=size=200m
The inspect of the temp_vol we created is as follows:
vamshi@node03:~$ docker volume inspect temp_vol [ { "CreatedAt": "2020-05-02T17:31:01Z", "Driver": "local", "Labels": {}, "Mountpoint": "/var/lib/docker/volumes/temp_vol/_data", "Name": "temp_vol", "Options": { "device": "tmpfs", "o": "size=100m,uid=1000", "type": "tmpfs" }, "Scope": "local" } ]
docker run -d -p 8080:8080 --name jenkins --mount 'type=volume,src=jenkins_vol1,dst=/var/jenkins_home/.m2,volume-driver=local' jenkins:latest
vamshi@node03:~$ docker exec -it jenkins bash jenkins@2267ba462aa2:/$ df -hT Filesystem Type Size Used Avail Use% Mounted on overlay overlay 29G 4.9G 23G 18% / tmpfs tmpfs 64M 0 64M 0% /dev tmpfs tmpfs 970M 0 970M 0% /sys/fs/cgroup shm tmpfs 64M 0 64M 0% /dev/shm /dev/sda3 ext4 29G 4.9G 23G 18% /var/jenkins_home tmpfs tmpfs 100M 0 100M 0% /var/jenkins_home/.m2 tmpfs tmpfs 970M 0 970M 0% /proc/acpi tmpfs tmpfs 970M 0 970M 0% /sys/firmware jenkins@2267ba462aa2:/$ exit
Here is shows the mount point details:
tmpfs tmpfs 200M 0 200M 0% /var/jenkins_home/.m2
Please note the mount point /var/jenkins_home/.m2 which has 200MB space as defined.
Thus we can make use of the docker volumes and use the persistent fileystems and attach the block disks to a running container.