Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is the Docker vfs storage backend not considered suitable for production?

Tags:

docker

The Docker vfs storage backend is in several places mentioned as not being a production backend (see for example this Docker GitHub issue comment by Michael Crosby). What makes it not suitable for production?

Project Atomic's description of storage backends says:

The vfs backend is a very simple fallback that has no copy-on-write support. Each layer is just a separate directory. Creating a new layer based on another layer is done by making a deep copy of the base layer into a new directory.

Since this backend doesn’t share diskspace use between layers, and since creating a new layer is a slow operation this is not a very practical backend. However, it still has its uses, for instance to verify other backends against, or if you need a super robust (if slow) backend that works everywhere.

According to that description it sounds like the only downside is that more disk space might be used and creating layers might be slower. But there are no mentions of downsides during runtime when accessing files, and it is even described as "robust". The disk space issue alone does not seem like a blocker for production use.

like image 743
Markus Miller Avatar asked Jul 14 '14 12:07

Markus Miller


1 Answers

Indeed, you could use the vfs driver in production, however, be aware that as it is a 'regular' copy, you won't benefit from the features that devicemapper or btrfs can provide and you rely exclusively on the underlying file system.

The runtime downside is that it is much slower to run. Once started, if you have the same underlying file system, it will be the same thing.

In short, I would recommend against because:

  • It has been implemented first for tests then used for volumes. Never meant to be used for runtime
  • It relies on the underlying file system so you give less control to Docker over your files. It might (or might not) cause issues with future upgrade. The very purpose of Docker is to abstract the host, so you are better off delegating this kind of thing to Docker.
  • It takes a lot of disk space
  • It takes a lot of time to run or commit
like image 76
creack Avatar answered Oct 14 '22 08:10

creack