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:
new_webapp_docker_compose

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.

wp_setup

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
    weapp_appsettings

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:
webapp_redis

        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:

Espero que essa dica ajude bastante nos estudos e nos vemos nos próximos artigos