===== 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