From 61f485fb48e64eb0c6af054a9b38cdbc0e1713d5 Mon Sep 17 00:00:00 2001 From: David Karlsson <35727626+dvdksn@users.noreply.github.com> Date: Wed, 13 Nov 2024 15:28:16 +0100 Subject: [PATCH 1/2] vale: add various linux/fs terms to vocabulary Signed-off-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> --- _vale/config/vocabularies/Docker/accept.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/_vale/config/vocabularies/Docker/accept.txt b/_vale/config/vocabularies/Docker/accept.txt index e3cd77f8863..565f3c8a6e0 100644 --- a/_vale/config/vocabularies/Docker/accept.txt +++ b/_vale/config/vocabularies/Docker/accept.txt @@ -66,6 +66,7 @@ Mac Mail(chimp|gun) Microsoft MySQL +NFSv\d Netplan Nginx Nuxeo @@ -120,8 +121,14 @@ Zsh [Rr]untimes? [Ss]andbox(ed)? [Ss]eccomp +[Ss]ubmounts? +[Ss]ubpaths? +[Ss]ubtrees? [Ss]wappable +[Ss]wappable +[Ss]warm [Ss]warm +[Ss]yscalls? [Ss]ysfs [Tt]oolchains? [Vv]irtiofs From 0ace39d6ef181a52612d160171c1e1e33fbcfd3a Mon Sep 17 00:00:00 2001 From: David Karlsson <35727626+dvdksn@users.noreply.github.com> Date: Wed, 13 Nov 2024 14:50:05 +0100 Subject: [PATCH 2/2] engine: freshness updates for storage mounts (bind, volume, tmpfs) Signed-off-by: David Karlsson <35727626+dvdksn@users.noreply.github.com> --- content/manuals/engine/storage/_index.md | 228 ++++----------- content/manuals/engine/storage/bind-mounts.md | 246 +++++++++------- .../storage/images/types-of-mounts-bind.webp | Bin 13424 -> 0 bytes .../storage/images/types-of-mounts-tmpfs.webp | Bin 13580 -> 0 bytes .../images/types-of-mounts-volume.webp | Bin 14034 -> 0 bytes .../storage/images/types-of-mounts.webp | Bin 13740 -> 0 bytes content/manuals/engine/storage/tmpfs.md | 120 ++++---- content/manuals/engine/storage/volumes.md | 266 +++++++++++------- 8 files changed, 430 insertions(+), 430 deletions(-) delete mode 100644 content/manuals/engine/storage/images/types-of-mounts-bind.webp delete mode 100644 content/manuals/engine/storage/images/types-of-mounts-tmpfs.webp delete mode 100644 content/manuals/engine/storage/images/types-of-mounts-volume.webp delete mode 100644 content/manuals/engine/storage/images/types-of-mounts.webp diff --git a/content/manuals/engine/storage/_index.md b/content/manuals/engine/storage/_index.md index ccf0b83e4dc..d616e302867 100644 --- a/content/manuals/engine/storage/_index.md +++ b/content/manuals/engine/storage/_index.md @@ -9,206 +9,72 @@ aliases: --- By default all files created inside a container are stored on a writable -container layer. This means that: +container layer that sits on top of the read-only, immutable image layers. -- The data doesn't persist when that container no longer exists, and it can be - difficult to get the data out of the container if another process needs it. -- A container's writable layer is tightly coupled to the host machine - where the container is running. You can't easily move the data somewhere else. -- Writing into a container's writable layer requires a - [storage driver](/engine/storage/drivers/) to manage the - filesystem. The storage driver provides a union filesystem, using the Linux - kernel. This extra abstraction reduces performance as compared to using - _data volumes_, which write directly to the host filesystem. +Data written to the container layer doesn't persist when the container is +destroyed. This means that it can be difficult to get the data out of the +container if another process needs it. -Docker has two options for containers to store files on the host machine, so -that the files are persisted even after the container stops: volumes, and -bind mounts. +The writable layer is unique per container. You can't easily extract the data +from the writeable layer to the host, or to another container. -Docker also supports containers storing files in-memory on the host machine. Such files are not persisted. -If you're running Docker on Linux, `tmpfs` mount is used to store files in the host's system memory. -If you're running Docker on Windows, named pipe is used to store files in the host's system memory. +## Storage mount options -## Choose the right type of mount +Docker supports the following types of storage mounts for storing data outside +of the writable layer of the container: + +- [Volume mounts](#volume-mounts) +- [Bind mounts](#bind-mounts) +- [tmpfs mounts](#tmpfs-mounts) +- [Named pipes](#named-pipes) No matter which type of mount you choose to use, the data looks the same from within the container. It is exposed as either a directory or an individual file in the container's filesystem. -An easy way to visualize the difference among volumes, bind mounts, and `tmpfs` -mounts is to think about where the data lives on the Docker host. - -![Types of mounts and where they live on the Docker host](images/types-of-mounts.webp?w=450&h=300) - -- Volumes are stored in a part of the host filesystem which is _managed by - Docker_ (`/var/lib/docker/volumes/` on Linux). Non-Docker processes should not - modify this part of the filesystem. Volumes are the best way to persist data - in Docker. - -- Bind mounts may be stored anywhere on the host system. They may even be - important system files or directories. Non-Docker processes on the Docker host - or a Docker container can modify them at any time. - -- `tmpfs` mounts are stored in the host system's memory only, and are never - written to the host system's filesystem. - -Bind mounts and volumes can both be mounted into containers using the `-v` or -`--volume` flag, but the syntax for each is slightly different. For `tmpfs` -mounts, you can use the `--tmpfs` flag. We recommend using the `--mount` flag -for both containers and services, for bind mounts, volumes, or `tmpfs` mounts, -as the syntax is more clear. - -### Volumes - -Volumes are created and managed by Docker. You can create a volume explicitly -using the `docker volume create` command, or Docker can create a volume during -container or service creation. - -When you create a volume, it's stored within a directory on the Docker -host. When you mount the volume into a container, this directory is what's -mounted into the container. This is similar to the way that bind mounts work, -except that volumes are managed by Docker and are isolated from the core -functionality of the host machine. - -A given volume can be mounted into multiple containers simultaneously. When no -running container is using a volume, the volume is still available to Docker -and isn't removed automatically. You can remove unused volumes using `docker -volume prune`. - -When you mount a volume, it may be named or anonymous. Anonymous volumes are -given a random name that's guaranteed to be unique within a given Docker host. -Just like named volumes, anonymous volumes persist even if you remove the -container that uses them, except if you use the `--rm` flag when creating the -container, in which case the anonymous volume is destroyed. -See [Remove anonymous volumes](volumes.md#remove-anonymous-volumes). -If you create multiple containers after each other that use anonymous volumes, -each container creates its own volume. -Anonymous volumes aren't reused or shared between containers automatically. -To share an anonymous volume between two or more containers, -you must mount the anonymous volume using the random volume ID. - -Volumes also support the use of volume drivers, which allow you to store -your data on remote hosts or cloud providers, among other possibilities. - -### Bind mounts - -Bind mounts have limited functionality compared to volumes. When you use a bind -mount, a file or directory on the host machine is mounted into a container. The -file or directory is referenced by its full path on the host machine. The file -or directory doesn't need to exist on the Docker host already. It is created on -demand if it doesn't yet exist. Bind mounts are fast, but they rely on the host -machine's filesystem having a specific directory structure available. If you -are developing new Docker applications, consider using named volumes instead. -You can't use Docker CLI commands to directly manage bind mounts. - -> [!IMPORTANT] -> -> Bind mounts allow write access to files on the host by default. -> -> One side effect of using bind mounts is that you can change the host -> filesystem via processes running in a container, including creating, -> modifying, or deleting important system files or directories. This is a -> powerful ability which can have security implications, including impacting -> non-Docker processes on the host system. - -> [!TIP] -> -> Working with large repositories or monorepos, or with virtual file systems that are no longer scaling with your codebase? -> Check out [Synchronized file shares](/manuals/desktop/features/synchronized-file-sharing.md). It provides fast and flexible host-to-VM file sharing by enhancing bind mount performance through the use of synchronized filesystem caches. - -### tmpfs - -A `tmpfs` mount isn't persisted on disk, either on the Docker host or within a -container. It can be used by a container during the lifetime of the container, -to store non-persistent state or sensitive information. For instance, -internally, Swarm services use `tmpfs` mounts to mount -[secrets](/manuals/engine/swarm/secrets.md) into a service's containers. - -### Named pipes - -[Named pipes](https://docs.microsoft.com/en-us/windows/desktop/ipc/named-pipes) -can be used for communication between the Docker host and a container. Common -use case is to run a third-party tool inside of a container and connect to the -Docker Engine API using a named pipe. - -## Good use cases for volumes - -Volumes are the preferred way to persist data in Docker containers and services. -Some use cases for volumes include: - -- Sharing data among multiple running containers. If you don't explicitly create - it, a volume is created the first time it is mounted into a container. When - that container stops or is removed, the volume still exists. Multiple - containers can mount the same volume simultaneously, either read-write or - read-only. Volumes are only removed when you explicitly remove them. +### Volume mounts -- When the Docker host is not guaranteed to have a given directory or file - structure. Volumes help you decouple the configuration of the Docker host - from the container runtime. +Volumes are persistent storage mechanisms managed by the Docker daemon. They +retain data even after the containers using them are removed. Volume data is +stored on the filesystem on the host, but in order to interact with the data in +the volume, you must mount the volume to a container. Directly accessing or +interacting with the volume data is unsupported, undefined behavior, and may +result in the volume or its data breaking in unexpected ways. -- When you want to store your container's data on a remote host or a cloud - provider, rather than locally. +Volumes are ideal for performance-critical data processing and long-term +storage needs. Since the storage location is managed on the daemon host, +volumes provide the same raw file performance as accessing the host filesystem +directly. -- When you need to back up, restore, or migrate data from one Docker - host to another, volumes are a better choice. You can stop containers using - the volume, then back up the volume's directory - (such as `/var/lib/docker/volumes/`). - -- When your application requires high-performance I/O on Docker Desktop. Volumes - are stored in the Linux VM rather than the host, which means that the reads and writes - have much lower latency and higher throughput. - -- When your application requires fully native file system behavior on Docker - Desktop. For example, a database engine requires precise control over disk - flushing to guarantee transaction durability. Volumes are stored in the Linux - VM and can make these guarantees, whereas bind mounts are remoted to macOS or - Windows, where the file systems behave slightly differently. - -## Good use cases for bind mounts - -In general, you should use volumes where possible. Bind mounts are appropriate -for the following types of use case: - -- Sharing configuration files from the host machine to containers. This is how - Docker provides DNS resolution to containers by default, by mounting - `/etc/resolv.conf` from the host machine into each container. - -- Sharing source code or build artifacts between a development environment on - the Docker host and a container. For instance, you may mount a Maven `target/` - directory into a container, and each time you build the Maven project on the - Docker host, the container gets access to the rebuilt artifacts. - - If you use Docker for development this way, your production Dockerfile would - copy the production-ready artifacts directly into the image, rather than - relying on a bind mount. +### Bind mounts -- When the file or directory structure of the Docker host is guaranteed to be - consistent with the bind mounts the containers require. +Bind mounts create a direct link between a host system path and a container, +allowing access to files or directories stored anywhere on the host. Since they +aren't isolated by Docker, both non-Docker processes on the host and container +processes can modify the mounted files simultaneously. -## Good use cases for tmpfs mounts +Use bind mounts when you need to be able to access files from both the +container and the host. -`tmpfs` mounts are best used for cases when you do not want the data to persist -either on the host machine or within the container. This may be for security -reasons or to protect the performance of the container when your application -needs to write a large volume of non-persistent state data. +### tmpfs mounts -## Tips for using bind mounts or volumes +A tmpfs mount stores files directly in the host machine's memory, ensuring the +data is not written to disk. This storage is ephemeral: the data is lost when +the container is stopped or restarted, or when the host is rebooted. tmpfs +mounts do not persist data either on the Docker host or within the container's +filesystem. -If you use either bind mounts or volumes, keep the following in mind: +These mounts are suitable for scenarios requiring temporary, in-memory storage, +such as caching intermediate data, handling sensitive information like +credentials, or reducing disk I/O. Use tmpfs mounts only when the data does not +need to persist beyond the current container session. -- If you mount an **empty volume** into a directory in the container in which files - or directories exist, these files or directories are propagated (copied) - into the volume. Similarly, if you start a container and specify a volume which - does not already exist, an empty volume is created for you. - This is a good way to pre-populate data that another container needs. +### Named pipes -- If you mount a **bind mount or non-empty volume** into a directory in the container - in which some files or directories exist, these files or directories are - obscured by the mount, just as if you saved files into `/mnt` on a Linux host - and then mounted a USB drive into `/mnt`. The contents of `/mnt` would be - obscured by the contents of the USB drive until the USB drive was unmounted. - The obscured files are not removed or altered, but are not accessible while the - bind mount or volume is mounted. +[Named pipes](https://docs.microsoft.com/en-us/windows/desktop/ipc/named-pipes) +can be used for communication between the Docker host and a container. Common +use case is to run a third-party tool inside of a container and connect to the +Docker Engine API using a named pipe. ## Next steps diff --git a/content/manuals/engine/storage/bind-mounts.md b/content/manuals/engine/storage/bind-mounts.md index d841270d44d..3163cdaa778 100644 --- a/content/manuals/engine/storage/bind-mounts.md +++ b/content/manuals/engine/storage/bind-mounts.md @@ -4,91 +4,145 @@ title: Bind mounts weight: 20 keywords: storage, persistence, data persistence, mounts, bind mounts aliases: -- /engine/admin/volumes/bind-mounts/ -- /storage/bind-mounts/ + - /engine/admin/volumes/bind-mounts/ + - /storage/bind-mounts/ --- -Bind mounts have been around since the early days of Docker. Bind mounts have -limited functionality compared to [volumes](volumes.md). When you use a bind -mount, a file or directory on the host machine is mounted into a container. -The file or directory is referenced by its absolute path on the host -machine. By contrast, when you use a volume, a new directory is created within -Docker's storage directory on the host machine, and Docker manages that -directory's contents. +When you use a bind mount, a file or directory on the host machine is mounted +from the host into a container. By contrast, when you use a volume, a new +directory is created within Docker's storage directory on the host machine, and +Docker manages that directory's contents. -The file or directory does not need to exist on the Docker host already. It is -created on demand if it does not yet exist. Bind mounts are very performant, but -they rely on the host machine's filesystem having a specific directory structure -available. If you are developing new Docker applications, consider using -[named volumes](volumes.md) instead. You can't use Docker CLI commands to directly -manage bind mounts. +## When to use bind mounts -![Bind mounts on the Docker host](images/types-of-mounts-bind.webp?w=450&h=300) +Bind mounts are appropriate for the following types of use case: -> [!TIP] -> -> Working with large repositories or monorepos, or with virtual file systems that are no longer scaling with your codebase? -> Check out [Synchronized file shares](/manuals/desktop/features/synchronized-file-sharing.md). It provides fast and flexible host-to-VM file sharing by enhancing bind mount performance through the use of synchronized filesystem caches. +- Sharing source code or build artifacts between a development environment on + the Docker host and a container. -## Choose the -v or --mount flag +- When you want to create or generate files in a container and persist the + files onto the host's filesystem. -In general, `--mount` is more explicit and verbose. The biggest difference is that -the `-v` syntax combines all the options together in one field, while the `--mount` -syntax separates them. Here is a comparison of the syntax for each flag. +- Sharing configuration files from the host machine to containers. This is how + Docker provides DNS resolution to containers by default, by mounting + `/etc/resolv.conf` from the host machine into each container. -> Tip -> -> New users should use the `--mount` syntax. Experienced users may -> be more familiar with the `-v` or `--volume` syntax, but are encouraged to -> use `--mount`, because research has shown it to be easier to use. - -- `-v` or `--volume`: Consists of three fields, separated by colon characters - (`:`). The fields must be in the correct order, and the meaning of each field - is not immediately obvious. - - In the case of bind mounts, the first field is the path to the file or - directory on the **host machine**. - - The second field is the path where the file or directory is mounted in - the container. - - The third field is optional, and is a comma-separated list of options, such - as `ro`, `z`, and `Z`. These options - are discussed below. - -- `--mount`: Consists of multiple key-value pairs, separated by commas and each - consisting of a `=` tuple. The `--mount` syntax is more verbose - than `-v` or `--volume`, but the order of the keys is not significant, and - the value of the flag is easier to understand. - - The `type` of the mount, which can be `bind`, `volume`, or `tmpfs`. This - topic discusses bind mounts, so the type is always `bind`. - - The `source` of the mount. For bind mounts, this is the path to the file - or directory on the Docker daemon host. May be specified as `source` or - `src`. - - The `destination` takes as its value the path where the file or directory - is mounted in the container. May be specified as `destination`, `dst`, - or `target`. - - The `readonly` option, if present, causes the bind mount to be [mounted into - the container as read-only](#use-a-read-only-bind-mount). - - The `bind-propagation` option, if present, changes the - [bind propagation](#configure-bind-propagation). May be one of `rprivate`, - `private`, `rshared`, `shared`, `rslave`, `slave`. - - The `--mount` flag does not support `z` or `Z` options for modifying - selinux labels. - -The examples below show both the `--mount` and `-v` syntax where possible, and -`--mount` is presented first. - -### Differences between `-v` and `--mount` behavior - -Because the `-v` and `--volume` flags have been a part of Docker for a long -time, their behavior cannot be changed. This means that there is one behavior -that is different between `-v` and `--mount`. - -If you use `-v` or `--volume` to bind-mount a file or directory that does not -yet exist on the Docker host, `-v` creates the endpoint for you. It is -always created as a directory. - -If you use `--mount` to bind-mount a file or directory that does not -yet exist on the Docker host, Docker does not automatically create it for -you, but generates an error. +Bind mounts are also available for builds: you can bind mount source code from +the host into the build container to test, lint, or compile a project. + +## Bind-mounting over existing data + +If you bind mount file or directory into a directory in the container in which +files or directories exist, the pre-existing files are obscured by the mount. +This is similar to if you were to save files into `/mnt` on a Linux host, and +then mounted a USB drive into `/mnt`. The contents of `/mnt` would be obscured +by the contents of the USB drive until the USB drive was unmounted. + +With containers, there's no straightforward way of removing a mount to reveal +the obscured files again. Your best option is to recreate the container without +the mount. + +## Considerations and constraints + +- Bind mounts have write access to files on the host by default. + + One side effect of using bind mounts is that you can change the host + filesystem via processes running in a container, including creating, + modifying, or deleting important system files or directories. This capability + can have security implications. For example, it may affect non-Docker + processes on the host system. + + You can use the `readonly` or `ro` option to prevent the container from + writing to the mount. + +- Bind mounts are created to the Docker daemon host, not the client. + + If you're using a remote Docker daemon, you can't create a bind mount to + access files on the client machine in a container. + +- Containers with bind mounts are strongly tied to the host. + + Bind mounts rely on the host machine's filesystem having a specific directory + structure available. This reliance means that containers with bind mounts may + fail if run on a different host without the same directory structure. + +## Syntax + +To create a bind mount, you can use either the `--mount` or `--volume` flag. + +```console +$ docker run --mount type=bind,src=,dst= +$ docker run --volume : +``` + +In general, `--mount` is preferred. The main difference is that the `--mount` +flag is more explicit and supports all the available options. + +If you use `--volume` to bind-mount a file or directory that does not yet +exist on the Docker host, Docker automatically creates the directory on the +host for you. It's always created as a directory. + +`--mount` does not automatically create a directory if the specified mount +path does not exist on the host. Instead, it produces an error: + +```console +$ docker run --mount type=bind,src=/dev/noexist,dst=/mnt/foo alpine +docker: Error response from daemon: invalid mount config for type "bind": bind source path does not exist: /dev/noexist. +``` + +### Options for --mount + +The `--mount` flag consists of multiple key-value pairs, separated by commas +and each consisting of a `=` tuple. The order of the keys isn't +significant. + +```console +$ docker run --mount type=bind,src=,dst=[,=...] +``` + +Valid options for `--mount type=bind` include: + +| Option | Description | +| ------------------------------ | --------------------------------------------------------------------------------------------------------------- | +| `source`, `src` | The location of the file or directory on the host. This can be an absolute or relative path. | +| `destination`, `dst`, `target` | The path where the file or directory is mounted in the container. Must be an absolute path. | +| `readonly`, `ro` | If present, causes the bind mount to be [mounted into the container as read-only](#use-a-read-only-bind-mount). | +| `bind-propagation` | If present, changes the [bind propagation](#configure-bind-propagation). | + +```console {title="Example"} +$ docker run --mount type=bind,src=.,dst=/project,ro,bind-propagation=rshared +``` + +### Options for --volume + +The `--volume` or `-v` flag consists of three fields, separated by colon +characters (`:`). The fields must be in the correct order. + +```console +$ docker run -v :[:opts] +``` + +The first field is the path on the host to bind mount into the container. The +second field is the path where the file or directory is mounted in the +container. + +The third field is optional, and is a comma-separated list of options. Valid +options for `--volume` with a bind mount include: + +| Option | Description | +| -------------------- | ------------------------------------------------------------------------------------------------------------------ | +| `readonly`, `ro` | If present, causes the bind mount to be [mounted into the container as read-only](#use-a-read-only-bind-mount). | +| `z`, `Z` | Configures SELinux labeling. See [Configure the SELinux label](#configure-the-selinux-label) | +| `rprivate` (default) | Sets bind propagation to `rprivate` for this mount. See [Configure bind propagation](#configure-bind-propagation). | +| `private` | Sets bind propagation to `private` for this mount. See [Configure bind propagation](#configure-bind-propagation). | +| `rshared` | Sets bind propagation to `rshared` for this mount. See [Configure bind propagation](#configure-bind-propagation). | +| `shared` | Sets bind propagation to `shared` for this mount. See [Configure bind propagation](#configure-bind-propagation). | +| `rslave` | Sets bind propagation to `rslave` for this mount. See [Configure bind propagation](#configure-bind-propagation). | +| `slave` | Sets bind propagation to `slave` for this mount. See [Configure bind propagation](#configure-bind-propagation). | + +```console {title="Example"} +$ docker run -v .:/project:ro,rshared +``` ## Start a container with a bind mount @@ -102,9 +156,9 @@ directory into your container at `/app/`. Run the command from within the directory on Linux or macOS hosts. If you're on Windows, see also [Path conversions on Windows](/manuals/desktop/troubleshoot-and-support/troubleshoot/topics.md). -The `--mount` and `-v` examples below produce the same result. You -can't run them both unless you remove the `devtest` container after running the -first one. +The following `--mount` and `-v` examples produce the same result. You can't +run them both unless you remove the `devtest` container after running the first +one. {{< tabs >}} {{< tab name="`--mount`" >}} @@ -155,17 +209,16 @@ Stop the container: ```console $ docker container stop devtest - $ docker container rm devtest ``` ### Mount into a non-empty directory on the container -If you bind-mount a directory into a non-empty directory on the container, the directory's -existing contents are obscured by the bind mount. This can be beneficial, -such as when you want to test a new version of your application without -building a new image. However, it can also be surprising and this behavior -differs from that of [docker volumes](volumes.md). +If you bind-mount a directory into a non-empty directory on the container, the +directory's existing contents are obscured by the bind mount. This can be +beneficial, such as when you want to test a new version of your application +without building a new image. However, it can also be surprising and this +behavior differs from that of [volumes](volumes.md). This example is contrived to be extreme, but replaces the contents of the container's `/usr/` directory with the `/tmp/` directory on the host machine. In @@ -216,7 +269,7 @@ For some development applications, the container needs to write into the bind mount, so changes are propagated back to the Docker host. At other times, the container only needs read access. -This example modifies the one above but mounts the directory as a read-only +This example modifies the previous one, but mounts the directory as a read-only bind mount, by adding `ro` to the (empty by default) list of options, after the mount point within the container. Where multiple options are present, separate them by commas. @@ -268,7 +321,6 @@ Stop the container: ```console $ docker container stop devtest - $ docker container rm devtest ``` @@ -290,7 +342,7 @@ be read-only on a kernel version earlier than 5.12, using the Supported values for the `bind-recursive` option are: | Value | Description | -|:--------------------|:------------------------------------------------------------------------------------------------------------------| +| :------------------ | :---------------------------------------------------------------------------------------------------------------- | | `enabled` (default) | Read-only mounts are made recursively read-only if kernel is v5.12 or later. Otherwise, submounts are read-write. | | `disabled` | Submounts are ignored (not included in the bind mount). | | `writable` | Submounts are read-write. | @@ -310,12 +362,11 @@ propagation setting has a recursive counterpoint. In the case of recursion, consider that `/tmp/a` is also mounted as `/foo`. The propagation settings control whether `/mnt/a` and/or `/tmp/a` would exist. -> [!WARNING] -> +> [!NOTE] > Mount propagation doesn't work with Docker Desktop. | Propagation setting | Description | -|:--------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| :------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `shared` | Sub-mounts of the original mount are exposed to replica mounts, and sub-mounts of replica mounts are also propagated to the original mount. | | `slave` | similar to a shared mount, but only in one direction. If the original mount exposes a sub-mount, the replica mount can see it. However, if the replica mount exposes a sub-mount, the original mount cannot see it. | | `private` | The mount is private. Sub-mounts within it are not exposed to replica mounts, and sub-mounts of replica mounts are not exposed to the original mount. | @@ -364,9 +415,9 @@ $ docker run -d \ Now if you create `/app/foo/`, `/app2/foo/` also exists. -## Configure the selinux label +## Configure the SELinux label -If you use `selinux` you can add the `z` or `Z` options to modify the selinux +If you use SELinux, you can add the `z` or `Z` options to modify the SELinux label of the host file or directory being mounted into the container. This affects the file or directory on the host machine itself and can have consequences outside of the scope of Docker. @@ -381,14 +432,14 @@ inoperable and you may need to relabel the host machine files by hand. > [!IMPORTANT] > -> When using bind mounts with services, selinux labels +> When using bind mounts with services, SELinux labels > (`:Z` and `:z`), as well as `:ro` are ignored. See > [moby/moby #32579](https://github.com/moby/moby/issues/32579) for details. This example sets the `z` option to specify that multiple containers can share the bind mount's contents: -It is not possible to modify the selinux label using the `--mount` flag. +It is not possible to modify the SELinux label using the `--mount` flag. ```console $ docker run -d \ @@ -398,8 +449,7 @@ $ docker run -d \ nginx:latest ``` - -## Use a bind mount with compose +## Use a bind mount with Docker Compose A single Docker Compose service with a bind mount looks like this: diff --git a/content/manuals/engine/storage/images/types-of-mounts-bind.webp b/content/manuals/engine/storage/images/types-of-mounts-bind.webp deleted file mode 100644 index 533efb7cfaf8f316bc26bacfe7c3b866509ceeb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13424 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 S$kK)eDeB=Dr%3@$Jpcf&VLFNc diff --git a/content/manuals/engine/storage/images/types-of-mounts-tmpfs.webp b/content/manuals/engine/storage/images/types-of-mounts-tmpfs.webp deleted file mode 100644 index 35b2f085944fb8639f19ec588ee55ee001222c45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13580 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 diff --git a/content/manuals/engine/storage/images/types-of-mounts-volume.webp b/content/manuals/engine/storage/images/types-of-mounts-volume.webp deleted file mode 100644 index 0c8d8d0bd3ccba397751ebd0c7bb826e4c761d35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14034 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 E09rgmrT_o{ diff --git a/content/manuals/engine/storage/images/types-of-mounts.webp b/content/manuals/engine/storage/images/types-of-mounts.webp deleted file mode 100644 index 64f380c770562147ee1217ad97d53931b15ff317..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13740 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 [!IMPORTANT] +> tmpfs mounts in Docker map directly to +> [tmpfs](https://en.wikipedia.org/wiki/Tmpfs) in the Linux kernel. As such, +> the temporary data may be written to a swap file, and thereby persisted to +> the filesystem. + +## Mounting over existing data + +If you create a tmpfs mount into a directory in the container in which files or +directories exist, the pre-existing files are obscured by the mount. This is +similar to if you were to save files into `/mnt` on a Linux host, and then +mounted a USB drive into `/mnt`. The contents of `/mnt` would be obscured by +the contents of the USB drive until the USB drive was unmounted. + +With containers, there's no straightforward way of removing a mount to reveal +the obscured files again. Your best option is to recreate the container without +the mount. ## Limitations of tmpfs mounts -* Unlike volumes and bind mounts, you can't share `tmpfs` mounts between -containers. -* This functionality is only available if you're running Docker on Linux. -* Setting permissions on tmpfs may cause them to [reset after container restart](https://github.com/docker/for-linux/issues/138). In some cases [setting the uid/gid](https://github.com/docker/compose/issues/3425#issuecomment-423091370) can serve as a workaround. +- Unlike volumes and bind mounts, you can't share tmpfs mounts between containers. +- This functionality is only available if you're running Docker on Linux. +- Setting permissions on tmpfs may cause them to [reset after container restart](https://github.com/docker/for-linux/issues/138). In some cases [setting the uid/gid](https://github.com/docker/compose/issues/3425#issuecomment-423091370) can serve as a workaround. + +## Syntax + +To mount a tmpfs with the `docker run` command, you can use either the +`--mount` or `--tmpfs` flag. + +```console +$ docker run --mount type=tmpfs,dst= +$ docker run --tmpfs +``` + +In general, `--mount` is preferred. The main difference is that the `--mount` +flag is more explicit and supports all the available options. -## Choose the --tmpfs or --mount flag +The `--tmpfs` flag cannot be used with swarm services. You must use `--mount`. -In general, `--mount` is more explicit and verbose. The biggest difference is -that the `--tmpfs` flag does not support any configurable options. +### Options for --mount + +The `--mount` flag consists of multiple key-value pairs, separated by commas +and each consisting of a `=` tuple. The order of the keys isn't +significant. + +```console +$ docker run --mount type=tmpfs,dst=[,=...] +``` -- `--tmpfs`: Mounts a `tmpfs` mount without allowing you to specify any - configurable options, and can only be used with standalone containers. +Valid options for `--mount type=tmpfs` include: -- `--mount`: Consists of multiple key-value pairs, separated by commas and each - consisting of a `=` tuple. The `--mount` syntax is more verbose - than `--tmpfs`: - - The `type` of the mount, which can be [`bind`](bind-mounts.md), `volume`, or - [`tmpfs`](tmpfs.md). This topic discusses `tmpfs`, so the type is always - `tmpfs`. - - The `destination` takes as its value the path where the `tmpfs` mount - is mounted in the container. May be specified as `destination`, `dst`, - or `target`. - - The `tmpfs-size` and `tmpfs-mode` options. See - [tmpfs options](#specify-tmpfs-options). +| Option | Description | +| :----------------------------- | :--------------------------------------------------------------------------------------------------------------------- | +| `destination`, `dst`, `target` | Size of the tmpfs mount in bytes. If unset, the default maximum size of a tmpfs volume is 50% of the host's total RAM. | +| `tmpfs-size` | Size of the tmpfs mount in bytes. If unset, the default maximum size of a tmpfs volume is 50% of the host's total RAM. | +| `tmpfs-mode` | File mode of the tmpfs in octal. For instance, `700` or `0770`. Defaults to `1777` or world-writable. | -The examples below show both the `--mount` and `--tmpfs` syntax where possible, -and `--mount` is presented first. +```console {title="Example"} +$ docker run --mount type=tmpfs,dst=/app,tmpfs-size=21474836480,tmpfs-mode=1770 +``` -### Differences between `--tmpfs` and `--mount` behavior +### Options for --tmpfs -- The `--tmpfs` flag does not allow you to specify any configurable options. -- The `--tmpfs` flag cannot be used with swarm services. You must use `--mount`. +The `--tmpfs` flag does not let you specify any options. ## Use a tmpfs mount in a container @@ -108,28 +138,6 @@ $ docker stop tmptest $ docker rm tmptest ``` -### Specify tmpfs options - -`tmpfs` mounts allow for two configuration options, neither of which is -required. If you need to specify these options, you must use the `--mount` flag, -as the `--tmpfs` flag does not support them. - -| Option | Description | -|:-------------|:--------------------------------------------------------------------------------------------------------------------------| -| `tmpfs-size` | Size of the tmpfs mount in bytes. If unset, the default maximum size of a tmpfs volume is 50% of the host's total RAM. | -| `tmpfs-mode` | File mode of the tmpfs in octal. For instance, `700` or `0770`. Defaults to `1777` or world-writable. | - -The following example sets the `tmpfs-mode` to `1770`, so that it is not -world-readable within the container. - -```console -docker run -d \ - -it \ - --name tmptest \ - --mount type=tmpfs,destination=/app,tmpfs-mode=1770 \ - nginx:latest -``` - ## Next steps - Learn about [volumes](volumes.md) diff --git a/content/manuals/engine/storage/volumes.md b/content/manuals/engine/storage/volumes.md index d682e4300e7..c99eed561d8 100644 --- a/content/manuals/engine/storage/volumes.md +++ b/content/manuals/engine/storage/volumes.md @@ -1,38 +1,55 @@ --- -description: Learn how to create, manage, and use volumes instead of bind mounts for +description: + Learn how to create, manage, and use volumes instead of bind mounts for persisting data generated and used by Docker. title: Volumes weight: 10 -keywords: docker compose volumes, docker volumes, docker compose volume, docker volume +keywords: + docker compose volumes, docker volumes, docker compose volume, docker volume mount, docker mount volume, docker volume create, docker volume location aliases: -- /userguide/dockervolumes/ -- /engine/tutorials/dockervolumes/ -- /engine/userguide/dockervolumes/ -- /engine/admin/volumes/volumes/ -- /storage/volumes/ + - /userguide/dockervolumes/ + - /engine/tutorials/dockervolumes/ + - /engine/userguide/dockervolumes/ + - /engine/admin/volumes/volumes/ + - /storage/volumes/ --- +Volumes are persistent data stores for containers, created and managed by +Docker. You can create a volume explicitly using the `docker volume create` +command, or Docker can create a volume during container or service creation. + +When you create a volume, it's stored within a directory on the Docker +host. When you mount the volume into a container, this directory is what's +mounted into the container. This is similar to the way that bind mounts work, +except that volumes are managed by Docker and are isolated from the core +functionality of the host machine. + +## When to use volumes + Volumes are the preferred mechanism for persisting data generated by and used by Docker containers. While [bind mounts](bind-mounts.md) are dependent on the directory structure and OS of the host machine, volumes are completely managed by -Docker. Volumes have several advantages over bind mounts: +Docker. Volumes are a good choice for the following use cases: - Volumes are easier to back up or migrate than bind mounts. - You can manage volumes using Docker CLI commands or the Docker API. - Volumes work on both Linux and Windows containers. - Volumes can be more safely shared among multiple containers. -- Volume drivers let you store volumes on remote hosts or cloud providers, encrypt the contents of volumes, or add other functionality. -- New volumes can have their content pre-populated by a container. -- Volumes on Docker Desktop have much higher performance than bind mounts from - Mac and Windows hosts. +- New volumes can have their content pre-populated by a container or build. +- When your application requires high-performance I/O. -In addition, volumes are often a better choice than persisting data in a -container's writable layer, because a volume doesn't increase the size of the -containers using it, and the volume's contents exist outside the lifecycle of a -given container. +Volumes are not a good choice if you need to access the files from the host, as +the volume is completely managed by Docker. Use [bind mounts](bind-mounts.md) +if you need to access files or directories from both containers and the host. -![Volumes on the Docker host](images/types-of-mounts-volume.webp?w=450&h=300) +Volumes are often a better choice than writing data directly to a container, +because a volume doesn't increase the size of the containers using it. Using a +volume is also faster; writing into a container's writable layer requires a +[storage driver](/manuals/engine/storage/drivers/_index.md) to manage the +filesystem. The storage driver provides a union filesystem, using the Linux +kernel. This extra abstraction reduces performance as compared to using +volumes, which write directly to the host filesystem. If your container generates non-persistent state data, consider using a [tmpfs mount](tmpfs.md) to avoid storing the data anywhere permanently, and to @@ -42,74 +59,122 @@ writable layer. Volumes use `rprivate` bind propagation, and bind propagation isn't configurable for volumes. -## Choose the -v or --mount flag - -In general, `--mount` is more explicit and verbose. The biggest difference is that -the `-v` syntax combines all the options together in one field, while the `--mount` -syntax separates them. Here is a comparison of the syntax for each flag. - -If you need to specify volume driver options, you must use `--mount`. - -- `-v` or `--volume`: Consists of three fields, separated by colon characters - (`:`). The fields must be in the correct order, and the meaning of each field - isn't immediately obvious. - - - In the case of named volumes, the first field is the name of the volume, and is - unique on a given host machine. For anonymous volumes, the first field is - omitted. - - The second field is the path where the file or directory is mounted in - the container. - - The third field is optional, and is a comma-separated list of options, such - as `ro`. These options are discussed below. - -- `--mount`: Consists of multiple key-value pairs, separated by commas and each - consisting of a `=` tuple. The `--mount` syntax is more verbose - than `-v` or `--volume`, but the order of the keys isn't significant, and - the value of the flag is easier to understand. - - The `type` of the mount, which can be [`bind`](bind-mounts.md), `volume`, or - [`tmpfs`](tmpfs.md). This topic discusses volumes, so the type is always - `volume`. - - The `source` of the mount. For named volumes, this is the name of the volume. - For anonymous volumes, this field is omitted. Can be specified as `source` - or `src`. - - The `destination` takes as its value the path where the file or directory - is mounted in the container. Can be specified as `destination`, `dst`, - or `target`. - - The `volume-subpath` option takes a path to a subdirectory within the - volume to mount into the container. The subdirectory must exist in the - volume before the volume is mounted to a container. - See [Mount a volume subdirectory](#mount-a-volume-subdirectory). - - The `readonly` option, if present, causes the bind mount to be [mounted into - the container as read-only](#use-a-read-only-volume). Can be specified as `readonly` or `ro`. - - The `volume-opt` option, which can be specified more than once, takes a - key-value pair consisting of the option name and its value. - -> [!WARNING] -> -> If your volume driver accepts a comma-separated list as an option, -> you must escape the value from the outer CSV parser. To escape a `volume-opt`, -> surround it with double quotes (`"`) and surround the entire mount parameter -> with single quotes (`'`). -> -> For example, the `local` driver accepts mount options as a comma-separated -> list in the `o` parameter. This example shows the correct way to escape the list. -> -> ```console -> $ docker service create \ -> --mount 'type=volume,src=,dst=,volume-driver=local,volume-opt=type=nfs,volume-opt=device=:,"volume-opt=o=addr=,vers=4,soft,timeo=180,bg,tcp,rw"' -> --name myservice \ -> -> ``` +## A volume's lifecycle + +A volume's contents exist outside the lifecycle of a given container. When a +container is destroyed, the writable layer is destroyed with it. Using a volume +ensures that the data is persisted even if the container using it is removed. + +A given volume can be mounted into multiple containers simultaneously. When no +running container is using a volume, the volume is still available to Docker +and isn't removed automatically. You can remove unused volumes using `docker +volume prune`. + +## Mounting a volume over existing data + +If you mount a _non-empty volume_ into a directory in the container in which +files or directories exist, the pre-existing files are obscured by the mount. +This is similar to if you were to save files into `/mnt` on a Linux host, and +then mounted a USB drive into `/mnt`. The contents of `/mnt` would be obscured +by the contents of the USB drive until the USB drive was unmounted. + +With containers, there's no straightforward way of removing a mount to reveal +the obscured files again. Your best option is to recreate the container without +the mount. + +If you mount an _empty volume_ into a directory in the container in which files +or directories exist, these files or directories are propagated (copied) into +the volume by default. Similarly, if you start a container and specify a volume +which does not already exist, an empty volume is created for you. This is a +good way to pre-populate data that another container needs. + +To prevent Docker from copying a container's pre-existing files into an empty +volume, use the `volume-nocopy` option, see [Options for --mount](#options-for---mount). + +## Named and anonymous volumes + +A volume may be named or anonymous. Anonymous volumes are given a random name +that's guaranteed to be unique within a given Docker host. Just like named +volumes, anonymous volumes persist even if you remove the container that uses +them, except if you use the `--rm` flag when creating the container, in which +case the anonymous volume associated with the container is destroyed. See +[Remove anonymous volumes](volumes.md#remove-anonymous-volumes). + +If you create multiple containers consecutively that each use anonymous +volumes, each container creates its own volume. Anonymous volumes aren't reused +or shared between containers automatically. To share an anonymous volume +between two or more containers, you must mount the anonymous volume using the +random volume ID. + +## Syntax + +To mount a volume with the `docker run` command, you can use either the +`--mount` or `--volume` flag. + +```console +$ docker run --mount type=volume,src=,dst= +$ docker run --volume : +``` + +In general, `--mount` is preferred. The main difference is that the `--mount` +flag is more explicit and supports all the available options. + +You must use `--mount` if you want to: -The examples below show both the `--mount` and `-v` syntax where possible, with -`--mount` first. +- Specify [volume driver options](#use-a-volume-driver) +- Mount a [volume subdirectory](#mount-a-volume-subdirectory) +- Mount a volume into a Swarm service -### Differences between `-v` and `--mount` behavior +### Options for --mount -As opposed to bind mounts, all options for volumes are available for both -`--mount` and `-v` flags. +The `--mount` flag consists of multiple key-value pairs, separated by commas +and each consisting of a `=` tuple. The order of the keys isn't +significant. -Volumes used with services, only support `--mount`. +```console +$ docker run --mount type=volume[,src=],dst=[,=...] +``` + +Valid options for `--mount type=volume` include: + +| Option | Description | +| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `source`, `src` | The source of the mount. For named volumes, this is the name of the volume. For anonymous volumes, this field is omitted. | +| `destination`, `dst`, `target` | The path where the file or directory is mounted in the container. | +| `volume-subpath` | A path to a subdirectory within the volume to mount into the container. The subdirectory must exist in the volume before the volume is mounted to a container. See [Mount a volume subdirectory](#mount-a-volume-subdirectory). | +| `readonly`, `ro` | If present, causes the volume to be [mounted into the container as read-only](#use-a-read-only-volume). | +| `volume-nocopy` | If present, data at the destination isn't copied into the volume if the volume is empty. By default, content at the target destination gets copied into a mounted volume if empty. | +| `volume-opt` | Can be specified more than once, takes a key-value pair consisting of the option name and its value. | + +```console {title="Example"} +$ docker run --mount type=volume,src=myvolume,dst=/data,ro,volume-subpath=/foo +``` + +### Options for --volume + +The `--volume` or `-v` flag consists of three fields, separated by colon +characters (`:`). The fields must be in the correct order. + +```console +$ docker run -v [:][:opts] +``` + +In the case of named volumes, the first field is the name of the volume, and is +unique on a given host machine. For anonymous volumes, the first field is +omitted. The second field is the path where the file or directory is mounted in +the container. + +The third field is optional, and is a comma-separated list of options. Valid +options for `--volume` with a data volume include: + +| Option | Description | +| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `readonly`, `ro` | If present, causes the volume to be [mounted into the container as read-only](#use-a-read-only-volume). | +| `volume-nocopy` | If present, data at the destination isn't copied into the volume if the volume is empty. By default, content at the target destination gets copied into a mounted volume if empty. | + +```console {title="Example"} +$ docker run -v myvolume:/data:ro +``` ## Create and manage volumes @@ -158,8 +223,8 @@ If you start a container with a volume that doesn't yet exist, Docker creates the volume for you. The following example mounts the volume `myvol2` into `/app/` in the container. -The `-v` and `--mount` examples below produce the same result. You can't run -them both unless you remove the `devtest` container and the `myvol2` volume +The following `-v` and `--mount` examples produce the same result. You can't +run them both unless you remove the `devtest` container and the `myvol2` volume after running the first one. {{< tabs >}} @@ -219,7 +284,7 @@ $ docker volume rm myvol2 ## Use a volume with Docker Compose -The example below shows a single Docker Compose service with a volume: +The following example shows a single Docker Compose service with a volume: ```yaml services: @@ -286,12 +351,6 @@ $ docker service rm devtest-service Removing the service doesn't remove any volumes created by the service. Volume removal is a separate step. -#### Syntax differences for services - -The `docker service create` command doesn't support the `-v` or `--volume` flag. -When mounting a volume into a service's containers, you must use the `--mount` -flag. - ### Populate a volume using a container If you start a container which creates a new volume, and the container @@ -349,7 +408,7 @@ the container only needs read access to the data. Multiple containers can mount the same volume. You can simultaneously mount a single volume as `read-write` for some containers and as `read-only` for others. -The following example changes the one above. It mounts the directory as a read-only +The following example changes the previous one. It mounts the directory as a read-only volume, by adding `ro` to the (empty by default) list of options, after the mount point within the container. Where multiple options are present, you can separate them using commas. @@ -457,7 +516,7 @@ One is to add logic to your application to store files on a cloud object storage system like Amazon S3. Another is to create volumes with a driver that supports writing files to an external storage system like NFS or Amazon S3. -Volume drivers allow you to abstract the underlying storage system from the +Volume drivers let you abstract the underlying storage system from the application logic. For example, if your services use a volume with an NFS driver, you can update the services to use a different driver. For example, to store data in the cloud, without changing the application logic. @@ -470,6 +529,23 @@ The following examples use the `vieux/sshfs` volume driver, first when creating a standalone volume, and then when starting a container which creates a new volume. +> [!NOTE] +> +> If your volume driver accepts a comma-separated list as an option, +> you must escape the value from the outer CSV parser. To escape a `volume-opt`, +> surround it with double quotes (`"`) and surround the entire mount parameter +> with single quotes (`'`). +> +> For example, the `local` driver accepts mount options as a comma-separated +> list in the `o` parameter. This example shows the correct way to escape the list. +> +> ```console +> $ docker service create \ +> --mount 'type=volume,src=,dst=,volume-driver=local,volume-opt=type=nfs,volume-opt=device=:,"volume-opt=o=addr=,vers=4,soft,timeo=180,bg,tcp,rw"' +> --name myservice \ +> +> ``` + ### Initial setup The following example assumes that you have two nodes, the first of which is a Docker @@ -579,7 +655,7 @@ $ mount -t -o