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.