Data is only changing when I hit save, and it’s already been replicated via delegated by the time I’ve got a chance to react. I personally default to delegated, as generally our bind-mounted volumes contain source code. However, certain workloads could require increased consistency. The file system delays between the host and the container aren’t perceived by humans.
There may be delays until updates within the container appear on the host.
There may be delays before writes on a host are available to the container. Every time a write happens, the data is flushed to all participants of the mount’s view. The host and container are perfectly consistent. We can allow for some slight delays, and temporary discrepancies in exchange for greatly increased performance. Docker defaults to a consistent guarantee that the host and containers file system reflect each other.įor the majority of our use cases at Engage we don’t actually need a consistent reflection - perfect consistency between container and host is often unnecessary. One of the biggest performance optimisations you can make, is altering the guarantee that file system data is perfectly replicated to the host and container. We’ve identified bind-mounts can be slow on Mac ( see above). However, unlike Docker on Linux, any file system changes need to be passed between the host and container via Docker for Mac, which can soon add a lot of additional computational overhead. HyperKit provides the kernel capabilities of Linux. This is a native MacOS application, which is bundled with an embedded hypervisor ( HyperKit). In contrast, there is a much bigger overhead on MacOS and other platforms in keeping the file system consistent - which leads to a performance degradation.ĭocker containers run on top of a Linux kernel meaning Docker on Linux can utilise the native kernel and the underlying virtual file system is shared between the host and container. On Linux, keeping a consistent guaranteed view between the host and container has very little overhead. Any writes in either the host or container are then reflected vice-versa. It gives the container a view of the host’s file system - In literal terms, pointing a particular directory in the container to a directory on your Mac. In Docker, we can bind-mount a volume on the host (your mac), to a Docker container.