- Docker daemon configuration overview
- Configure the Docker daemon
- Daemon data directory
- Хранение конфигурационных данных с помощью Docker Configs
- Windows support
- Как Docker управляет конфигурациями
- Узнайте больше о командах docker config Docker
- Examples
- Определение и использование конфигураций в композиционных файлах
- Простой пример:Начните с конфигураций
- Простой пример:Использовать настройки в службе Windows
- Пример:Использование шаблонизированной конфигурации
Docker daemon configuration overview
This page shows you how to customize the Docker daemon, dockerd .
Configure the Docker daemon
There are two ways to configure the Docker daemon:
- Use a JSON configuration file. This is the preferred option, since it keeps all configurations in a single place.
- Use flags when starting dockerd .
You can use both of these options together as long as you don’t specify the same option both as a flag and in the JSON file. If that happens, the Docker daemon won’t start and prints an error message.
To configure the Docker daemon using a JSON file, create a file at /etc/docker/daemon.json on Linux systems, or C:\ProgramData\docker\config\daemon.json on Windows.
Here’s what the configuration file might look like:
"builder": "gc": "defaultKeepStorage": "20GB", "enabled": true > >, "experimental": false >
In addition to Docker Desktop default values, this configuration enables garbage collection at a 20GB threshold, and enables buildkit.
Using this configuration file, run the Docker daemon in debug mode, using TLS, and listen for traffic routed to 192.168.59.3 on port 2376 . You can learn what configuration options are available in the dockerd reference docs
You can also start the Docker daemon manually and configure it using flags. This can be useful for troubleshooting problems.
Here’s an example of how to manually start the Docker daemon, using the same configurations as shown in the previous JSON configuration:
$ dockerd --debug \ --tls=true \ --tlscert=/var/docker/server.pem \ --tlskey=/var/docker/serverkey.pem \ --host tcp://192.168.59.3:2376
You can learn what configuration options are available in the dockerd reference docs, or by running:
Many specific configuration options are discussed throughout the Docker documentation. Some places to go next include:
You can configure most daemon options using the daemon.json file. One thing you can’t configure using daemon.json mechanism is an HTTP proxy. For instructions on using a proxy, see Configure Docker to use a proxy server.
Daemon data directory
The Docker daemon persists all data in a single directory. This tracks everything related to Docker, including containers, images, volumes, service definition, and secrets.
By default this directory is:
You can configure the Docker daemon to use a different directory, using the data-root configuration option. For example:
Since the state of a Docker daemon is kept on this directory, make sure you use a dedicated directory for each daemon. If two daemons share the same directory, for example, an NFS share, you are going to experience errors that are difficult to troubleshoot.
Хранение конфигурационных данных с помощью Docker Configs
Конфиги служб Docker swarm позволяют хранить нечувствительную информацию,такую как файлы конфигурации,вне образа службы или запущенных контейнеров.Это позволяет сохранять образы как можно более общими,без необходимости привязывать конфигурационные файлы к контейнерам или использовать переменные окружения.
Конфиги работают аналогично secrets , за исключением того, что они не шифруются в состоянии покоя и монтируются непосредственно в файловую систему контейнера без использования RAM-дисков. Конфигурации могут быть добавлены или удалены из службы в любое время, и службы могут совместно использовать конфигурацию. Вы даже можете использовать конфигурации в сочетании с переменными среды или метками для максимальной гибкости. Значения конфигурации могут быть общими строками или двоичным содержимым (размером до 500 КБ).
Примечание . Конфигурации Docker доступны только для служб роя, а не для отдельных контейнеров. Чтобы использовать эту функцию, рассмотрите возможность адаптации своего контейнера для запуска в качестве службы со шкалой 1.
Настройки поддерживаются как в службах Linux,так и в службах Windows.
Windows support
Docker включает поддержку конфигураций в контейнерах Windows,но есть различия в реализации,которые указаны в примерах ниже.Имейте в виду следующие заметные различия:
- Файлы конфигурации с пользовательскими целями не монтируются напрямую в контейнеры Windows, так как Windows не поддерживает монтирование файлов без каталогов. Вместо этого все конфиги для контейнера монтируются в C:\ProgramData\Docker\internal\configs (подробности реализации, на которые не следует полагаться приложениям) внутри контейнера. Символьные ссылки используются для указания оттуда на желаемую цель конфигурации в контейнере. Целью по умолчанию является C:\ProgramData\Docker\configs .
- При создании службы, использующей контейнеры Windows, параметры для указания UID, GID и режима не поддерживаются для конфигураций. В настоящее время настройки доступны только администраторам и пользователям, имеющим доступ к system внутри контейнера.
- В Windows создайте или обновите службу, используя —credential-spec в формате config:// . Это передает файл учетных данных gMSA непосредственно узлам перед запуском контейнера. Учетные данные gMSA не записываются на диск рабочих узлов. Дополнительные сведения см. в разделе Развертывание сервисов в группе .
Как Docker управляет конфигурациями
Когда вы добавляете конфигурацию в рой,Docker отправляет конфигурацию менеджеру роя по взаимному TLS соединению.Конфигурация хранится в журнале Raft,который зашифрован.Весь Raft-журнал реплицируется другими менеджерами,обеспечивая такие же гарантии высокой доступности конфигураций,как и для остальных данных управления роем.
Когда вы предоставляете вновь созданному или работающему сервису доступ к конфигурации, эта конфигурация монтируется в виде файла в контейнере. Расположение точки монтирования в контейнере по умолчанию равно / в контейнерах Linux. В контейнерах Windows все конфиги монтируются в C:\ProgramData\Docker\configs а символические ссылки создаются в нужном месте, по умолчанию C:\ .
Вы можете установить владельца ( uid и gid ) для конфигурации, используя числовой идентификатор или имя пользователя или группы. Вы также можете указать права доступа к файлу ( mode ). Эти параметры игнорируются для контейнеров Windows.
- Если не задано, конфигурация принадлежит пользователю, запускающему команду контейнера (часто root ), и группе этого пользователя по умолчанию (также часто root ).
- Если не установлено, конфигурация имеет права на чтение для всего мира (режим 0444 ), если в контейнере не установлен umask , и в этом случае на значение umask влияет режим .
Вы можете в любое время обновить службу,чтобы предоставить ей доступ к дополнительным конфигурациям или отменить ее доступ к данному конфигуратору.
Узел имеет доступ к конфигурациям,только если он является менеджером роя или выполняет задачи обслуживания,которым был предоставлен доступ к конфигурации.Когда задача-контейнер прекращает работу,конфигурации,переданные ей,размонтируются из файловой системы в памяти для этого контейнера и удаляются из памяти узла.
Если узел теряет подключение к рою во время работы контейнера задач с доступом к конфигурации,контейнер задач все равно имеет доступ к своим конфигурациям,но не может получать обновления до тех пор,пока узел не переподключится к рою.
Вы можете добавить или проверить отдельную конфигурацию в любое время или просмотреть список всех конфигураций. Вы не можете удалить конфигурацию, которую использует работающая служба. См. Смена конфигурации , чтобы узнать, как удалить конфигурацию без прерывания работы служб.
Для более простого обновления или отката конфигураций,подумайте о добавлении номера версии или даты к названию конфигурации.Это становится проще благодаря возможности управления точкой монтирования конфигов в заданном контейнере.
Чтобы обновить стек, внесите изменения в файл Compose, затем повторно запустите docker stack deploy -c . Если вы используете новую конфигурацию в этом файле, ваши службы начинают использовать их. Имейте в виду, что конфигурации неизменяемы, поэтому вы не можете изменить файл для существующей службы. Вместо этого вы создаете новую конфигурацию для использования другого файла.
Вы можете запустить docker stack rm , чтобы остановить приложение и удалить стек. Это удалит любую конфигурацию, созданную при docker stack deploy с тем же именем стека. Это удаляет все конфиги, включая те, на которые не ссылаются сервисы, и те, которые остались после docker service update —config-rm .
Узнайте больше о командах docker config Docker
Используйте эти ссылки, чтобы прочитать о конкретных командах, или перейдите к примеру об использовании конфигов с сервисом .
Examples
Этот раздел включает дипломированные примеры,которые иллюстрируют,как использовать конфигурацию Docker.
Примечание . В этих примерах для простоты используются рой с одним движком и немасштабированные сервисы. В примерах используются контейнеры Linux, но контейнеры Windows также поддерживают конфиги.
Определение и использование конфигураций в композиционных файлах
Команда docker stack поддерживает определение конфигураций в файле Compose. Однако ключ configs не поддерживается для docker compose . Дополнительные сведения см. в справочнике по файлу Compose.
Простой пример:Начните с конфигураций
Этот простой пример показывает, как работают конфиги всего за несколько команд. Чтобы увидеть реальный пример, перейдите к расширенному примеру: использование конфигураций со службой Nginx .
- Добавьте конфиг в Docker. Команда docker config create читает стандартный ввод, поскольку последний аргумент, представляющий файл для чтения конфигурации, установлен на — .
$ echo "This is a config" | docker config create my-config -
$ docker service create --name redis --config my-config redis:alpine
$ docker service ps redis ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS bkna6bpn8r1a redis.1 redis:alpine ip-172-31-46-109 Running Running 8 seconds ago
$ docker ps --filter name=redis -q 5cb1c2348a59 $ docker container exec $(docker ps --filter name=redis -q) ls -l /my-config -r--r--r-- 1 root root 12 Jun 5 20:49 my-config $ docker container exec $(docker ps --filter name=redis -q) cat /my-config This is a config
$ docker config ls ID NAME CREATED UPDATED fzwcfuqjkvo5foqu7ts7ls578 hello 31 minutes ago 31 minutes ago $ docker config rm my-config Error response from daemon: rpc error: code = 3 desc = config 'my-config' is in use by the following service: redis
$ docker service update --config-rm my-config redis
$ docker container exec -it $(docker ps --filter name=redis -q) cat /my-config cat: can't open '/my-config': No such file or directory
$ docker service rm redis $ docker config rm my-config
Простой пример:Использовать настройки в службе Windows
Это очень простой пример,который показывает,как использовать конфигурации с сервисом Microsoft IIS,работающим на Docker for Windows под управлением контейнеров Windows на Microsoft Windows 10.Это наивный пример,в котором веб-страница хранится в конфиге.
В этом примере предполагается,что у вас установлен PowerShell.
- Сохраните следующее в новый файл index.html .
html lang="en"> head>title>Hello Docker title> head> body> p>Hello Docker! You have deployed a HTML page. p> body> html>
docker config create homepage index.html
docker service create --name my-iis --publish published=8000,target=8000 --config src=homepage,target="\inetpub\wwwroot\index.html" microsoft/iis:nanoserver
docker service rm my-iis docker config rm homepage
Пример:Использование шаблонизированной конфигурации
Чтобы создать конфигурацию, в которой контент будет генерироваться с помощью механизма шаблонов, используйте параметр —template-driver и укажите имя механизма в качестве его аргумента. Шаблон будет отображаться при создании контейнера.
- Сохраните следующее в новый файл index.html.tmpl .
html lang="en"> head>title>Hello Docker title> head> body> p>Hello >! I'm service >. p> body> html>
$ docker config create --template-driver домашняя страница golang index.html.tmpl
$ docker service create \ --name привет-шаблон \ --env ПРИВЕТ = "Докер" \ --config source=homepage,target=/usr/share/nginx/html/index.html \ --опубликовать опубликовано=3000,цель=80 \ nginx:alpine
$ curl http://0.0.0.0:3000 html lang="en"> head>title>Hello Docker title> head> body> p>Hello Docker! I'm service hello-template. p> body> html>
Docker 20.10
Пространства имен Linux обеспечивают изоляцию запущенных процессов, ограничивая их доступ к системным ресурсам, не зная об ограничениях.
Когда вы запускаете множество Docker Engines, узлы менеджера являются ключевыми компонентами для управления и хранения состояния.
В Docker Engine 1.12 представлен режим роя, который позволяет создавать кластер из одного или нескольких двигателей, называемых узлами. Существует два типа узлов: менеджеры и рабочие.