Обзор хранилища контейнераContainer Storage Overview

В этом разделе приводятся общие сведения о различных способах использования контейнерами хранилища в Windows.This topic provides an overview of the different ways containers use storage on Windows. В случае хранилища контейнеры ведут себя иначе, чем виртуальные машины.Containers behave differently than virtual machines when it comes to storage. По сути, контейнеры создаются так, чтобы выполняющееся в них приложение не могло записывать свое состояние в файловую систему узла.By nature, containers are built to prevent an app running within them from writing state all over the host's filesystem. По умолчанию контейнеры используют "вспомогательное" пространство, но Windows также предоставляет средства для хранения в постоянном хранилище.Containers use a "scratch" space by default, but Windows also provides a means to persist storage.

Область временных файловScratch Space

Контейнеры Windows по умолчанию используют временное хранилище.Windows containers by default use ephemeral storage. Все операции ввода-вывода контейнера выполняются во "вспомогательном пространстве", и у каждого контейнера такое пространство свое.All container I/O happens in a "scratch space" and each container gets their own scratch. Данные о создании и записи файлов записываются во вспомогательное пространство и не отправляются на узел.File creation and file writes are captured in the scratch space and do not escape to the host. При остановке экземпляра контейнера все изменения, произошедшие во вспомогательном пространстве, сбрасываются.When a container instance is stopped, all changes that occurred in the scratch space are thrown away. При запуске нового экземпляра контейнера ему предоставляется новое вспомогательное пространство.When a new container instance is started, a new scratch space is provided for the instance.

Хранилище уровняLayer Storage

Как описано в статье Общие сведения о контейнерах, образы контейнеров представляют собой набор файлов, представленный в виде совокупности слоев.As described in the Containers Overview, container images are a bundle of files expressed as a series of layers. Хранилище слоя содержит все файлы, которые встроены в контейнер.Layer storage is all the files that are built into the container. При каждом выполнении операции docker pull и docker run с контейнером результаты совпадают.Every time you docker pull then docker run that container - they are the same.

Где хранятся уровни и как их изменитьWhere layers are stored and how to change it

При установке по умолчанию уровни хранятся в C:\ProgramData\docker и распределяются между каталогами «image» и «windowsfilter».In a default installation, layers are stored in C:\ProgramData\docker and split across the "image" and "windowsfilter" directories. Вы можете изменить место хранения уровней, используя конфигурацию docker-root, как показано в документации по подсистеме Docker в Windows.You can change where the layers are stored using the docker-root configuration, as demonstrated in the Docker Engine on Windows documentation.

Примечание

Для хранилища уровня поддерживается только файловая система NTFS.Only NTFS is supported for layer storage. ReFS не поддерживается.ReFS is not supported.

Вам не следует менять какие-либо файлы в каталогах уровня — они тщательно контролируются с помощью таких команд, как:You should not modify any files in the layer directories - they're carefully managed using commands such as:

Поддерживаемые операции хранилища уровняSupported operations in layer storage

Запущенные контейнеры могут использовать большинство операций NTFS, за исключением транзакций.Running containers can use most NTFS operations with the exception of transactions. К ним относятся настройка списков управления доступом, при этом все списки проверяются внутри контейнера.This includes setting ACLs, and all ACLs are checked inside the container. Если вы хотите запускать процессы как множество пользователей в контейнере, вы можете создать пользователей в Dockerfile с помощью RUN net user /create ..., настроить списки управления доступом к файлу, а затем настроить процессы для выполнения с этим пользователем с помощью директивы Dockerfile USER.If you want to run processes as multiple users inside a container, you can create users in your Dockerfile with RUN net user /create ..., set file ACLs, then configure processes to run with that user using the Dockerfile USER directive.

Постоянное хранилищеPersistent Storage

Контейнеры Windows поддерживают механизмы для обеспечения постоянного хранения с помощью привязок и томов.Windows containers support mechanisms for providing persistent storage via bind mounts and volumes. Дополнительные сведения см. в разделе Постоянное хранилище в контейнерах.To learn more, see Persistent Storage in Containers.

Ограничения хранилищаStorage Limits

Обычно приложения для Windows запрашивают объем свободного места на диске перед установкой или созданием новых файлов, а также для удаления временных файлов.A common pattern for Windows applications is to query the amount of free disk space before installing or creating new files or as a trigger for cleaning up temporary files. Для обеспечения максимальной совместимости приложений диск C: в контейнере Windows представляет виртуальное свободное пространство размером 20 ГБ.With the goal of maximizing application compatibility, the C: drive in a Windows container represents a virtual free size of 20GB.

Некоторым пользователям может потребоваться переопределить это значение по умолчанию и настроить свободное пространство меньшей или большей емкости.Some users may want to override this default and configure the free space to a smaller or larger value. Это можно сделать с помощью параметра "size" в конфигурации "storage-opt".this can be accomplished though the “size” option within the “storage-opt” configuration.

ПримерыExamples

Командная строка: docker run --storage-opt "size=50GB" mcr.microsoft.com/windows/servercore:ltsc2019 cmdCommand line: docker run --storage-opt "size=50GB" mcr.microsoft.com/windows/servercore:ltsc2019 cmd

Вы также можете изменить файл конфигурации Docker напрямую.Or you can change the docker configuration file directly:

"storage-opts": [
    "size=50GB"
  ]

Совет

Этот способ подходит также для команды docker build.This method works for docker build, too. В документе Настройка docker представлены дополнительные сведения об изменении файла конфигурации docker.See the configure docker document for more details on modifying the docker configuration file.