Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O Serviço de Aplicativo do Azure fornece pilhas de aplicativos predefinidas, como ASP.NET ou Node.js, no Windows. Essas stacks de aplicativos são executadas no IIS. O ambiente Windows pré-configurado restringe o sistema operacional contra:
- Acesso administrativo.
- Instalações de software.
- Alterações no cache de assembly global.
Para obter mais informações, consulte a funcionalidade do sistema operacional no App Service.
É possível implantar, a partir do Visual Studio, uma imagem do Windows configurada de maneira personalizada para fazer as alterações necessárias ao seu SO. Isso facilita a migração de um aplicativo local que requer uma configuração personalizada de so e software. Este tutorial demonstra como migrar para o App Service um aplicativo ASP.NET que usa fontes personalizadas instaladas na biblioteca de fontes do Windows. Implante uma imagem do Windows configurada de forma personalizada do Visual Studio para o Registro de Contêiner do Azure e, em seguida, execute-a no App Service.
Pré-requisitos
- Cadastre-se no Docker Hub.
- Instalar Docker for Windows.
- Configurar o Docker para executar contêineres do Windows.
-
Instale o Visual Studio 2022 com as cargas de trabalho de desenvolvimento do ASP.NET e para a Web e desenvolvimento do Azure. Se você já tiver o Visual Studio 2022 instalado:
- Instale as atualizações mais recentes no Visual Studio selecionando Ajuda>Verificar Atualizações.
- Adicione os workloads no Visual Studio selecionando Ferramentas>Obter Ferramentas e Recursos....
Configure o aplicativo localmente
Baixar o exemplo
Nesta etapa, você deve configurar o projeto local do .NET.
- Baixar o projeto de exemplo.
- Extraia (descompacte) o arquivo custom-font-win-container-master.zip.
O projeto de amostra contém um aplicativo ASP.NET simples que usa uma fonte personalizada que está instalada na biblioteca de fontes do Windows. Não é necessário instalar fontes. No entanto, a amostra é um exemplo de aplicativo integrado ao sistema operacional subjacente. Para migrar esse aplicativo para o App Service, você rearquiteta seu código para remover a integração ou migra o aplicativo no estado em que se encontra em um contêiner personalizado do Windows.
Instalar a fonte
No Windows Explorer, acesse custom-font-win-container-master/CustomFontSample, clique com o botão direito do mouse FrederickatheGreat-Regular.ttf e selecione Instalar.
Essa fonte está publicamente disponível no Google Fonts.
Abra o aplicativo
Abra o arquivo custom-font-win-container-master/CustomFontSample.sln no Visual Studio.
Selecione Ctrl+F5 para executar o aplicativo sem depuração. O aplicativo é exibido no navegador padrão.
Como o aplicativo usa uma fonte instalada, o aplicativo não pode ser executado na área restrita do App Service. No entanto, você pode implantá-lo usando um contêiner do Windows, pois pode instalar a fonte no contêiner do Windows.
Configurar o contêiner do Windows
No Gerenciador de Soluções, clique com o botão direito do mouse no projeto CustomFontSample e selecione Adicionar>Suporte de orquestração de contêiner.
Selecione Docker Compose>OK.
Seu projeto agora está definido para executar em um contêiner do Windows. Um Dockerfile é adicionado ao projeto CustomFontSample e um projeto docker-compose é adicionado à solução.
No Gerenciador de Soluções, abra o Dockerfile.
Você precisa usar uma imagem pai compatível. Altere a imagem pai substituindo a linha FROM pelo código a seguir:
FROM mcr.microsoft.com/dotnet/framework/aspnet:4.7.2-windowsservercore-ltsc2019
Adicione a seguinte linha ao final do arquivo e salve o arquivo:
RUN ${source:-obj/Docker/publish/InstallFont.ps1}
Você pode encontrar InstallFont.ps1 no projeto CustomFontSample. É um script simples que instala a fonte. Você pode encontrar uma versão mais complexa do script na Galeria do PowerShell.
Observação
Para testar o contêiner do Windows localmente, verifique se o Docker está em execução no computador local.
Publicar no Registro de Contêiner do Azure
O Registro de Contêiner do Azure pode armazenar suas imagens para implantações de contêiner. Você pode configurar o App Service para usar imagens hospedadas no Container Registry.
Abrir a janela Publicar
No Gerenciador de Soluções, clique com o botão direito do mouse no projeto CustomFontSample e selecione Publicar.
Criar e publicar o registro
Na janela Publicar , selecione o Azure e selecione Avançar.
Selecione Registro de Contêiner do Azure e selecione Avançar.
Selecione a assinatura em que você deseja publicar o registro e, em seguida, selecione Criar novo.
Entrar com uma conta do Azure
Na janela Registro de Contêiner do Azure, selecione Adicionar uma conta e entre com sua conta do Azure. Se você já estiver conectado, selecione a conta que contém a assinatura desejada na lista suspensa.
Configurar o Registro
Configure o novo registro de contêineres usando os valores sugeridos na tabela a seguir como guia. Quando terminar, selecione Criar.
| Configuração | Valor sugerido |
|---|---|
| Prefixo DNS | Mantenha o nome de registro gerado ou altere-o para outro nome exclusivo. |
| Grupo de recursos | Selecione New, insira myResourceGroup e selecione OK. |
| SKU | Básico. Para obter mais informações, consulte Níveis de preços. |
| Local do Registro | Oeste da Europa |
Selecione Concluir.
Uma janela de terminal abre e exibe o progresso da implantação de imagem. Aguarde até que a implantação seja concluída.
Entrar no Azure
Entre no portal do Azure.
Criar um aplicativo Web
Selecione Criar um recurso e, em seguida, selecione Criar em Aplicativo Web.
Configurar o básico do aplicativo
Na guia Noções básicas , defina as configurações usando a tabela a seguir como guia.
| Configuração | Valor sugerido |
|---|---|
| Assinatura | Verifique se a assinatura correta foi selecionada. |
| Grupo de recursos | Selecione Criar novo, insira myResourceGroup e selecione OK. |
| Nome | Insira um nome exclusivo. A URL do aplicativo Web é https://<app-name>.azurewebsites.net, em que <app-name> é o nome do aplicativo. |
| Publicar | Contêiner |
| Sistema operacional | Windows |
| Região | Oeste da Europa |
| Plano Windows | Selecione Criar novo, insira myAppServicePlan e, em seguida, selecione OK. |
A guia Noções Básicas deve ser semelhante a esta:
Configurar o contêiner do Windows
Na guia Contêiner, configure seu contêiner personalizado do Windows, conforme mostrado na tabela a seguir, e selecione Revisar + criar.
| Configuração | Valor sugerido |
|---|---|
| Origem da Imagem | Registro de Contêiner do Azure |
| Registro | Selecione o registry criado anteriormente. |
| Imagem | customfontsample |
| Tag | mais recente |
Criação completa do aplicativo
Selecione Criar e aguarde o Azure criar os recursos necessários.
Navegue até o aplicativo Web
Quando a implantação for concluída, uma mensagem de notificação será exibida:
Selecione Ir para o recurso.
Na página do aplicativo, selecione o link abaixo de URL.
Uma nova página do navegador é aberta com a página a seguir:
Aguarde alguns minutos e tente novamente até acessar a home page com a fonte esperada:
Parabéns! Você migrou um aplicativo ASP.NET para o App Service em um contêiner do Windows.
Exibir os logs de inicialização do contêiner
Pode levar algum tempo para o contêiner do Windows carregar. Para conferir o progresso, vá para a URL a seguir. (substitua <app-name> pelo nome do seu aplicativo).
https://<app-name>.scm.azurewebsites.net/api/logstream
Os logs em streaming têm esta aparência:
14/09/2018 23:16:19.889 INFO - Site: fonts-win-container - Creating container for image: customfontsample20180914115836.azurecr.io/customfontsample:latest.
14/09/2018 23:16:19.928 INFO - Site: fonts-win-container - Create container for image: customfontsample20180914115836.azurecr.io/customfontsample:latest succeeded. Container Id 329ecfedbe370f1d99857da7352a7633366b878607994ff1334461e44e6f5418
14/09/2018 23:17:23.405 INFO - Site: fonts-win-container - Start container succeeded. Container: 329ecfedbe370f1d99857da7352a7633366b878607994ff1334461e44e6f5418
14/09/2018 23:17:28.637 INFO - Site: fonts-win-container - Container ready
14/09/2018 23:17:28.637 INFO - Site: fonts-win-container - Configuring container
14/09/2018 23:18:03.823 INFO - Site: fonts-win-container - Container ready
14/09/2018 23:18:03.823 INFO - Site: fonts-win-container - Container start-up and configuration completed successfully
O Serviço de Aplicativo do Azure usa a tecnologia de contêiner do Docker para hospedar imagens internas e imagens personalizadas. Para ver uma lista de imagens internas, execute o comando da CLI do Azure, az webapp list-runtimes --os linux. Se essas imagens não atenderem às suas necessidades, você poderá criar e implantar uma imagem personalizada.
Observação
Seu contêiner deve ser direcionado para a arquitetura x86-64. O ARM64 não é suportado.
Neste tutorial, você aprenderá a:
- Efetuar push de uma imagem personalizada do Docker para o Registro de Contêiner do Azure.
- Implantar a imagem personalizada no App Service.
- Configurar variáveis de ambiente.
- Efetuar pull da imagem no App Service usando uma identidade gerenciada.
- Acessar logs de diagnóstico.
- Habilite CI/CD do Container Registry para o App Service.
- Conectar-se ao contêiner usando SSH.
Concluir este tutorial pode gerar uma pequena cobrança na sua conta do Azure pelo Registro de Contêiner e pode haver custos adicionais se você hospedar o contêiner por mais de um mês.
Configurar o seu ambiente inicial
Este tutorial exige a versão 2.0.80 ou posterior da CLI do Azure. Se você está usando o Azure Cloud Shell, a última versão já está instalada.
- Verifique se você tem uma conta do Azure com uma assinatura ativa. Crie uma conta gratuitamente.
Use o ambiente Bash no Azure Cloud Shell. Para obter mais informações, confira Introdução ao Azure Cloud Shell.
Se preferir executar os comandos de referência da CLI localmente, instale a CLI do Azure. Para execuções no Windows ou no macOS, considere executar a CLI do Azure em um contêiner do Docker. Para obter mais informações, confira Como executar a CLI do Azure em um contêiner do Docker.
Se estiver usando uma instalação local, entre com a CLI do Azure usando o comando az login. Para concluir o processo de autenticação, siga as etapas exibidas no terminal. Para obter outras opções de entrada, consulte Autenticar no Azure usando a CLI do Azure.
Quando solicitado, instale a extensão da CLI do Azure no primeiro uso. Para obter mais informações sobre extensões, confira Usar e gerenciar extensões com a CLI do Azure.
Execute az version para localizar a versão e as bibliotecas dependentes que estão instaladas. Para fazer a atualização para a versão mais recente, execute az upgrade.
- Instale o Docker, que você usa para criar imagens do Docker. A instalação do Docker pode exigir a reinicialização do computador.
Após instalar o Docker, abra uma janela de terminal e verifique se o docker está instalado:
docker --version
Clonar ou baixar o aplicativo de exemplo
Você pode obter os arquivos de exemplo deste tutorial por meio de clone do Git ou download.
Clonar o repositório usando o Git Bash
Clone o repositório de exemplo:
git clone https://github.com/Azure-Samples/docker-django-webapp-linux.git --config core.autocrlf=input
Inclua o argumento --config core.autocrlf=input para garantir terminações de linha adequadas nos arquivos que são usados no contêiner do Linux.
Em seguida, navegue até a pasta:
cd docker-django-webapp-linux
Baixar o ZIP do GitHub
Em vez de usar o clone do Git, você pode ir para https://github.com/Azure-Samples/docker-django-webapp-linux e selecionar Código>Local>Download ZIP.
Descompacte o arquivo ZIP em uma pasta chamada docker-django-webapp-linux.
Em seguida, abra uma janela do terminal na pasta docker-django-webapp-linux.
Prepare o recipiente da amostra
O terminal de navegador mais recente e az webapp exec fornecem acesso autenticado a contêineres Linux em execução sem exigir um servidor SSH ou uma senha SSH embutida na imagem. O WebSSH legado do Kudu e o acesso az webapp ssh ainda podem exigir um servidor SSH. O repositório de exemplo contém uma configuração SSH legada. Antes de criar a imagem, substitua o conteúdo do Dockerfile pela seguinte configuração apenas para aplicativo:
FROM tiangolo/uwsgi-nginx-flask:python3.6
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt --no-cache-dir
ADD . /code/
COPY init.sh /usr/local/bin/
RUN chmod u+x /usr/local/bin/init.sh
EXPOSE 8000
ENTRYPOINT ["init.sh"]
Substitua o conteúdo de init.sh pelo seguinte script, mantendo as terminações de linha do Linux:
#!/bin/bash
set -e
exec python /code/manage.py runserver 0.0.0.0:8000
Remova o arquivo sshd_config legado da sua pasta local de exemplos para ADD . /code/ não copiá-lo para a imagem.
O Dockerfile instala as dependências do app, copia o app e o script de inicialização e expõe a porta do aplicativo. O ponto de entrada inicia apenas a aplicação Python. Essas mudanças removem a instalação e credenciais SSH do exemplo. A imagem inclui /bin/bash para o terminal do navegador mais recente e o shell padrão az webapp exec .
Criar e testar a imagem localmente
Observação
O Hub do Docker impõe cotas ao número de pulls anônimos por IP e ao número de pulls autenticados por usuário gratuito. Se você observar que seus pulls do Docker Hub estão sendo limitados, tente executar docker login se você ainda não estiver conectado.
Execute o seguinte comando para gerar a imagem:
docker build --tag appsvc-tutorial-custom-image .Teste se o build funciona executando o contêiner do Docker localmente:
docker run -it -p 8000:8000 appsvc-tutorial-custom-imageEsse
docker runcomando especifica a porta usando o-pargumento e inclui o nome da imagem.-itpermite que você interrompa usando Ctrl+C.Dica
Se você estiver executando no Windows e vir o erro *standard_init_linux.go:211: exec do processo do usuário causou "nenhum arquivo ou diretório desse tipo", o arquivo init.sh contém terminações de linha CRLF em vez das terminações de LF esperadas. Esse erro ocorre se você usou o Git para clonar o repositório de exemplo, mas omitiu o parâmetro
--config core.autocrlf=input. Nesse caso, clone o repositório novamente com o argumento--config. Você também poderá ver o erro se tiver editado init.sh e o salvado com terminações CRLF. Nesse caso, salve o arquivo novamente somente com as terminações LF.Navegue para
http://localhost:8000para verificar se o aplicativo Web e o contêiner estão funcionando corretamente.
Criar uma identidade gerenciada atribuída ao usuário
O Serviço de Aplicativo pode usar uma identidade gerenciada padrão ou uma identidade gerenciada atribuída pelo usuário para se autenticar com um registro de contêiner. Neste tutorial, você usará uma identidade gerenciada atribuída pelo usuário.
Execute o comando az group create para criar um grupo de recursos:
az group create --name msdocs-custom-container-tutorial --location westeuropeVocê pode alterar o valor de
--locationpara especificar uma região perto de você.Crie uma identidade gerenciada no grupo de recursos:
az identity create --name myID --resource-group msdocs-custom-container-tutorial
Criar um registro de contêineres
Crie um registro de contêineres usando o comando
az acr createa seguir. Substitua<registry-name>por um nome exclusivo para o registro do sistema. O nome deve conter apenas letras e números e ser exclusivo em todo o Azure.az acr create --name <registry-name> --resource-group msdocs-custom-container-tutorial --sku Basic --admin-enabled trueO parâmetro
--admin-enabledpermite enviar imagens por push para o registro usando credenciais administrativas.Recupere as credenciais administrativas executando o comando
az credential acr show:az acr credential show --resource-group msdocs-custom-container-tutorial --name <registry-name>A saída JSON desse comando fornece duas senhas junto com o nome de usuário do registro.
Enviar por push a imagem de exemplo para o Container Registry
Nesta seção, você envia a imagem por push para o Container Registry, que é usado pelo App Service posteriormente.
No terminal local em que você criou a imagem de exemplo, use o comando
docker loginpara fazer login no registro de contêiner:docker login <registry-name>.azurecr.io --username <registry-username>Substitua
<registry-name>e<registry-username>por valores das etapas anteriores. Quando solicitado, digite uma das senhas da seção anterior.Use o mesmo nome do Registro em todas as etapas restantes desta seção.
Quando o login for bem-sucedido, marque sua imagem local do Docker no registro:
docker tag appsvc-tutorial-custom-image <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latestUse o comando
docker pushpara enviar a imagem ao registro:docker push <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latestO carregamento da imagem pela primeira vez pode levar alguns minutos porque inclui a imagem base. Os carregamentos subsequentes normalmente são mais rápidos.
Enquanto estiver aguardando, você pode concluir as etapas na próxima seção para configurar o App Service para implantar usando o registry.
Autorizar a identidade gerenciada para o registro
A identidade gerenciada que você criou ainda não tem autorização para efetuar pull do registro de contêiner. Nesta etapa, você habilita a autorização.
Recupere o ID do principal para a identidade gerenciada:
principalId=$(az identity show --resource-group msdocs-custom-container-tutorial --name myID --query principalId --output tsv)Recupere a ID do recurso para o registro de contêiner:
registryId=$(az acr show --resource-group msdocs-custom-container-tutorial --name <registry-name> --query id --output tsv)Conceda à identidade gerenciada permissão para acessar o registro de contêiner:
az role assignment create --assignee $principalId --scope $registryId --role "AcrPull"Para obter mais informações sobre essas permissões, confira O que é o controle de acesso baseado em função do Azure?.
Criar o aplicativo Web
Crie um plano do App Service usando o comando
az appservice plan create:az appservice plan create --name myAppServicePlan --resource-group msdocs-custom-container-tutorial --is-linuxUm plano do App Service corresponde à máquina virtual que hospeda o aplicativo Web. Por padrão, o comando anterior usa uma camada de preço B1 econômica que é gratuita no primeiro mês. Você pode especificar o nível usando o parâmetro
--sku.Crie o aplicativo Web com o comando
az webapp create:az webapp create --resource-group msdocs-custom-container-tutorial --plan myAppServicePlan --name <app-name> --deployment-container-image-name <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latestSubstitua
<app-name>por um nome para o aplicativo Web. O nome precisa ser exclusivo em todo o Azure. Além disso, substitua<registry-name>pelo nome do registro da seção anterior.Dica
Você pode recuperar as configurações de contêiner do aplicativo Web a qualquer momento com o comando
az webapp config container show --name <app-name> --resource-group msdocs-custom-container-tutorial. A imagem é especificada na propriedadeDOCKER_CUSTOM_IMAGE_NAME. Quando o aplicativo Web é implantado por meio do Azure DevOps ou dos modelos do Azure Resource Manager, a imagem também pode aparecer em uma propriedade chamadaLinuxFxVersion. Ambas as propriedades têm a mesma finalidade. Se ambas estiverem presentes na configuração do aplicativo Web,LinuxFxVersionterá precedência.
Configurar o aplicativo Web
Nesta etapa, você configura o aplicativo Web da seguinte maneira:
- Configure o aplicativo para enviar solicitações para a porta 8000. O contêiner de amostra está escutando na porta 8000 para solicitações da Web.
- Configure seu aplicativo para usar a identidade gerenciada para efetuar pull de imagens do registro de contêiner.
- Configure a implantação contínua a partir do registro de contêineres. (Cada push de imagem para o registro disparará seu aplicativo para efetuar pull da nova imagem.) Esta etapa não é necessária para configurar seu aplicativo Web para efetuar pull do registro de contêiner, mas pode notificar o aplicativo Web quando uma nova imagem é enviada por push para o registro. Se você não concluir essa etapa, será necessário disparar manualmente um pull de imagem reiniciando o aplicativo Web.
Use
az webapp config appsettings setpara definir a variável de ambienteWEBSITES_PORTconforme esperado pelo código do aplicativo:az webapp config appsettings set --resource-group msdocs-custom-container-tutorial --name <app-name> --settings WEBSITES_PORT=8000Substitua
<app-name>pelo nome usado na etapa anterior.Habilite a identidade gerenciada atribuída pelo usuário no aplicativo Web usando o
az webapp identity assigncomando:id=$(az identity show --resource-group msdocs-custom-container-tutorial --name myID --query id --output tsv) az webapp identity assign --resource-group msdocs-custom-container-tutorial --name <app-name> --identities $idSubstitua
<app-name>pelo nome usado na etapa anterior.Configure seu aplicativo para efetuar pull do Container Registry usando identidades gerenciadas.
appConfig=$(az webapp config show --resource-group msdocs-custom-container-tutorial --name <app-name> --query id --output tsv) az resource update --ids $appConfig --set properties.acrUseManagedIdentityCreds=TrueSubstitua
<app-name>pelo nome usado na etapa anterior.Defina o ID do cliente que seu aplicativo Web usa para fazer pull do Container Registry. Essa etapa não será necessária se você usar a identidade gerenciada atribuída pelo sistema.
clientId=$(az identity show --resource-group msdocs-custom-container-tutorial --name myID --query clientId --output tsv) az resource update --ids $appConfig --set properties.AcrUserManagedIdentityID=$clientIdHabilite CI/CD no App Service.
cicdUrl=$(az webapp deployment container config --enable-cd true --name <app-name> --resource-group msdocs-custom-container-tutorial --query CI_CD_URL --output tsv)CI_CD_URLé uma URL que o Serviço de Aplicativo gera para você. O registro deve usar essa URL para notificar o App Service de que ocorreu um push de imagem. Ele na verdade não cria o webhook para você.Crie um webhook no registro de contêiner. Use o CI_CD_URL que você obteve na última etapa.
az acr webhook create --name appserviceCD --registry <registry-name> --uri $cicdUrl --actions push --scope appsvc-tutorial-custom-image:latestPara testar se o webhook está configurado corretamente, faça ping no webhook e veja se você obtém uma resposta 200 OK.
eventId=$(az acr webhook ping --name appserviceCD --registry <registry-name> --query id --output tsv) az acr webhook list-events --name appserviceCD --registry <registry-name> --query "[?id=='$eventId'].eventResponseMessage"Dica
Para ver todas as informações sobre todos os eventos de webhook, remova o parâmetro
--query.Se você estiver transmitindo o log de contêiner, deverá ver uma mensagem
Starting container for siteapós o ping do webhook, porque o webhook dispara a reinicialização do aplicativo.
Navegue até o aplicativo Web
Para testar o aplicativo, navegue até https://<app-name>.azurewebsites.net. Substitua <app-name> pelo nome do aplicativo Web.
Na primeira vez que você tentar acessar o aplicativo, poderá demorar algum tempo até o aplicativo responder porque o Serviço de Aplicativo precisará efetuar pull da imagem inteira do registro. Se o navegador expirar, bastará atualizar a página. Depois que a imagem inicial for baixada, os testes subsequentes serão executados muito mais rapidamente.
Acessar logs de diagnóstico
Enquanto você aguarda o App Service efetuar pull da imagem, é interessante ver exatamente o que o App Service está fazendo ao transmitir os logs do contêiner para o seu terminal.
Ativar o registro em log de contêiner:
az webapp log config --name <app-name> --resource-group msdocs-custom-container-tutorial --docker-container-logging filesystemHabilitar o fluxo de log:
az webapp log tail --name <app-name> --resource-group msdocs-custom-container-tutorialSe você não vir os logs do console imediatamente, verifique novamente após 30 segundos.
Você também pode inspecionar os arquivos de log em um navegador acessando
https://<app-name>.scm.azurewebsites.net/api/logs/docker.Para interromper o streaming de log a qualquer momento, selecione Ctrl+C.
Modificar o código do aplicativo e reimplantar
Nesta seção, você faz uma alteração no código do aplicativo Web, recompila a imagem e a envia para o seu registro de contêiner. Em seguida, o App Service extrai automaticamente a imagem atualizada do registro para atualizar o aplicativo Web em execução.
Na pasta local docker-django-webapp-linux, abra o arquivo app/templates/app/index.html.
Altere o primeiro elemento HTML para corresponder ao código a seguir.
<nav class="navbar navbar-inverse navbar-fixed-top"> <div class="container"> <div class="navbar-header"> <a class="navbar-brand" href="#">Azure App Service - Updated Here!</a> </div> </div> </nav>Salve suas alterações.
Vá para a pasta docker-django-webapp-linux e recompile a imagem:
docker build --tag appsvc-tutorial-custom-image .Atualize a tag da imagem para
latest:docker tag appsvc-tutorial-custom-image <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latestSubstitua
<registry-name>pelo nome do seu registry.Efetue push da imagem para o registry:
docker push <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latestQuando o push da imagem terminar, o webhook notificará o App Service sobre o push, e o App Service tentará efetuar o pull da imagem atualizada. Aguarde alguns minutos e verifique se a atualização foi implantada acessando
https://<app-name>.azurewebsites.net.
Conectar-se ao contêiner usando o SSH
Quando o container está rodando, você pode acessá-lo através do proxy autenticado Kudu do App Service usando o terminal mais recente no navegador ou az webapp exec. Você não precisa instalar ou iniciar um servidor SSH na imagem para essas opções.
Para pré-requisitos de acesso e controles de app ou slot, veja Abrir um shell de contêiner (SSH) e executar comandos.
Abrir a conexão SSH para o contêiner
Use o CLI do Azure 2.90.0 ou posterior e faça login na sua conta Azure. Abra um shell interativo no seu terminal local com o comando de pré-visualização
az webapp exec:az webapp exec --resource-group msdocs-custom-container-tutorial --name <app-name>Analise os processos rodando dentro do aplicativo usando
top, se estiver disponível na imagem.
Para execução de comandos em segundo plano em vez de uma sessão interativa, veja Executar comandos sem uma sessão interativa. Aceitação de solicitação não confirma que um comando foi concluído com sucesso.
Limpar os recursos
Os recursos que você criou neste artigo podem gerar custos contínuos. Para limpar os recursos, você só precisa excluir o grupo de recursos que os contém:
az group delete --name msdocs-custom-container-tutorial
Próximas etapas
O que você aprendeu:
- Publicar uma imagem personalizada em um registro privado de contêineres.
- Implantar a imagem personalizada no App Service.
- Atualizar e reimplantar a imagem.
- Acessar logs de diagnóstico.
- Conectar-se ao contêiner usando SSH.
- Envie uma imagem personalizada do Docker para o Container Registry.
- Implantar a imagem personalizada no App Service.
- Configurar variáveis de ambiente.
- Efetuar pull da imagem no App Service usando uma identidade gerenciada.
- Acessar logs de diagnóstico.
- Habilite CI/CD do Container Registry para o App Service.
- Conectar-se ao contêiner usando SSH.
Vá para o próximo tutorial:
Ou confira outros recursos: