Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье показано, как настроить пользовательский контейнер для работы в Службе приложений Azure.
Это краткое описание содержит основные понятия и инструкции для работы с контейнерами приложений Windows в Службе приложений. Новые пользователи Службы приложений Azure должны сначала ознакомиться с кратким руководством по пользовательскому контейнеру и пройти через учебное руководство.
Это краткое описание содержит основные понятия и инструкции для работы с контейнерами приложений Linux в Службе приложений. Если вы не знакомы со службой приложений Azure, сначала следуйте краткому руководству и руководству по пользовательскому контейнеру. For sidecar containers, see Tutorial: Configure a sidecar container for custom container in Azure App Service.
Примечание.
Service Principal is no longer supported for Windows container image pull authentication. We recommend that you use Managed Identity for both Windows and Linux containers
Поддерживаемые родительские образы
Для вашего пользовательского образа Windows выберите нужный родительский образ (базовый образ) для фреймворка, который вы хотите.
- To deploy .NET Framework apps, use a parent image based on the Windows Server 2019 Core Long-Term Servicing Channel (LTSC) release.
- To deploy .NET Core apps, use a parent image based on the Windows Server 2019 Nano Annual Channel (AC) release.
Во время запуска приложения требуется некоторое время для скачивания родительского образа. Вы можете сократить время запуска с помощью одного из следующих родительских образов, которые уже кэшируются в Службе приложений Azure:
- mcr.microsoft.com/windows/servercore:ltsc2022
- mcr.microsoft.com/windows/servercore:ltsc2019
- mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-ltsc2022
- mcr.microsoft.com/dotnet/framework/aspnet:4.8-windowsservercore-ltsc2019
- mcr.microsoft.com/dotnet/runtime:6.0-nanoserver-ltsc2022
- mcr.microsoft.com/dotnet/runtime:6.0-nanoserver-1809
- mcr.microsoft.com/dotnet/aspnet:6.0-nanoserver-ltsc2022
- mcr.microsoft.com/dotnet/aspnet:6.0-nanoserver-1809
Изменение Docker-образа пользовательского контейнера
Чтобы изменить существующий пользовательский контейнер с текущего образа Docker на новый образ, используйте следующую команду:
az webapp config container set --name <app-name> --resource-group <group-name> --docker-custom-image-name <docker-hub-repo>/<image>
Использование образа из частного реестра
Чтобы использовать образ из частного реестра, например реестра контейнеров Azure, выполните следующую команду:
az webapp config container set --name <app-name> --resource-group <group-name> --docker-custom-image-name <image-name> --docker-registry-server-url <private-repo-url> --docker-registry-server-user <username> --docker-registry-server-password <password>
Для <имени пользователя> и <пароля> укажите учетные данные для входа в учетную запись частного реестра.
Use managed identity to pull image from Azure Container Registry
Выполните следующие шаги, чтобы настроить веб-приложение для извлечения из Реестра контейнеров Azure (ACR) с использованием управляемого удостоверения. The steps use system-assigned managed identity. Вместо этого можно использовать управляемую личность, назначаемую пользователем.
Включите системно назначаемое управляемое удостоверение для веб-приложения с помощью команды az webapp identity assign:
az webapp identity assign --resource-group <group-name> --name <app-name> --query principalId --output tsv
Замените <имя> приложения именем, которое вы использовали на предыдущем шаге. The output of the command, filtered by the
--query
and--output
arguments, is the service principal ID of the assigned identity.Получите идентификатор ресурса Реестра контейнеров Azure:
az acr show --resource-group <group-name> --name <registry-name> --query id --output tsv
Замените <имя> реестра именем реестра. Выходные данные команды, отфильтрованные по аргументам
--query
и--output
, это идентификатор ресурса Azure Container Registry.Предоставьте управляемой идентификации разрешение на доступ к реестру контейнеров.
az role assignment create --assignee <principal-id> --scope <registry-resource-id> --role "AcrPull"
Измените следующие значения:
-
<principal-id> with the service principal ID from the
az webapp identity assign
command -
<registry-resource-id> with the ID of your container registry from the
az acr show
command
Дополнительные сведения об этих разрешениях см. в статье Общие сведения об управлении доступом на основе ролей (RBAC) для ресурсов Azure.
-
<principal-id> with the service principal ID from the
Настройте приложение для извлечения данных из Реестра контейнеров Azure с помощью управляемого удостоверения.
az webapp config set --resource-group <group-name> --name <app-name> --generic-configurations '{"acrUseManagedIdentityCreds": true}'
Измените следующие значения:
- <имя> приложения с именем веб-приложения.
Tip
If you use PowerShell console to run the commands, escape the strings in the
--generic-configurations
argument in this step and the next step. Например:--generic-configurations '{\"acrUseManagedIdentityCreds\": true'
(Необязательно) Если приложение использует управляемое удостоверение, назначаемое пользователем, убедитесь, что удостоверение настроено в веб-приложении, а затем задайте
acrUserManagedIdentityID
свойство, чтобы указать его идентификатор клиента:az identity show --resource-group <group-name> --name <identity-name> --query clientId --output tsv
Replace the
<identity-name>
of your user-assigned managed identity and use the output<client-id>
to configure the user-assigned managed identity ID.az webapp config set --resource-group <group-name> --name <app-name> --generic-configurations '{"acrUserManagedIdentityID": "<client-id>"}'
Все готово! Теперь веб-приложение использует управляемое удостоверение для извлечения из реестра контейнеров Azure.
Использование образа из реестра, защищенного в сети
Чтобы подключиться к репозиторию и получить из него данные внутри виртуальной сети или локально, приложение должно интегрироваться с виртуальной сетью. Кроме того, требуется интеграция виртуальной сети для реестра контейнеров Azure с частной конечной точкой. After you configure your network and DNS resolution, enable the routing of the image pull through the virtual network by configuring the vnetImagePullEnabled
site setting:
az resource update --resource-group <group-name> --name <app-name> --resource-type "Microsoft.Web/sites" --set properties.vnetImagePullEnabled [true|false]
Я не вижу обновленный контейнер
Если изменить параметры контейнера Docker, чтобы указать на новый контейнер, может потребоваться несколько минут, прежде чем приложение обслуживает HTTP-запросы из нового контейнера. Во время извлечения и запуска нового контейнера Служба приложений продолжит обслуживать запросы из старого контейнера. Служба приложений начинает отправлять запросы на новый контейнер только после его запуска и готовности к приему запросов.
Как хранятся образы контейнеров
The first time you run a custom Docker image in App Service, App Service does a docker pull
and pulls all image layers. Эти слои хранятся на диске, например при использовании Docker в локальной среде. Each time the app restarts, App Service does a docker pull
. It pulls only changed layers. Если изменений нет, Служба приложений использует существующие слои на локальном диске.
If the app changes compute instances for any reason, such as scaling up and down the pricing tiers, App Service must pull down all layers again. The same is true if you scale out to add more instances. Существуют также редкие случаи, когда экземпляры приложения могут изменяться без операции масштабирования.
Настройка номера порта
По умолчанию служба приложений предполагает, что пользовательский контейнер прослушивает порт 80. Если контейнер прослушивает другой порт, настройте соответствующим образом параметр WEBSITES_PORT
приложения в приложении Службы приложений. Его можно задать с помощью Cloud Shell. В Bash:
az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITES_PORT=8000
В PowerShell:
Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITES_PORT"="8000"}
В настоящее время Служба приложений позволяет контейнеру предоставлять для HTTP-запросов только один порт.
Настройка переменных среды
Настраиваемый контейнер может использовать переменные среды, которые необходимо предоставить внешним образом. Их можно передать с помощью Cloud Shell. В Bash:
az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings DB_HOST="myownserver.mysql.database.azure.com"
В PowerShell:
Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"DB_HOST"="myownserver.mysql.database.azure.com"}
При запуске приложения параметры приложения Службы приложений автоматически подставляются в процесс как переменные среды. Вы можете проверить переменные среды контейнера с помощью URL-адреса https://<app-name>.scm.azurewebsites.net/Env
.
Если приложение использует образы из частного реестра или из Docker Hub, учетные данные для доступа к репозиторию сохраняются в переменных среды: DOCKER_REGISTRY_SERVER_URL
DOCKER_REGISTRY_SERVER_USERNAME
и DOCKER_REGISTRY_SERVER_PASSWORD
. Из-за угроз для безопасности приложению не предоставляется ни одно из этих зарезервированных имен переменных.
Для контейнеров на основе IIS или .NET Framework (4.0 или более поздней версии) учетные данные автоматически добавляются в System.ConfigurationManager
службой App Service в качестве параметров приложения .NET и строк подключения. Для всех других языков или платформ они предоставляются в качестве переменных среды для процесса с одним из следующих префиксов:
APPSETTING_
SQLCONTR_
MYSQLCONTR_
SQLAZURECOSTR_
POSTGRESQLCONTR_
CUSTOMCONNSTR_
Этот метод работает как для приложений с одним контейнером, так и для приложений с несколькими контейнерами, где переменные среды указаны в файле docker-compose.yml.
Использование постоянного общего хранилища
Вы можете использовать каталог C:\home в файловой системе своего пользовательского контейнера для сохранения файлов между перезапусками и совместного доступа к ним в экземплярах. Каталог C:\home предоставляется для предоставления пользовательскому контейнеру доступа к постоянному хранилищу.
Если постоянное хранилище отключено, запись в каталог C:\home не сохраняется в перезапуске приложения или в нескольких экземплярах. Если постоянное хранилище включено, все записи в каталог C:\home сохраняются. Все экземпляры масштабируемого приложения могут получить к ним доступ. Все существующие файлы, уже имеющиеся в постоянном хранилище, когда контейнер начинает перезаписывать любое содержимое в каталоге C:\home контейнера.
Единственным исключением является каталог C:\home\LogFiles . В этом каталоге хранятся журналы контейнеров и приложений. Эта папка всегда сохраняется при перезапуске приложения, если ведение журнала приложений включено с параметром файловой системы , независимо от того, включено ли постоянное хранилище. Другими словами, включение или отключение постоянного хранилища не влияет на поведение ведения журнала приложений.
По умолчанию постоянное хранилище включено в пользовательских контейнерах Windows. Чтобы отключить его, задайте WEBSITES_ENABLE_APP_SERVICE_STORAGE
для параметра приложения значение false
с помощью Cloud Shell. В Bash:
az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITES_ENABLE_APP_SERVICE_STORAGE=false
В PowerShell:
Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITES_ENABLE_APP_SERVICE_STORAGE"=false}
Вы можете использовать каталог /home в файловой системе своего пользовательского контейнера для сохранения файлов между перезапусками и совместного доступа к ним в экземплярах. Каталог /home предоставляется для предоставления пользовательскому контейнеру доступа к постоянному хранилищу. Сохранение данных в /home способствует квоте места хранения , включенной в план службы приложений.
When persistent storage is disabled, writes to the /home directory aren't persisted across app restarts or across multiple instances. When persistent storage is enabled, all writes to the /home directory persist. Все экземпляры масштабируемого приложения могут получить к ним доступ. Any existing files already present on the persistent storage when the container starts overwrite any contents in the /home directory of the container.
The only exception is the /home/LogFiles directory. В этом каталоге хранятся журналы контейнеров и приложений. Эта папка всегда сохраняется при перезапуске приложения, если ведение журнала приложений включено с параметром файловой системы , независимо от того, включено ли постоянное хранилище. Другими словами, включение или отключение постоянного хранилища не влияет на поведение ведения журнала приложений.
Рекомендуется записывать данные в /home или подключенный путь к хранилищу Azure. Данные, записанные за пределами этих путей, не сохраняются во время перезапуска. Данные сохраняются в дисковом пространстве узла, управляемом платформой, отдельно от квоты хранилища файлов службы приложений.
По умолчанию постоянное хранилище отключено в пользовательских контейнерах Linux. Чтобы включить его, задайте WEBSITES_ENABLE_APP_SERVICE_STORAGE
для параметра приложения значение true
с помощью Cloud Shell. В Bash:
az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITES_ENABLE_APP_SERVICE_STORAGE=true
В PowerShell:
Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITES_ENABLE_APP_SERVICE_STORAGE"=true}
Примечание.
Вы также можете настроить собственное постоянное хранилище.
Обнаружение сеанса HTTPS
Служба приложений завершает TLS на фронтенде. Это означает, что запросы TLS никогда не попадают в приложение. Вам не нужно и не следует реализовывать поддержку TLS в приложении.
Фронтенды расположены внутри центров обработки данных Azure. Если вы используете TLS с приложением, ваш трафик через Интернет всегда безопасно зашифрован.
Customize ASP.NET machine key injection
Во время запуска контейнера в него вставляются автоматически созданные ключи в качестве ключей компьютера для подпрограмм шифрования ASP.NET.
Эти ключи можно найти в контейнере в следующих переменных среды: MACHINEKEY_Decryption
, MACHINEKEY_DecryptionKey
, MACHINEKEY_ValidationKey
, MACHINEKEY_Validation
.
The new keys at each restart might reset ASP.NET forms authentication and view state, if your app depends on them. Чтобы предотвратить автоматическое повторное создание ключей, задайте их вручную в качестве параметров приложения Службы приложений.
Подключение к контейнеру
Чтобы подключиться к контейнеру Windows непосредственно для задач диагностики, перейдите https://<app-name>.scm.azurewebsites.net/
к нему и выберите параметр SSH. Этот параметр устанавливает прямой сеанс SSH, в котором можно выполнять команды внутри контейнера.
- Она работает отдельно от графического браузера над ним, в котором отображаются только файлы в общем хранилище.
- В масштабируемом приложении сеанс SSH подключается к одному из экземпляров контейнера. Вы можете выбрать другой экземпляр из раскрывающегося списка экземпляров в верхнем меню Kudu.
- За исключением изменений в общем хранилище, все изменения, внесенные в контейнер из сеанса SSH, не сохраняются при перезапуске приложения. Такие изменения не являются частью образа Docker. Чтобы сохранить такие изменения, как правки в параметрах реестра и установка программного обеспечения, сделайте их частью файла Dockerfile.
Доступ к журналам диагностики
Служба приложений ведет журнал действий Docker-хоста и активности внутри контейнера. Журналы из узла Docker (журналы платформы) включены по умолчанию. Необходимо вручную включить журналы приложений или журналы веб-сервера из контейнера. Дополнительные сведения см. в разделах Включение журнала приложений и Включение журнала веб-сервера.
Получить доступ к журналам Docker можно несколькими способами:
На портале Azure
Журналы Docker отображаются на портале Azure на странице параметров контейнера приложения. The logs are truncated. Чтобы скачать все журналы, нажмите кнопку "Скачать".
Из Kudu
Чтобы просмотреть отдельные файлы журналов, перейдите https://<app-name>.scm.azurewebsites.net/DebugConsole
к папке LogFiles и выберите ее. Чтобы скачать весь каталог LogFiles , щелкните значок скачивания слева от имени каталога. Доступ к этой папке также можно получить с помощью FTP-клиента.
В терминале SSH невозможно получить доступ к папке C:\home\LogFiles по умолчанию, так как постоянное общее хранилище не включено. Чтобы включить такое поведение в консольном терминале, активируйте постоянное общее хранилище.
Если вы пытаетесь скачать журнал Docker, который в настоящее время используется с помощью FTP-клиента, может возникнуть ошибка из-за блокировки файла.
С помощью API Kudu
Перейдите непосредственно на страницу https://<app-name>.scm.azurewebsites.net/api/logs/docker
, чтобы просмотреть метаданные для журналов Docker. You might see more than one log file listed. Свойство href
позволяет скачать файл журнала напрямую.
Чтобы скачать сразу все журналы в одном ZIP-файле, откройте страницу https://<app-name>.scm.azurewebsites.net/api/logs/docker/zip
.
Настройка памяти контейнера
По умолчанию все контейнеры Windows, развернутые в Службе приложений Azure, имеют ограничение памяти. В следующей таблице перечислены параметры по умолчанию для каждого SKU плана Службы приложений.
App Service Plan SKU | Ограничение памяти по умолчанию для каждого приложения в МБ |
---|---|
P1v3 | 1024 |
P1Mv3 | 1024 |
P2v3 | 1536 |
P2Mv3 | 1536 |
P3v3 | 2048 |
P3Mv3 | 2048 |
P4Mv3 | 2560 |
P5Mv3 | 3072 |
Это значение можно изменить, указав WEBSITE_MEMORY_LIMIT_MB
параметр приложения с помощью Cloud Shell. В Bash:
az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITE_MEMORY_LIMIT_MB=2000
В PowerShell:
Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITE_MEMORY_LIMIT_MB"=2000}
Значение определяется в МБ и должно быть не больше общего объема физической памяти узла. Например, в плане службы приложений с 8 ГБ ОЗУ совокупная сумма WEBSITE_MEMORY_LIMIT_MB
для всех приложений не должна превышать 8 ГБ. Дополнительные сведения о доступном объеме памяти см. в разделе плана службы "Премиум" версии 3в ценах на службу приложений.
Настройка количества вычислительных ядер
По умолчанию контейнер Windows выполняется со всеми доступными ядрами для выбранной ценовой категории. You might want to reduce the number of cores that your staging slot uses. Чтобы уменьшить количество ядер, используемых контейнером, задайте в параметре WEBSITE_CPU_CORES_LIMIT
приложения нужное число ядер. Его можно задать с помощью Cloud Shell. В Bash:
az webapp config appsettings set --resource-group <group-name> --name <app-name> --slot staging --settings WEBSITE_CPU_CORES_LIMIT=1
В PowerShell:
Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"WEBSITE_CPU_CORES_LIMIT"=1}
Tip
Обновление параметра приложения активирует автоматическую перезагрузку, что приводит к минимальному простою. For a production app, consider swapping it into a staging slot, change the app setting in the staging slot, and then swap it back into production.
Чтобы проверить измененный номер, откройте сеанс SSH на портале Azure или используйте портал Kudu (https://<app-name>.scm.azurewebsites.net/webssh/host
). Введите следующие команды с помощью PowerShell. Каждая команда возвращает число.
Get-ComputerInfo | ft CsNumberOfLogicalProcessors # Total number of enabled logical processors. Disabled processors are excluded.
Get-ComputerInfo | ft CsNumberOfProcessors # Number of physical processors.
Процессоры могут быть многоядерными или гиперпоточными процессорами. Сведения о том, сколько ядер доступно, см. в разделе плана обслуживания Premium версии 3, цен на службу приложений.
Customize health ping behavior
Служба приложений считает, что контейнер успешно запущен, если он запускается и отвечает на HTTP-сигнал. The health ping request contains the header User-Agent= "App Service Hyper-V Container Availability Check"
. Если контейнер запускается, но не отвечает на запросы через определенное время, служба приложений регистрирует событие в журнале Docker.
Если ваше приложение потребляет много ресурсов, контейнер может не успеть ответить на HTTP-пинг вовремя. To control the actions when HTTP pings fail, set the CONTAINER_AVAILABILITY_CHECK_MODE
app setting. Его можно задать с помощью Cloud Shell. В Bash:
az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings CONTAINER_AVAILABILITY_CHECK_MODE="ReportOnly"
В PowerShell:
Set-AzWebApp -ResourceGroupName <group-name> -Name <app-name> -AppSettings @{"CONTAINER_AVAILABILITY_CHECK_MODE"="ReportOnly"}
В таблице ниже приведены возможные значения.
Значение | Описания |
---|---|
Ремонт | Перезапустите контейнер после трех последовательных проверок доступности. |
ReportOnly | Значение по умолчанию. Контейнер не перезапускается, но в журналы Docker для него добавляется соответствующее событие после трех последовательных проверок доступности. |
Выкл. | Доступность не проверяется. |
Поддержка групповых управляемых сервисных учетных записей
Групповые управляемые учетные записи служб (gMSA) в настоящее время не поддерживаются в контейнерах Windows в Службе приложений.
Включение SSH
Secure Shell (SSH) обычно используется для удаленного выполнения административных команд из терминала командной строки. Чтобы включить консоль SSH на портале Azure с пользовательскими контейнерами, выполните следующие действия.
Создайте стандартный
sshd_config
файл со следующим содержимым и поместите его в корневой каталог проекта приложения:Port 2222 ListenAddress 0.0.0.0 LoginGraceTime 180 X11Forwarding yes Ciphers aes128-cbc,3des-cbc,aes256-cbc,aes128-ctr,aes192-ctr,aes256-ctr MACs hmac-sha1,hmac-sha1-96 StrictModes yes SyslogFacility DAEMON PasswordAuthentication yes PermitEmptyPasswords no PermitRootLogin yes Subsystem sftp internal-sftp
Примечание.
Этот файл настраивает OpenSSH и должен включать следующие элементы, чтобы обеспечить соответствие функции SSH портал Azure:
- Для параметра
Port
должно быть установлено значение 2222. -
Ciphers
должен содержать по крайней мере один элемент в этом списке:aes128-cbc,3des-cbc,aes256-cbc
. -
MACs
должен содержать по крайней мере один элемент в этом списке:hmac-sha1,hmac-sha1-96
.
- Для параметра
Создайте скрипт точки входа с именем entrypoint.sh или измените существующий файл точки входа. Добавьте команду, чтобы запустить службу SSH, а также команду запуска приложения. В следующем примере показано, как запустить приложение Python. Замените последнюю команду в соответствии с языком проекта или стеком:
#!/bin/sh set -e service ssh start exec gunicorn -w 4 -b 0.0.0.0:8000 app:app
Добавьте в Dockerfile следующие инструкции в соответствии с распределением базового образа. Эти инструкции копируют новые файлы, устанавливают сервер OpenSSH, задают правильные разрешения и настраивают настраиваемую точку входа и предоставляют порты, необходимые для сервера приложений и SSH соответственно:
COPY entrypoint.sh ./ # Start and enable SSH RUN apt-get update \ && apt-get install -y --no-install-recommends dialog \ && apt-get install -y --no-install-recommends openssh-server \ && echo "root:Docker!" | chpasswd \ && chmod u+x ./entrypoint.sh COPY sshd_config /etc/ssh/ EXPOSE 8000 2222 ENTRYPOINT [ "./entrypoint.sh" ]
Примечание.
Корневой пароль должен быть именно
Docker!
потому, что он используется службой приложений для доступа к сеансу SSH с контейнером. Эта конфигурация не допускает внешние подключения к контейнеру. Порт 2222 контейнера доступен только в сети моста частной виртуальной сети и недоступен злоумышленнику в Интернете.Перестройте и отправьте образ Docker в реестр, а затем проверьте функцию SSH веб-приложения на портале Azure.
Дополнительные сведения об устранении неполадок см. в блоге службы приложений Azure: включение SSH в веб-приложении Linux для контейнеров
Доступ к журналам диагностики
Вы можете получить доступ к журналам консоли, генерируемым внутри контейнера.
Чтобы включить ведение журнала контейнеров, выполните следующую команду:
az webapp log config --name <app-name> --resource-group <resource-group-name> --docker-container-logging filesystem
Замените #D0 и #D1 именами, подходящими для веб-приложения.
После включения ведения журнала контейнеров выполните следующую команду, чтобы просмотреть поток журналов:
az webapp log tail --name <app-name> --resource-group <resource-group-name>
Если журналы консоли не отображаются немедленно, повторите попытку через 30 секунд.
To stop log streaming at any time, select Ctrl+C.
Вы также можете проверить файлы журнала в браузере на странице https://<app-name>.scm.azurewebsites.net/api/logs/docker
. For recently created apps, use https://<app-name>-<random-hash>.scm.<region>.azurewebsites.net/
.
Настройка приложений с несколькими контейнерами
Примечание.
The Docker Compose feature will be retired on March 31, 2027. Sidecar containers succeed multi-container apps in App Service. For new services, refer to Tutorial: Configure a sidecar container for custom container in Azure App Service. For existing multi-container apps in App Service, refer to Migrating your Docker Compose applications to the Sidecar feature.
- Использование постоянного хранилища в Docker Compose
- Ограничения предварительной версии
- Параметры Docker Compose
Использование постоянного хранилища в Docker Compose
Для правильной работы приложений с несколькими контейнерами, таких как WordPress, требуется постоянное хранилище. Для его включения в конфигурации Docker Compose должно быть указано место хранения за пределами контейнера. Изменения в местах хранения внутри контейнера не сохраняются после перезапуска приложения.
Чтобы включить постоянное хранилище, задайте WEBSITES_ENABLE_APP_SERVICE_STORAGE
параметр приложения. Используйте команду az webapp config appsettings set в Cloud Shell.
az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITES_ENABLE_APP_SERVICE_STORAGE=TRUE
В файле docker-compose.yml сопоставьте параметр volumes
с ${WEBAPP_STORAGE_HOME}
.
WEBAPP_STORAGE_HOME
— это переменная среды в Службе приложений, которая сопоставляется с постоянным хранилищем для вашего приложения. Например:
wordpress:
image: <image name:tag>
volumes:
- "${WEBAPP_STORAGE_HOME}/site/wwwroot:/var/www/html"
- "${WEBAPP_STORAGE_HOME}/phpmyadmin:/var/www/phpmyadmin"
- "${WEBAPP_STORAGE_HOME}/LogFiles:/var/log"
Ограничения предварительной версии
Multi-container is currently in preview. Следующие функции платформы Служба приложений не поддерживаются.
- Проверка подлинности/авторизация
- Managed Identities
- CORS
- Интеграция виртуальной сети не поддерживается для сценариев Docker Compose.
- Для Docker Compose в Службах приложений Azure сейчас настроено ограничение в 4000 символов.
Docker Compose options
В следующих списках приведены поддерживаемые и неподдерживаемые параметры конфигурации Docker Compose.
Поддерживаемые параметры
- command
- точка входа
- окружающая среда
- Изображение
- порты
- перезагрузка
- услуги
- volumes (mapping to Azure Storage is unsupported)
Неподдерживаемые параметры
- build (not allowed)
- depends_on (ignored)
- сети (игнорируется)
- секреты (игнорируются)
- порты, отличные от 80 и 8080 (игнорируются).
- переменные среды по умолчанию, такие как
$variable and ${variable}
, в отличие от переменных в Docker
Ограничения синтаксиса
- "version x.x" всегда должна быть первой инструкцией YAML в файле
- ports section must use quoted numbers
- image > volume section must be quoted and can't have permissions definitions
- Раздел volumes не должен иметь пустую фигурную скобку после имени тома
Примечание.
Другие параметры, которые не указаны здесь явно, в общедоступной предварительной версии игнорируются.
Ignore the robots933456 message in logs
В журналах контейнеров может появиться следующее сообщение:
2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"
Это сообщение можно проигнорировать.
/robots933456.txt
— это фиктивный URL-путь, с помощью которого Служба приложений проверяет, может ли контейнер обслуживать запросы. Ответ 404 указывает, что путь не существует, и он сигнализирует службе приложений о том, что контейнер работоспособен и готов реагировать на запросы.
Связанный контент
Кроме того, ознакомьтесь с дополнительными ресурсами: