Azure App Service - Multi-Container (preview)
Olá pessoALL,
Recentemente foi anunciado o preview do suporta a múltiplos containers no Azure App Service.
Essa feature é muito interessante, principalmente para prototipação rápida, por permite rodarmos mais de um container no mesmo app service ou simplesmente portarmos nosso docker-compose
direto para o Azure.
Quer ficar por dentro de todas as novidades do Azure? Se inscreva no nosso canal, lives todas as terças às 21:00 com as principais novidades da semana.
Caso de Uso
O principal caso de uso, na minha opnião, é o deploy de uma aplicação front-end e o uso de um cache como o Redis para dar mais velocidade na aplicação, outro caso de uso interessante seria a validação de uma arquitetura CQRS por exemplo, como o deploy de um container com a aplicação web e outro container que processe nossos eventos.
Exemplos
Vou deixar aqui 2 exemplos o clássico wordpress com um banco de dados mysql e uma webapp utilizando redis.
1 - Wordpress + MySql
Crie um novo app service seguindo a configuração da imagem a seguir:
O arquivo docker-compose.yml
:
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:
Pronto! Nosso WP está no ar, abra o endereço do seu webapp e a tela de configuração do WP deve carregar, no primeiro acesso pode levar alguns minutos até toda a configuração terminar dependendo do tamanho do seu ServicePlan, caso ocorra algum timeout, não se preocupe, atualize o browser e tudo deve funcionar corretamente.
Persistindo Banco de Dados
Até aqui tudo tranquilo e espero que você esteja tão feliz quanto eu com as possibilidades que se abrem com mais esse recurso do App Service. Mas temos mais uma configuração que precisamos nos atentar: Persistência dos arquivos.
Como os containers são descartáveis em cada restart do nosso container corremos o risco de perdermos os dados do nosso MySql.
Para corrigir isso, precisamos habilitar a persistência dos dados do container e linkar o diretório do nosso AppService com o container:
1 - Nas configurações do app service, adicione a seguinte configuração:
- nome:
WEBSITES_ENABLE_APP_SERVICE_STORAGE
- valor:
true
2 - Modifique o arquivo docker-compose
:
version: '3.3'
services:
db:
image: mysql:5.7
volumes:
- ${WEBAPP_STORAGE_HOME}/mysql:/var/lib/mysql
restart: always
Agora sim, temos nosso blog rodando e com persistência de dados.
2 - WebApp + redis
Nesse próximo exemplo, vamos criar uma aplicação web que acessa um cache redis na mesma rede. O processo é o mesmo, vamos criar um novo web app e fazer upload do nosso docker-compose
:
version: '3'
services:
web:
image: appsvcsample/flaskapp
ports:
- '80:80'
redis:
image: 'redis:alpine'
Pronto! Nossa web app agora pode acessar o Redis localmente.
Referências:
- https://blogs.msdn.microsoft.com/appserviceteam/2018/05/07/multi-container/
- https://docs.microsoft.com/en-us/azure/app-service/containers/tutorial-multi-container-app#add-persistent-storage
Espero que essa dica ajude bastante nos estudos e nos vemos nos próximos artigos