Tutorial: Criar um aplicativo multicontêiner (versão prévia) no Aplicativo Web para ContêineresTutorial: Create a multi-container (preview) app in Web App for Containers

O Aplicativo Web para Contêineres fornece uma maneira flexível de usar imagens do Docker.Web App for Containers provides a flexible way to use Docker images. Neste tutorial, você aprenderá como criar um aplicativo multicontêiner usando WordPress e MySQL.In this tutorial, you'll learn how to create a multi-container app using WordPress and MySQL. Você conclui este tutorial no Cloud Shell, mas também pode executar esses comandos localmente com a ferramenta de linha de comando da CLI do Azure (2.0.32 ou posterior).You'll complete this tutorial in Cloud Shell, but you can also run these commands locally with the Azure CLI command-line tool (2.0.32 or later).

Neste tutorial, você aprenderá como:In this tutorial, you learn how to:

  • Converter uma configuração do Docker Compose para trabalhar com Aplicativo Web para ContêineresConvert a Docker Compose configuration to work with Web App for Containers
  • Implantar um aplicativo multicontêiner no AzureDeploy a multi-container app to Azure
  • Adicionar configurações de aplicativoAdd application settings
  • Usar armazenamento persistente para contêineresUse persistent storage for your containers
  • Conectar-se ao Banco de Dados do Azure para MySQLConnect to Azure Database for MySQL
  • Solucionar problemas de errosTroubleshoot errors

Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.If you don't have an Azure subscription, create a free account before you begin.

Pré-requisitosPrerequisites

Para concluir este tutorial, você precisa ter experiência com o Docker Compose.To complete this tutorial, you need experience with Docker Compose.

Baixar o exemploDownload the sample

Para este tutorial será utilizado o arquivo de composição do Docker, mas você irá modificá-lo incluindo o Banco de Dados do Azure para MySQL, armazenamento persistente e Redis.For this tutorial, you use the compose file from Docker, but you'll modify it include Azure Database for MySQL, persistent storage, and Redis. O arquivo de configuração podem ser localizados em Exemplos do Azure.The configuration file can be found at Azure Samples. Para obter as opções de configuração compatíveis, confira Opções do Docker Compose.For supported configuration options, see Docker Compose options.

version: '3.3'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
volumes:
    db_data:

No Cloud Shell, crie um diretório de tutorial e depois altere para ele.In Cloud Shell, create a tutorial directory and then change to it.

mkdir tutorial

cd tutorial

Em seguida, execute o comando a seguir para clonar o repositório de aplicativos de exemplo ao seu diretório de tutorial.Next, run the following command to clone the sample app repository to your tutorial directory. Em seguida, altere para o diretório multicontainerwordpress.Then change to the multicontainerwordpress directory.

git clone https://github.com/Azure-Samples/multicontainerwordpress

cd multicontainerwordpress

Criar um grupo de recursosCreate a resource group

Um grupo de recursos é um contêiner lógico no qual os recursos do Azure, como aplicativos Web, bancos de dados e contas de armazenamento, são implantados e gerenciados.A resource group is a logical container into which Azure resources like web apps, databases, and storage accounts are deployed and managed. Por exemplo, é possível excluir posteriormente todo o grupo de recursos com uma única etapa simples.For example, you can choose to delete the entire resource group in one simple step later.

No Cloud Shell, crie um grupo de recursos com o comando az group create.In Cloud Shell, create a resource group with the az group create command. O exemplo a seguir cria um grupo de recursos nomeado myResourceGroup no localização Centro-Sul dos EUA.The following example creates a resource group named myResourceGroup in the South Central US location. Para ver todos os locais com suporte para o Serviço de Aplicativo no Linux no nível Standard, execute o comando az appservice list-locations --sku S1 --linux-workers-enabled.To see all supported locations for App Service on Linux in Standard tier, run the az appservice list-locations --sku S1 --linux-workers-enabled command.

az group create --name myResourceGroup --location "South Central US"

Em geral, você cria seu grupo de recursos e os recursos em uma região próxima a você.You generally create your resource group and the resources in a region near you.

Quando o comando for concluído, uma saída JSON mostra as propriedades do grupo de recursos.When the command finishes, a JSON output shows you the resource group properties.

Criar um Plano do Serviço de Aplicativo do AzureCreate an Azure App Service plan

No Cloud Shell, crie um plano do Serviço de Aplicativo no grupo de recursos com o comando az appservice plan create.In Cloud Shell, create an App Service plan in the resource group with the az appservice plan create command.

O exemplo a seguir cria um plano do Serviço de Aplicativo denominado myAppServicePlan no tipo de preço Standard (--sku S1) e em um contêiner do Linux (--is-linux).The following example creates an App Service plan named myAppServicePlan in the Standard pricing tier (--sku S1) and in a Linux container (--is-linux).

az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku S1 --is-linux

Quando o Plano do Serviço de Aplicativo tiver sido criado, o Cloud Shell mostrará informações semelhantes ao exemplo a seguir:When the App Service plan has been created, Cloud Shell shows information similar to the following example:

{
  "adminSiteName": null,
  "appServicePlanName": "myAppServicePlan",
  "geoRegion": "South Central US",
  "hostingEnvironmentProfile": null,
  "id": "/subscriptions/0000-0000/resourceGroups/myResourceGroup/providers/Microsoft.Web/serverfarms/myAppServicePlan",
  "kind": "linux",
  "location": "South Central US",
  "maximumNumberOfWorkers": 1,
  "name": "myAppServicePlan",
  < JSON data removed for brevity. >
  "targetWorkerSizeId": 0,
  "type": "Microsoft.Web/serverfarms",
  "workerTierName": null
}

Docker Compose com contêineres do WordPress e MySQLDocker Compose with WordPress and MySQL containers

Criar um aplicativo Docker ComposeCreate a Docker Compose app

Em seu Cloud Shell, crie um aplicativo Web multicontêiner no plano do Serviço de Aplicativo do myAppServicePlan com o comando az webapp create.In your Cloud Shell, create a multi-container web app in the myAppServicePlan App Service plan with the az webapp create command. Não se esqueça de substituir <app-name> por um nome de aplicativo exclusivo.Don't forget to replace <app-name> with a unique app name.

az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --multicontainer-config-type compose --multicontainer-config-file docker-compose-wordpress.yml

Quando o aplicativo Web tiver sido criado, o Cloud Shell mostrará um resultado semelhante ao exemplo a seguir:When the web app has been created, Cloud Shell shows output similar to the following example:

{
  "additionalProperties": {},
  "availabilityState": "Normal",
  "clientAffinityEnabled": true,
  "clientCertEnabled": false,
  "cloningInfo": null,
  "containerSize": 0,
  "dailyMemoryTimeQuota": 0,
  "defaultHostName": "<app-name>.azurewebsites.net",
  "enabled": true,
  < JSON data removed for brevity. >
}

Navegar até o aplicativoBrowse to the app

Navegue até o aplicativo implantado em (http://<app-name>.azurewebsites.net).Browse to the deployed app at (http://<app-name>.azurewebsites.net). O aplicativo pode demorar alguns minutos para carregar.The app may take a few minutes to load. Se um erro for exibido, aguarde mais alguns minutos e atualize o navegador.If you receive an error, allow a few more minutes then refresh the browser. Caso tenha problemas e queira solucioná-los, analise os logs do contêiner.If you're having trouble and would like to troubleshoot, review container logs.

Aplicativo multicontêiner de exemplo no Aplicativo Web para Contêineres

Parabéns, você criou um aplicativo multicontêiner no Aplicativo Web para Contêineres.Congratulations, you've created a multi-container app in Web App for Containers. Em seguida, você configurará o aplicativo para usar o Banco de Dados do Azure para MySQL.Next you'll configure your app to use Azure Database for MySQL. Não instale o WordPress neste momento.Don't install WordPress at this time.

Conectar o banco de dados de produçãoConnect to production database

Não é recomendável usar contêineres de banco de dados em um ambiente de produção.It's not recommended to use database containers in a production environment. Os contêineres locais não são escalonáveis.The local containers aren't scalable. Em vez disso, será utilizado o Banco de Dados do Azure para MySQL, que pode ser dimensionado.Instead, you'll use Azure Database for MySQL which can be scaled.

Criar um Banco de Dados do Azure para o servidor MySQLCreate an Azure Database for MySQL server

Crie um Banco de Dados do Azure para MySQL com o comando az mysql server create.Create an Azure Database for MySQL server with the az mysql server create command.

No comando a seguir, substitua o nome do servidor MySQL no qual o espaço reservado <mysql-server-name> é exibido (os caracteres válidos são a-z, 0-9 e -).In the following command, substitute your MySQL server name where you see the <mysql-server-name> placeholder (valid characters are a-z, 0-9, and -). Esse nome faz parte do nome do host do MySQL Server (<mysql-server-name>.database.windows.net) e precisa ser global exclusivo.This name is part of the MySQL server's hostname (<mysql-server-name>.database.windows.net), it needs to be globally unique.

az mysql server create --resource-group myResourceGroup --name <mysql-server-name>  --location "South Central US" --admin-user adminuser --admin-password My5up3rStr0ngPaSw0rd! --sku-name B_Gen4_1 --version 5.7

A conclusão da criação do servidor pode demorar alguns minutos.Creating the server may take a few minutes to complete. Quando o servidor MySQL for criado, o Cloud Shell mostrará informações semelhantes ao exemplo a seguir:When the MySQL server is created, Cloud Shell shows information similar to the following example:

{
  "administratorLogin": "adminuser",
  "administratorLoginPassword": null,
  "fullyQualifiedDomainName": "<mysql-server-name>.database.windows.net",
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.DBforMySQL/servers/<mysql-server-name>",
  "location": "southcentralus",
  "name": "<mysql-server-name>",
  "resourceGroup": "myResourceGroup",
  ...
}

Configurar o firewall do servidorConfigure server firewall

Crie uma regra de firewall para o servidor MySQL para permitir conexões de cliente usando o comando az mysql server firewall-rule create.Create a firewall rule for your MySQL server to allow client connections by using the az mysql server firewall-rule create command. Quando o IP inicial e o IP final estiverem definidos como 0.0.0.0, o firewall estará aberto somente para outros recursos do Azure.When both starting IP and end IP are set to 0.0.0.0, the firewall is only opened for other Azure resources.

az mysql server firewall-rule create --name allAzureIPs --server <mysql-server-name> --resource-group myResourceGroup --start-ip-address 0.0.0.0 --end-ip-address 0.0.0.0

Dica

Você pode ser ainda mais restritivo na regra de firewall ao usar somente os endereços de IP de saída que seu aplicativo usa.You can be even more restrictive in your firewall rule by using only the outbound IP addresses your app uses.

Criar o banco de dados do WordPressCreate the WordPress database

az mysql db create --resource-group myResourceGroup --server-name <mysql-server-name> --name wordpress

Quando o banco de dados for criado, o Cloud Shell mostrará informações semelhantes ao exemplo a seguir:When the database has been created, Cloud Shell shows information similar to the following example:

{
  "additionalProperties": {},
  "charset": "latin1",
  "collation": "latin1_swedish_ci",
  "id": "/subscriptions/12db1644-4b12-4cab-ba54-8ba2f2822c1f/resourceGroups/myResourceGroup/providers/Microsoft.DBforMySQL/servers/<mysql-server-name>/databases/wordpress",
  "name": "wordpress",
  "resourceGroup": "myResourceGroup",
  "type": "Microsoft.DBforMySQL/servers/databases"
}

Configurar variáveis de banco de dados no WordPressConfigure database variables in WordPress

Para conectar o aplicativo WordPress a esse novo servidor MySQL, você configurará algumas variáveis de ambiente específicas do WordPress, incluindo o caminho de AC do SSL definido por MYSQL_SSL_CA.To connect the WordPress app to this new MySQL server, you'll configure a few WordPress-specific environment variables, including the SSL CA path defined by MYSQL_SSL_CA. O Baltimore CyberTrust Root da DigiCert é fornecido na imagem personalizada abaixo.The Baltimore CyberTrust Root from DigiCert is provided in the custom image below.

Para fazer essas alterações, use o comando az webapp config appsettings set no Cloud Shell.To make these changes, use the az webapp config appsettings set command in Cloud Shell. As configurações do aplicativo diferenciam maiúsculas de minúsculas e são separadas por espaços.App settings are case-sensitive and space-separated.

az webapp config appsettings set --resource-group myResourceGroup --name <app-name> --settings WORDPRESS_DB_HOST="<mysql-server-name>.mysql.database.azure.com" WORDPRESS_DB_USER="adminuser@<mysql-server-name>" WORDPRESS_DB_PASSWORD="My5up3rStr0ngPaSw0rd!" WORDPRESS_DB_NAME="wordpress" MYSQL_SSL_CA="BaltimoreCyberTrustroot.crt.pem"

Após a criação da configuração do aplicativo, o Cloud Shell mostrará informações semelhantes ao exemplo a seguir:When the app setting has been created, Cloud Shell shows information similar to the following example:

[
  {
    "name": "WORDPRESS_DB_HOST",
    "slotSetting": false,
    "value": "<mysql-server-name>.mysql.database.azure.com"
  },
  {
    "name": "WORDPRESS_DB_USER",
    "slotSetting": false,
    "value": "adminuser@<mysql-server-name>"
  },
  {
    "name": "WORDPRESS_DB_NAME",
    "slotSetting": false,
    "value": "wordpress"
  },
  {
    "name": "WORDPRESS_DB_PASSWORD",
    "slotSetting": false,
    "value": "My5up3rStr0ngPaSw0rd!"
  },
  {
    "name": "MYSQL_SSL_CA",
    "slotSetting": false,
    "value": "BaltimoreCyberTrustroot.crt.pem"
  }
]

Para obter mais informações sobre variáveis de ambiente, confira Configurar variáveis de ambiente.For more information on environment variables, see Configure environment variables.

Usar uma imagem personalizada para MySQL SSL e outras configuraçõesUse a custom image for MySQL SSL and other configurations

Por padrão, o SSL é usado pelo Banco de Dados do Azure para MySQL.By default, SSL is used by Azure Database for MySQL. O WordPress requer configuração adicional para usar SSL com MySQL.WordPress requires additional configuration to use SSL with MySQL. A 'imagem oficial' do WordPress não fornece a configuração adicional, mas uma imagem personalizada foi preparada para sua conveniência.The WordPress 'official image' doesn't provide the additional configuration, but a custom image has been prepared for your convenience. Na prática, você adicionaria as alterações desejadas à sua própria imagem.In practice, you would add desired changes to your own image.

A imagem personalizada é baseada na 'imagem oficial' do WordPress do Hub do Docker.The custom image is based on the 'official image' of WordPress from Docker Hub. As alterações a seguir foram feitas nessa imagem personalizada do Banco de Dados do Azure para MySQL:The following changes have been made in this custom image for Azure Database for MySQL:

As alterações a seguir foram feitas para Redis (a ser usado em uma seção posterior):The following changes have been made for Redis (to be used in a later section):

Para usar a imagem personalizada, você atualizará o arquivo docker-compose-wordpress.yml.To use the custom image, you'll update your docker-compose-wordpress.yml file. No Cloud Shell, digite nano docker-compose-wordpress.yml para abrir o editor de texto nano.In Cloud Shell, type nano docker-compose-wordpress.yml to open the nano text editor. Altere image: wordpress para usar image: microsoft/multicontainerwordpress.Change the image: wordpress to use image: microsoft/multicontainerwordpress. Não será mais necessário o contêiner do banco de dados.You no longer need the database container. Remova as seções db, environment, depends_on e volumes do arquivo de configuração.Remove the db, environment, depends_on, and volumes section from the configuration file. O arquivo deverá ser semelhante ao código a seguir:Your file should look like the following code:

version: '3.3'

services:
   wordpress:
     image: microsoft/multicontainerwordpress
     ports:
       - "8000:80"
     restart: always

Salve suas alterações e saia do nano.Save your changes and exit nano. Use o comando ^O para salvar e ^X para sair.Use the command ^O to save and ^X to exit.

Atualizar aplicativo com nova configuraçãoUpdate app with new configuration

No Cloud Shell, reconfigure o aplicativo Web multicontêiner com o comando az webapp config container set.In Cloud Shell, reconfigure your multi-container web app with the az webapp config container set command. Não se esqueça de substituir <app-name> pelo nome do aplicativo Web que você criou anteriormente.Don't forget to replace <app-name> with the name of the web app you created earlier.

az webapp config container set --resource-group myResourceGroup --name <app-name> --multicontainer-config-type compose --multicontainer-config-file docker-compose-wordpress.yml

Quando o aplicativo for reconfigurado, o Cloud Shell mostrará informações semelhantes ao exemplo a seguir:When the app has been reconfigured, Cloud Shell shows information similar to the following example:

[
  {
    "name": "DOCKER_CUSTOM_IMAGE_NAME",
    "value": "COMPOSE|dmVyc2lvbjogJzMuMycKCnNlcnZpY2VzOgogICB3b3JkcHJlc3M6CiAgICAgaW1hZ2U6IG1zYW5nYXB1L3dvcmRwcmVzcwogICAgIHBvcnRzOgogICAgICAgLSAiODAwMDo4MCIKICAgICByZXN0YXJ0OiBhbHdheXM="
  }
]

Navegar até o aplicativoBrowse to the app

Navegue até o aplicativo implantado em (http://<app-name>.azurewebsites.net).Browse to the deployed app at (http://<app-name>.azurewebsites.net). O aplicativo agora está usando o Banco de Dados do Azure para MySQL.The app is now using Azure Database for MySQL.

Aplicativo multicontêiner de exemplo no Aplicativo Web para Contêineres

Adicionar armazenamento persistenteAdd persistent storage

O multicontêiner agora está em execução no Aplicativo Web para Contêineres.Your multi-container is now running in Web App for Containers. No entanto, se você instalar o WordPress agora e reiniciar o aplicativo mais tarde, descobrirá que a instalação do WordPress não existe mais.However, if you install WordPress now and restart your app later, you'll find that your WordPress installation is gone. Isso acontece porque a configuração do Docker Compose atualmente aponta para um local de armazenamento dentro do contêiner.This happens because your Docker Compose configuration currently points to a storage location inside your container. Os arquivos instalados no contêiner não persistem além do reinício do aplicativo.The files installed into your container don't persist beyond app restart. Nesta seção, você adicionará um armazenamento persistente ao contêiner do WordPress.In this section, you'll add persistent storage to your WordPress container.

Configurar variáveis de ambienteConfigure environment variables

Para usar o armazenamento persistente, você habilitará essa configuração no Serviço de Aplicativo.To use persistent storage, you'll enable this setting within App Service. Para fazer essa alteração, use o comando az webapp config appsettings set no Cloud Shell.To make this change, use the az webapp config appsettings set command in Cloud Shell. As configurações do aplicativo diferenciam maiúsculas de minúsculas e são separadas por espaços.App settings are case-sensitive and space-separated.

az webapp config appsettings set --resource-group myResourceGroup --name <app-name> --settings WEBSITES_ENABLE_APP_SERVICE_STORAGE=TRUE

Após a criação da configuração do aplicativo, o Cloud Shell mostrará informações semelhantes ao exemplo a seguir:When the app setting has been created, Cloud Shell shows information similar to the following example:

[
  < JSON data removed for brevity. >
  {
    "name": "WORDPRESS_DB_NAME",
    "slotSetting": false,
    "value": "wordpress"
  },
  {
    "name": "WEBSITES_ENABLE_APP_SERVICE_STORAGE",
    "slotSetting": false,
    "value": "TRUE"
  }
]

Modifique o arquivo de configuraçãoModify configuration file

No Cloud Shell, digite nano docker-compose-wordpress.yml para abrir o editor de texto nano.In the Cloud Shell, type nano docker-compose-wordpress.yml to open the nano text editor.

A opção volumes mapeia o sistema de arquivos para um diretório dentro do contêiner.The volumes option maps the file system to a directory within the container. ${WEBAPP_STORAGE_HOME} é uma variável de ambiente no Serviço de Aplicativo mapeada para armazenamento persistente para o aplicativo.${WEBAPP_STORAGE_HOME} is an environment variable in App Service that is mapped to persistent storage for your app. Você usará essa variável de ambiente na opção de volumes para que os arquivos do WordPress sejam instalados no armazenamento persistente em vez do contêiner.You'll use this environment variable in the volumes option so that the WordPress files are installed into persistent storage instead of the container. Faça as modificações a seguir no arquivo:Make the following modifications to the file:

Na seção wordpress, adicione uma opção volumes para que seja semelhante ao código a seguir:In the wordpress section, add a volumes option so it looks like the following code:

version: '3.3'

services:
   wordpress:
     image: microsoft/multicontainerwordpress
     volumes:
      - ${WEBAPP_STORAGE_HOME}/site/wwwroot:/var/www/html
     ports:
       - "8000:80"
     restart: always

Atualizar aplicativo com nova configuraçãoUpdate app with new configuration

No Cloud Shell, reconfigure o aplicativo Web multicontêiner com o comando az webapp config container set.In Cloud Shell, reconfigure your multi-container web app with the az webapp config container set command. Não se esqueça de substituir <app-name> por um nome de aplicativo exclusivo.Don't forget to replace <app-name> with a unique app name.

az webapp config container set --resource-group myResourceGroup --name <app-name> --multicontainer-config-type compose --multicontainer-config-file docker-compose-wordpress.yml

Após a execução do comando, ele mostrará uma saída semelhante ao exemplo a seguir:After your command runs, it shows output similar to the following example:

[
  {
    "name": "WEBSITES_ENABLE_APP_SERVICE_STORAGE",
    "slotSetting": false,
    "value": "TRUE"
  },
  {
    "name": "DOCKER_CUSTOM_IMAGE_NAME",
    "value": "COMPOSE|dmVyc2lvbjogJzMuMycKCnNlcnZpY2VzOgogICBteXNxbDoKICAgICBpbWFnZTogbXlzcWw6NS43CiAgICAgdm9sdW1lczoKICAgICAgIC0gZGJfZGF0YTovdmFyL2xpYi9teXNxbAogICAgIHJlc3RhcnQ6IGFsd2F5cwogICAgIGVudmlyb25tZW50OgogICAgICAgTVlTUUxfUk9PVF9QQVNTV09SRDogZXhhbXBsZXBhc3MKCiAgIHdvcmRwcmVzczoKICAgICBkZXBlbmRzX29uOgogICAgICAgLSBteXNxbAogICAgIGltYWdlOiB3b3JkcHJlc3M6bGF0ZXN0CiAgICAgcG9ydHM6CiAgICAgICAtICI4MDAwOjgwIgogICAgIHJlc3RhcnQ6IGFsd2F5cwogICAgIGVudmlyb25tZW50OgogICAgICAgV09SRFBSRVNTX0RCX1BBU1NXT1JEOiBleGFtcGxlcGFzcwp2b2x1bWVzOgogICAgZGJfZGF0YTo="
  }
]

Navegar até o aplicativoBrowse to the app

Navegue até o aplicativo implantado em (http://<app-name>.azurewebsites.net).Browse to the deployed app at (http://<app-name>.azurewebsites.net).

O contêiner do WordPress agora está usando Banco de Dados do Azure para MySQL e armazenamento persistente.The WordPress container is now using Azure Database for MySQL and persistent storage.

Adicionar contêiner do RedisAdd Redis container

A 'imagem oficial' do WordPress não inclui as dependências para Redis.The WordPress 'official image' does not include the dependencies for Redis. Essas dependências e configurações adicionais necessárias para usar Redis com WordPress foram preparadas para você nesta imagem personalizada.These dependencies and additional configuration needed to use Redis with WordPress have been prepared for you in this custom image. Na prática, você adicionaria as alterações desejadas à sua própria imagem.In practice, you would add desired changes to your own image.

A imagem personalizada é baseada na 'imagem oficial' do WordPress do Hub do Docker.The custom image is based on the 'official image' of WordPress from Docker Hub. As alterações a seguir foram feitas nesta imagem personalizada para Redis:The following changes have been made in this custom image for Redis:

Adicione o contêiner do Redis na parte inferior do arquivo de configuração para que seja semelhante ao exemplo a seguir:Add the redis container to the bottom of the configuration file so it looks like the following example:

version: '3.3'

services:
   wordpress:
     image: microsoft/multicontainerwordpress
     ports:
       - "8000:80"
     restart: always

   redis:
     image: redis:3-alpine
     restart: always

Configurar variáveis de ambienteConfigure environment variables

Para usar o Redis, você habilitará essa configuração WP_REDIS_HOST no Serviço de Aplicativo.To use Redis, you'll enable this setting, WP_REDIS_HOST, within App Service. Esta é uma configuração necessária para WordPress comunicar-se com host do Redis.This is a required setting for WordPress to communicate with the Redis host. Para fazer essa alteração, use o comando az webapp config appsettings set no Cloud Shell.To make this change, use the az webapp config appsettings set command in Cloud Shell. As configurações do aplicativo diferenciam maiúsculas de minúsculas e são separadas por espaços.App settings are case-sensitive and space-separated.

az webapp config appsettings set --resource-group myResourceGroup --name <app-name> --settings WP_REDIS_HOST="redis"

Após a criação da configuração do aplicativo, o Cloud Shell mostrará informações semelhantes ao exemplo a seguir:When the app setting has been created, Cloud Shell shows information similar to the following example:

[
  < JSON data removed for brevity. >
  {
    "name": "WORDPRESS_DB_USER",
    "slotSetting": false,
    "value": "adminuser@<mysql-server-name>"
  },
  {
    "name": "WP_REDIS_HOST",
    "slotSetting": false,
    "value": "redis"
  }
]

Atualizar aplicativo com nova configuraçãoUpdate app with new configuration

No Cloud Shell, reconfigure o aplicativo Web multicontêiner com o comando az webapp config container set.In Cloud Shell, reconfigure your multi-container web app with the az webapp config container set command. Não se esqueça de substituir <app-name> por um nome de aplicativo exclusivo.Don't forget to replace <app-name> with a unique app name.

az webapp config container set --resource-group myResourceGroup --name <app-name> --multicontainer-config-type compose --multicontainer-config-file compose-wordpress.yml

Após a execução do comando, ele mostrará uma saída semelhante ao exemplo a seguir:After your command runs, it shows output similar to the following example:

[
  {
    "name": "DOCKER_CUSTOM_IMAGE_NAME",
    "value": "COMPOSE|dmVyc2lvbjogJzMuMycKCnNlcnZpY2VzOgogICBteXNxbDoKICAgICBpbWFnZTogbXlzcWw6NS43CiAgICAgdm9sdW1lczoKICAgICAgIC0gZGJfZGF0YTovdmFyL2xpYi9teXNxbAogICAgIHJlc3RhcnQ6IGFsd2F5cwogICAgIGVudmlyb25tZW50OgogICAgICAgTVlTUUxfUk9PVF9QQVNTV09SRDogZXhhbXBsZXBhc3MKCiAgIHdvcmRwcmVzczoKICAgICBkZXBlbmRzX29uOgogICAgICAgLSBteXNxbAogICAgIGltYWdlOiB3b3JkcHJlc3M6bGF0ZXN0CiAgICAgcG9ydHM6CiAgICAgICAtICI4MDAwOjgwIgogICAgIHJlc3RhcnQ6IGFsd2F5cwogICAgIGVudmlyb25tZW50OgogICAgICAgV09SRFBSRVNTX0RCX1BBU1NXT1JEOiBleGFtcGxlcGFzcwp2b2x1bWVzOgogICAgZGJfZGF0YTo="
  }
]

Navegar até o aplicativoBrowse to the app

Navegue até o aplicativo implantado em (http://<app-name>.azurewebsites.net).Browse to the deployed app at (http://<app-name>.azurewebsites.net).

Conclua as etapas e instale o WordPress.Complete the steps and install WordPress.

Conecte o WordPress ao RedisConnect WordPress to Redis

Entre no administrador do WordPress. Na navegação esquerda, selecione Plug-ins, e, em seguida, selecione Plug-ins Instalados.Sign in to WordPress admin. In the left navigation, select Plugins, and then select Installed Plugins.

Selecione Plug-ins do WordPress

Mostrar todos os plug-ins aquiShow all plugins here

Na página de plug-ins, localize Cache de Objetos do Redis e clique em Ativar.In the plugins page, find Redis Object Cache and click Activate.

Ativar Redis

Clique em Configurações.Click on Settings.

Clique em configurações

Clique no botão Habilitar Cache de Objetos.Click the Enable Object Cache button.

Clicar no botão "Habilitar Cache de Objetos"

O WordPress conecta-se ao servidor de Redis.WordPress connects to the Redis server. A conexão status aparece na mesma página.The connection status appears on the same page.

O WordPress conecta-se ao servidor de Redis.

Parabéns, você conectou o WordPress ao Redis.Congratulations, you've connected WordPress to Redis. O aplicativo pronto para produção agora está usando Banco de Dados do Azure para MySQL, armazenamento persistente e Redis.The production-ready app is now using Azure Database for MySQL, persistent storage, and Redis. Agora é possível escalar horizontalmente o Plano do Serviço de Aplicativo para várias instâncias.You can now scale out your App Service Plan to multiple instances.

Localizar logs do contêiner do DockerFind Docker Container logs

Se você tiver problemas ao usar vários contêineres, poderá acessar os logs do contêiner navegando até: https://<app-name>.scm.azurewebsites.net/api/logs/docker.If you run into issues using multiple containers, you can access the container logs by browsing to: https://<app-name>.scm.azurewebsites.net/api/logs/docker.

Você verá uma saída semelhante ao exemplo a seguir:You'll see output similar to the following example:

[
   {
      "machineName":"RD00XYZYZE567A",
      "lastUpdated":"2018-05-10T04:11:45Z",
      "size":25125,
      "href":"https://<app-name>.scm.azurewebsites.net/api/vfs/LogFiles/2018_05_10_RD00XYZYZE567A_docker.log",
      "path":"/home/LogFiles/2018_05_10_RD00XYZYZE567A_docker.log"
   }
]

Você verá um log para cada contêiner e um log adicional para o processo pai.You see a log for each container and an additional log for the parent process. Copie o respectivo valor href no navegador para exibir o log.Copy the respective href value into the browser to view the log.

Limpar a implantaçãoClean up deployment

Depois que o script de exemplo foi executado, o comando a seguir pode ser usado para remover o grupo de recursos e todos os recursos associados a ele.After the sample script has been run, the following command can be used to remove the resource group and all resources associated with it.

az group delete --name myResourceGroup

Próximas etapasNext steps

Neste tutorial, você aprendeu como:In this tutorial, you learned how to:

  • Converter uma configuração do Docker Compose para trabalhar com Aplicativo Web para ContêineresConvert a Docker Compose configuration to work with Web App for Containers
  • Implantar um aplicativo multicontêiner no AzureDeploy a multi-container app to Azure
  • Adicionar configurações de aplicativoAdd application settings
  • Usar armazenamento persistente para contêineresUse persistent storage for your containers
  • Conectar-se ao Banco de Dados do Azure para MySQLConnect to Azure Database for MySQL
  • Solucionar problemas de errosTroubleshoot errors

Prossiga para o próximo tutorial para saber como mapear um nome DNS personalizado para o seu aplicativo.Advance to the next tutorial to learn how to map a custom DNS name to your app.

Se preferir, confira outros recursos:Or, check out other resources: