New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Better documentation for storage drivers #18298
Comments
Hi! Please read this important information about creating issues. If you are reporting a new issue, make sure that we do not have any duplicates already open. You can ensure this by searching the issue list for this repository. If there is a duplicate, please close your issue and add a comment to the existing issue instead. If you suspect your issue is a bug, please edit your issue description to include the BUG REPORT INFORMATION shown below. If you fail to provide this information within 7 days, we cannot debug your issue and will close it. We will, however, reopen it if you later provide the information. This is an automated, informational response. Thank you. For more information about reporting issues, see https://github.com/docker/docker/blob/master/CONTRIBUTING.md#reporting-other-issues BUG REPORT INFORMATIONUse the commands below to provide key information from your environment:
Provide additional environment details (AWS, VirtualBox, physical, etc.): List the steps to reproduce the issue: Describe the results you received: Describe the results you expected: Provide additional info you think is important: ----------END REPORT --------- #ENEEDMOREINFO |
We recently added a whole section dedicated to storage drivers in our documentation; https://docs.docker.com/engine/userguide/storagedriver/imagesandcontainers/ is that what you're looking for? |
More something like https://docs.docker.com/engine/userguide/storagedriver/selectadriver/ Taking my own experience;
So, why do everyone push for overlayfs if it's so buggy? An overview in a table would be really useful. This little story shows that this is a minefield. What about a page with the backend filesystem combination in the X axis, and a little info about stuff like I know that this issue is a complex one. And 1 filesystem clearly doesn't fit all. But trying and failing hitting known bugs along the way as I did, trying to follow recommendation, is not a good thing either. |
Yes, even with the additional information in the new section, which storage driver to pick remains a tricky question to answer, and depends on many variables; the distro you're running on, kernel support, and use-case, to name a few. We're certainly open to improvements (and welcome contributions in that area) For RHEL/Fedora/CentOS based installations, devicemapper is currently the most used option; it's the most actively maintained driver (actively maintained by Red Hat). Using loopback with devicemapper is highly discouraged by the devicemapper maintainers, especially for production use. w.r.t Overlay; this driver may become the default in future, one of the reasons for that is that it's included in newer kernels by default, so has widespread support. Unfortunately it still has some quirks (incompatibility with RPMs being one of them, excessive inode usage is another), which makes it currently not suitable for setting as "default" (see #12354) . Depending on your use case, you may not be affected by those quirks, and overlay could be an option to consider. Also, Red Hat is currently working on making changes to RPM to make it work with overlay. We considered including a compatibility matrix in the documentation, but decided to not include this at this moment, because it may be difficult to maintain and keep up to date (see https://github.com/docker/docker/pull/16766/files?short_path=991890e#diff-991890e619874cd6bb0277584bb7f7a4), but again, open to suggestions here. |
I think that If I have seen https://www.docker.com/compatibility-maintenance earlier, I would probably stopped at dm with thin.. The compatibility matrix was a good start imo. As suggested in the pull #16766, I don't know if people setting up Docker would even see this message. At least for many of the people I have talked to, I think they want to stay as close to "distro default" as possible. What about having a link to some more online documentation on the |
That could be helpful yes. I don't think we currently output URLs as part of log messages, and if we start @moxiegirl @SvenDowideit Any thoughts on this?
Oh, that's an interesting one. The page you're referring to there, is for the "commercially supported" (CS) release of Docker. The open source docker engine may actually "support" far more combinations (technically), but commercial support may not cover those. Perhaps we should add some links to commercially supported versions of Docker, to make users more aware of their existence, not sure. I'll defer that one to @moxiegirl 😄 |
@xeor I'm very sorry our documentation couldn't meet your needs. Thank you for taking the time to provide such great feedback. It is very helpful. This article was written by a guest blogger in the Docker space -- the doc team provided editorial guidance. @nigelpoulton is very knowledgeable and researched anything he wasn't already familiar with. We will work with him to continue to improve what is there. That said, documentation, unfortunately, cannot always address every user or every use case. For that reason, when seeking production experiences, you are really well served by supplementing your documentation reading by asking the Docker community. Their real-world experience will always be broader as it grows every day. You are likely to find a use-case match there faster than the docs. Adding links in log messages is very hard to maintain and manage. Though, I do agree with you they can be helpful. I'll add it to our requirements but I can't promise that in the near future. The https://www.docker.com/compatibility-maintenance refers to our Commercially Supported Engine. There is documentation for that but since it is used exclusively with the Trusted Registry, the docs are in that section. It doesn't include the compatibility matrix; we can add that and I will work with our team to make it more prominent. |
Thanks for the reply @moxiegirl. I usually turn to the community when looking for questions like this. However, this time, I read a bunch of blog-posts, "friends don't let friends use devicemapper"-type-posts, and so on. Many of the articles are out there, and it's hard to find a "correct" one that is still not outdated. What about a simple "go.docker.com/ab23" type perm-linking / url-shortener / redirector? |
@xeor Yes, we do want to include more information from bloggers. As time and resources allow, we will do more. I'll make sure to review some blogs from external sources when we update the material. Regarding the links, the technology of shortening is not the issue. Error and information messages are produced by the development team for each product. So, while I can make suggestions about their construction, the ultimate decision is up to the development team. They decide on standards and guidelines around code. @thaJeztah is an encyclopedia of are PR and coding standards. I'm sure he will bring message guidelines up with the team, as will I. We really do appreciate your suggestion and are not going to forget it even if we can't implement it as quickly as we'd like. |
I'll have a think about making the "Which storage driver should you choose?" section a bit better. Thoughts so far are....
I'm thinking out loud but these ideas feel like they'd offer more guidance without being constrictive. Any further thoughts? |
When talking about OverlayFS being young, maybe there can also being a mention about what kind of bugs that might show up in overlayfs. Being "young", and mentioned as the "future" in the same paragraph tells me that a lot of people are using it, and it doesn't contain that many bugs. I don't know about AUFS, but setting up device-mapper with lvm-thin do require some extra work.
Refeering to the CS is a good idea imo. I think most of the people playing with Docker want to play with "Docker" itself, not the storage problem :) |
OK, so first things first..... I'll whip up a rough redo of the "Which storage driver should you choose?" section and post here for thoughts. |
Thanks for looking into this @nigelpoulton! |
Thanks @nigelpoulton :-D and @xeor --- you have a great point about being more specific about the actual limitations. |
I'm glad you agree :) Some times, it have felt like this is something everyone is knowing everything about.. Thanks again you all! |
OK so the following is massively rough (I'm at a conference at the moment so short for time) and is only some thoughts on updating the recommendation section. @moxiegirl I've gone heavy towards using the CS Engine as the gold standard for stability and reliability - a great idea that makes perfect sense (to me at least) and also gives airtime to the existence of the CS Engine. Anyway... here goes - As you might expect, the answer to this question is “it depends”. However, while there are some clear cases where one particular storage driver outperforms another for certain workloads, you should factor all of the following into your decision:
Whichever driver you choose, make sure it has strong community support and momentum. This is important because storage driver development in the Docker project relies on the community as much as the Docker staff to thrive. |
@nigelpoulton I'll see about adding this in the next couple of days. I'll leave it open in case someone else wants to pick it up. |
Would it also be a good idea to write down what types of bugs people have been reporting using overlay? Something like; "Some of the bugs people have been reporting when using OverlayFS is, not being able to store socket files, problems with yum, and problems deleting files.". Also, for the
There are probably similar questions using A simple; what would be the ideal storage setup if you want to try out Docker at a single node, small scale but in production. A link to the CS page would also be nice. :) |
@xeor Writing down the bugs: We use Github issues for that kind of tracking. Users can search for specific labels around storage drivers. Maintaining a list of specific issues is better left to these automated systems than manual lists in the docs. The most we would want to put in the docs is a pre-canned filter for folks. Using CS requires a purchase...so that has to be made clear. |
@moxiegirl I'll add some more to this in the morning so don't add it yet. @xeor I'll take a look at how feasible it is to adding some best practices on the pages specific to each driver so we can keep this section we're updating here non-driver-specific. Things like why /var/lib/docker still fills up etc belong in the driver specific pages IMO. |
@nigelpoulton The article is very popular! With great success comes greater scrutiny tho...and here we have some additional comments that came in through email: --------email ---- I've read your documents under docker.git/docs/userguide/storagedriver/. Here I'd like to make some suggestion to add some notes about aufs, I've read docs/userguide/storagedriver/overlayfs-driver.md, particulary OverlayFS and Docker PerformanceAs a general rule, the I'd point out a few things which may have some impacts to users.
Hmm, I might write badly about overlayfs too much. I am afraid that I am There are some configuratins and mount options in aufs to gain the
(aufs mount options)
All thse configs and options are to drop the features from aufs, and J. R. Okajima |
That's a cool response! |
For the 1st level aufs mount options, I'd suggest xino=/xino too. |
Right so I also love the response and detail - wowzers! But I do worry about getting too much into the weeds in technical docs like these... it can be a rabbit hole and we can end up creating a beast. Don't get me wrong.... the feedback and detail of the suggestions are great. But the docs then become harder to consume, harder to keep up to date, harder to vet and verify etc. And before we know it, we've got a 60,000 word doc that reads like stereo instructions translated through three different languages and requires a team of writers and engineers to make a single change. Just my opinions.... and I do love the passion and technical knowledge conveyed in the response.... I just worry that it's not the direction the docs should go. |
Nigel:
Yes, I understand that. Also the configuration as a recommendation from me may not be an option But I'd suggest to consider the 1st level recommended aufs mount options J. R. Okajima |
It was a long time since this thread was active. Some docs were added. |
I'm sorry if this is a tiresome topic, but I can't find a good answer.
I have started to look for which storage driver to use for my Docker machines in production.
Overlayfs looked like the one to use, so I tried it out, getting a ton of errors with socket files. Then I started getting weird errors if a layer was deleting from another layer on buildtime. Switching to ext4 as backing filesystem instead of xfs for the overlay driver solved that.
It's confusing to need to dig down all this old issues to figure out that this are mostly known issues.
It's also confusing to go from devicemapper (loop) > devicemapper (thin) > overlayfs (with xfs) > overlayfs (with ext4).
The best that worked for me (less buggy) was actually devicemapper, both loop and thin.
What is the "at the time" best option? Whats the pros and cons?
Maybe this should be a part of the documentation that is updated from time to time. A matrix-style overview.
The text was updated successfully, but these errors were encountered: