===== Docker volumes by examples =====
==== Start mysql with docker volumes ====
# hostpath bind mount
docker run --name mysql-db \
-v $(pwd)/datadir:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:8.4.9
docker stop mysql.db
docker rm mysql-db
# or docker managed volume /var/lib/docker/volumes
docker volume create mysql-data
docker run --name mysql-db \
-v mysql-data:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:8.4.9
==== NFS ====
- https://oneuptime.com/blog/post/2026-01-30-docker-nfs-volumes/view
- https://docs.docker.com/engine/storage/volumes/
Install NFS kernel server
sudo apt update
sudo apt install -y nfs-kernel-server
# Create the export directory
sudo mkdir -p /exports/shared
sudo chown nobody:nogroup /exports/shared
sudo chmod 755 /exports/shared
# add this to /etc/exports
sudo vi /etc/exports
/exports/shared 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)
# Export the shares
sudo exportfs -ra
# Start and enable NFS server
sudo systemctl enable nfs-kernel-server
sudo systemctl start nfs-kernel-server
# Verify exports
sudo exportfs -v
Create docker volume with a NFS Share:
docker volume create \
--driver local \
--opt type=nfs \
--opt o=addr=192.168.1.100,rw,nfsvers=4.1 \
--opt device=:/exports/shared \
shared-data
Use volume inside docker-compose service:
mkdir -p web
cd web
cat >docker-compose.yml <
Use nfs share with docker --mount directly:
docker run -d \
--name web \
--mount type=volume,volume-driver=local,\
volume-opt=type=nfs,\
volume-opt=o=addr=192.168.1.100,\
volume-opt=device=:/exports/shared,\
dst=/usr/share/nginx/html \
nginx:alpine