I like named volumes, because all my data is in one place. Makes backups easy.
Selfhosted
A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don't control.
Rules:
-
Be civil: we're here to support and learn from one another. Insults won't be tolerated. Flame wars are frowned upon.
-
No spam posting.
-
Posts have to be centered around self-hosting. There are other communities for discussing hardware or home computing. If it's not obvious why your post topic revolves around selfhosting, please include details to make it clear.
-
Don't duplicate the full text of your blog or github here. Just post the link for folks to click.
-
Submission headline should match the article title (don’t cherry-pick information from the title to fit your agenda).
-
No trolling.
Resources:
- selfh.st Newsletter and index of selfhosted software and apps
- awesome-selfhosted software
- awesome-sysadmin resources
- Self-Hosted Podcast from Jupiter Broadcasting
Any issues on the community? Report it using the report flag.
Questions? DM the mods!
I like having everything to do with a container in one folder, so I use ./ the bind mounts. Then I don't have to go hunting all over hells half acre for the various mounts that docker makes. If I backup/restore a folder, I know I have everything to do with that stack right there.
Named volumes let you specify more details like the type of driver to use.
For example, say you wanted to store your data in Minio, which is like S3, rather than on the local file system. You’d make a named volume and use the s3 driver.
Plus it helps with cross-container stuff. Like if you wanted sabnzbd and sonarr and radarr to use the same directory you just need to specify it once.
Or just something as simple as using a SMB/CIFS share for your data. Instead of mounting the share before running your container, you can make Docker do it by specifying it like this:
services:
my-service:
...
volumes:
- my-smb-share:/data:rw
volumes:
my-smb-share:
driver_opts:
type: "smb3"
device: "//mynas/share"
o: "rw,vers=3.1.1,addr=192.168.1.20,username=mbirth,password=supersecret,cache=loose,iocharset=utf8,noperm,hard"
For type
you can use anything you have a mount.<type>
tool available, e.g. on my Raspberry this would be:
$ ls /usr/sbin/mount.*
/usr/sbin/mount.cifs* /usr/sbin/mount.fuse3* /usr/sbin/mount.nilfs2* /usr/sbin/mount.ntfs-3g@ /usr/sbin/mount.ubifs*
/usr/sbin/mount.fuse@ /usr/sbin/mount.lowntfs-3g@ /usr/sbin/mount.ntfs@ /usr/sbin/mount.smb3@
And the o
parameter is everything you would put as options to the mount command (e.g. in the 4th column in /etc/fstab
). In the case of smb3, you can run mount.smb3 --help
to see a list of available options.
Doing it this way, Docker will make sure the share is mounted before running the container. Also, if you move the compose file to a different host, it'll just work if the share is reachable from that new location.
Ok I did not know about this at all. I've been just mounting it on the host which has been a bit of a pain at times.
I just did a massive refactor of my stacks, but now I might have to revisit them to do this.
There's also an NFSv4 driver which is great when you're running TrueNAS
what?? im definetly using this thanks for makong me aware of it.
On a simpler level, it's just an organizational thing. There are lots of other ways data from docker is consumed, and looking through a bunch of random hashes and trying to figure out what is what is insane.
I use NFS shares for all of my volumes so they're more portable for future expansion and easier to back up. It uses additional disk space for the cache of course, but i have plenty.
When I add a second server or add a dedicated storage device as I expand, it has made it easier to move with almost no effort.
Good question, I'm interested too. Personally I use this kind of mapping
volumes:
- /var/docker/contanier_name/data:/data
because it helps me with backups, while I keep all the docker-compose.yaml in /home/user/docker-compose/container_name
so I can mess with the compose folder whithout worrying too much about what's inside of it 🙈
I don't really have a technical reason, but I do only named volumes to keep things clear and tidy, specially compose files with databases.
When I do a backup I run a script that saves each volumes/database/compose files well organized in directories archived with tar.
In have this structure in my home directory: /home/user/docker/application_name/docker-compose.yaml
and it only contains the docker-compose.yml file (some times .env/Docker file).
I dunno if this is the most efficient way or even the best way to do things :/ but It also helps me to keep everything separate between all the necessary config files and the actual files (like movie files on Jellyfin) and it seems easier to switch over If I only need one part and not the other (uhhr sorry for my badly worded English, I hope it makes sense).
Other than that I also like to tinker arround and learn things :) Adding complexity gives me some kind of challenge? XD
I like named volumes, externally created, because they are less likely to be cleaned up without explicit deletion. There's also a few occasions I need to jump into a volume to edit files but the regular container doesn't have the tools I need so it's easier to mount by name rather than hash value.
I choose depending on whether I'll ever have to touch the files in the volume (e.g. for configuration), except for debugging where I spawn a shell. If I don't need to touch them, I don't want to see them in my config folder where the compose file is in. I usually check my compose folders into git, and this way I don't have to put the volumes into gitignore.