Docker para Desenvolvedores .NET - Guia de Referência

Image for post
Image for post

Este post agrupa os diversos conteúdos que venho produzindo sobre o uso de containers Docker em conjunto com o .NET Core, o ASP.NET Core e serviços que integram o Microsoft Azure.

Não se trata de um material definitivo, já que pretendo manter este post sempre que possível atualizado com novos artigos, apresentações e vídeos.

E aproveito este post para deixar aqui um convite.

Dia 06/02/2019 (quarta-feira) às 21:30 — horário de Brasília — teremos mais um evento online no Canal .NET. Desta vez farei uma apresentação sobre o presente e o futuro do .NET Core e do ASP.NET Core, cobrindo as versões 2.2 e 3 (esta última ainda em Preview). Além disso mostrarei novidades envolvendo o Visual Studio 2019 e o C# 8.0.

Para efetuar a sua inscrição acesse a página do evento no Meetup. A transmissão acontecerá via YouTube, em um link a ser divulgado em breve.

Primeiros passos na utilização de containers Docker

O vídeo do canal Coding Night a seguir traz uma introdução sobre o uso de Docker e containers, além de apresentar exemplos simples de adoção deste tipo de tecnologia com o .NET Core e o SQL Server 2017:

Há ainda uma apresentação, que venho realizando seguidamente em eventos universitários:

Gerenciando containers via interface gráfica/browser

O Portainer é uma solução para gerenciamento de containers e imagens Docker a partir de um web browser. O artigo a seguir traz uma demonstração prática disto:

Docker + Portainer: gerenciando containers a partir de um browser

Esta tecnologia também já foi abordada no seguinte vídeo do Canal .NET:

Descomplicando a montagem de ambientes de Desenvolvimento e Testes com Docker

Além do suporte ao .NET Core, o Docker também pode ser utilizado em conjunto com soluções como SQL Server 2017, MongoDB e Redis. Os slides a seguir são de uma apresentação que realizei durante o QAXperience 2018, descrevendo justamente o uso destas tecnologias de bancos de dados a partir de containers:

Os artigos a seguir também abordam esse tipo de prática:

.NET + SQL Server 2017 — Parte 1: executando o SQL Server em um container Docker

SQL Server 2019 CTP 2.0: criando um ambiente para testes com Docker e Ubuntu

Docker + NoSQL: executando o MongoDB e o Redis a partir de containers

E os seguintes vídeos de apresentações online que fiz para os canais Data Analytics BR e CommunityCast:

Utilizando containers Docker no Azure

Temos atualmente diversos serviços no Microsoft Azure que oferecem suporte a containers Docker:

  • Azure Web App for Containers: alternativa PaaS (Plataform as a Service) que viabiliza o deployment de aplicações construídas a partir de tecnologias compatíveis com containers Linux e Windows, além de oferecer inúmeras facilidades em termos de gerenciamento, escalabilidade, segurança e monitoramento;
  • Azure Containter Registry: permite o armazenamento de imagens de containers de maneira privada, trazendo assim uma alternativa dentro da nuvem da Microsoft ao uso de planos pagos do Docker Hub. Este serviço pode ser empregado em conjunto com tecnologias como Azure Container Services (com seus diferentes orquestradores - Docker Swarm, DC/OS e Kubernetes) e Azure Web App for Containers;
  • Azure Container Instances: alternativa que simplifica a utilização de containers Docker na nuvem. Embora dispense o uso de orquestradores (abordagem comum em cenários complexos, nos quais questões como um uso mais intensivo e escalabilidade são preocupações centrais), o Azure Container Instances pode mesmo assim ser integrado a soluções como o Kubernetes.

O vídeo a seguir do Canal .NET aborda o uso destas diversas alternativas:

E também os seguintes artigos/posts:

ASP.NET Core 2.0: deployment na nuvem com Docker, Azure Container Registry e Azure Web App on Linux

ASP.NET Core: APIs REST na nuvem com Docker e Azure Web App

ASP.NET Core + Docker: aplicações na nuvem com Azure Container Instances

APIs seguras com ASP.NET Core, JWT, Docker e Azure

Docker Compose: implementando soluções multi-containers

O Docker Compose é um serviço do próprio Docker voltado à criação e execução conjunta dos múltiplos containers de uma aplicação. Tal capacidade contribui para facilitar o deployment de um projeto em diferentes ambientes.

Além disso, o Docker Compose é considerado uma alternativa extremamente útil em cenários que envolvam a implementação de uma arquitetura de microserviços.

Esta tecnologia foi abordada em detalhes num evento online recente do Canal .NET:

E também em um artigo publicado publicado no meu blog:

ASP.NET Core + Docker Compose: implementando soluções Web multi-containers

Já o repositório a seguir traz um exemplo de utilização do Docker Compose com ASP.NET Core 2.1:

https://github.com/renatogroffe/ASPNETCore2.1_Docker-Compose

Em Junho/2018 retomei mais uma vez este assunto em uma apresentação, desta vez durante DevOps Online Week:

Docker + ASP.NET Core 2.2

No artigo a seguir abordo o uso de Docker em aplicações baseadas no ASP.NET Core 2.2:

ASP.NET Core 2.2 + Docker: visão geral e exemplos

Estes exemplos também estão no GitHub:

https://github.com/renatogroffe/ASP.NET-Core-2.2_API_Docker-Compose

A combinação Docker + ASP.NET Core 2.2 foi ainda tema da seguinte apresentação:

Docker + NGINX

Uma das soluções mais populares de proxy reverso, o Nginx é um projeto open source que em muito facilita a implementação de mecanismos como load balancing, compressão de dados e segurança quando utilizado em conjunto com aplicações Web construídas nas mais variadas plataformas. Além disso, o Nginx pode ser utilizado para a execução de sites estáticos a partir de containers Docker.

Para saber mais a respeito desta excelente combinação acesse os artigos a seguir:

ASP.NET Core 2.2: implementando Load Balancing com Nginx, Docker e Docker Compose

Publicando um web site estático na nuvem com Docker, Nginx e Azure Container Instances

E também o seguinte vídeo do Canal .NET:

Docker + Angular

O post a seguir traz detalhes da demonstração em que fui um dos palestrantes durante a Campus Party Brasil 2019, com um exemplo prático envolvendo o uso de Docker + ASP.NET Core + Angular:

Docker no Back e no Front - um exemplo com .NET Core e Angular

.NET Core + Docker

No artigo a seguir demonstro os passos necessários para executar uma Console Application como um serviço multiplataforma, utilizando para isto Docker e Docker Compose (o .NET Core não conta por default com uma opção para implementação de Windows Services):

.NET Core + Docker: executando uma Console Application como um serviço

Este exemplo também foi abordado na seguinte apresentação:

Kubernetes: orquestração de containers Docker

Solução open source mais popular em se tratando de orquestração de containers, o Kubernetes também é oferecido como um serviço gerenciado chamado AKS (Azure Kubernetes Service) dentro do Microsoft Azure.

Uma visão geral sobre o Kubernetes pode ser encontrada na seguinte apresentação:

Produzi uma série de artigos focando no uso do ASP.NET Core com Kubernetes e a partir do Microsoft Azure (através do AKS - Azure Kubernetes Service):

ASP.NET Core + Azure + Kubernetes: orquestração de containers na nuvem - parte 1

ASP.NET Core + Azure + Kubernetes: orquestração de containers na nuvem - parte 2

No repositório a seguir há um exemplo de aplicação ASP.NET Core com script para deployment em um cluster Kubernetes no Azure:

https://github.com/renatogroffe/ASPNETCore2.1_Kubernetes

E tivemos um hangout no Canal .NET abordando o uso de Kubernetes e também Docker Swarm:

No post a seguir há ainda uma síntese de tudo que produzi/ajudei a organizar envolvendo o uso de Kubernetes, sobretudo a partir do Microsoft Azure:

Construindo Aplicações Web Escaláveis com Docker, Kubernetes e o Microsoft Azure

Imagens Alpine

Uma das novidades que integram o suporte a Docker no .NET Core 2.1 é a possibilidade de utilização de imagens Alpine. Tecnologias populares como Redis, RabbitMQ, Node.js e Nginx já empregam este tipo solução, sendo que o time responsável pela evolução do .NET Core e do ASP.NET Core não ficou alheio a esta tendência.

Projetada para a geração de imagens Docker bem menores em relação às outras opções existentes, a distribuição Alpine Linux se destaca ainda pela preocupação em aspectos como segurança e simplicidade (apenas o mínimo necessário para a execução de uma aplicação é adicionado a imagens deste tipo).

O exemplo a seguir permite a geração de uma imagem Alpine para uma API baseada no ASP.NET Core 2.1:

https://github.com/renatogroffe/ASPNETCore2.1_Docker

A implementação deste mesmo projeto foi abordada no seguinte artigo:

ASP.NET Core 2.1: Release Candidate 1 e Docker Alpine

Indo além do Desenvolvimento Web

Embora o uso mais comum hoje de Docker esteja atrelado ao desenvolvimento de projetos Web (com sua eventual utilização com bancos de dados na montagem de ambientes de testes), containers também podem ser empregados em conjunto com tecnologias como o RabbitMQ (uma das mais populares soluções de mensageria hoje no mercado).

Foi justamente esta possibilidade que abordei na edição 27 da Revista iMasters:

Docker serve apenas para aplicações Web?

Outras Referências

A seguir estão outros artigos que produzi envolvendo o uso de Docker em conjunto com o ASP.NET Core:

ASP.NET Core 2.0: CRUD em API utilizando JWT, EF Core InMemory e Docker

ASP.NET Core 2.0: publicando no Docker Hub a partir do VS 2017

Written by

Microsoft Most Valuable Professional (MVP), Multi-Plataform Technical Audience Contributor (MTAC), Software Engineer, Technical Writer and Speaker

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store