SlideShare uma empresa Scribd logo
1 de 95
Baixar para ler offline
.NET NA PRÁTICA
MERCURIANOS
mercurianos
Da instalação até o debug da nossa API em um container
JANEIRO / 2022 - ELIEL SIMONCELO
Nossa agenda
#1 Preparando o nosso ambiente
#2 O que é o .Net?
#3 O que é o C#?
#4 O que é o Docker?
#5 O que é o Docker compose?
#6 Debugando nossa aplicação .NET
Eliel Simoncelo
➔ Cristão
➔ Pai
➔ Marido
➔ Dev
➔ Sofredor (Cruzeirense)
#1
Preparando o
nosso ambiente
Instale o WSL 2 no Windows # https://bit.ly/3rugV0l
➔ O WSL 2 (subsistema do Windows para o Linux) irá permitir que possamos utilizar um Kernel
completo do Linux dentro do Windows.
➔ O WSL 2 é compatível com versão não profissionais do Windows, como o Windows Home, e isto nos
permite instalar e configurar o Docker Desktop nesta versão do Windows.
➔ Além de todas estas vantagens o WSL 2 é a melhor alternativa para entender o comportamento
das suas aplicações no Linux.
Preparando o nosso ambiente
Instale o Docker Desktop # https://dockr.ly/3nF2Mw6
➔ O Docker Desktop irá nos auxiliar na execução de containers Linux em sistemas operacionais
Windows, macOS e Linux.
➔ Utilizando o Docker Desktop no Windows e macOS você terá uma experiência semelhante a
execução de container no Linux.
➔ Para executar o Docker Desktop em plataformas Windows e macOS provavelmente você deverá
habilitar um Hypervisor (Vmware, Virtualbox ou Hyper-v).
➔ Se você estiver no Windows um dica é utilizar o WSL 2, não esquece de ativar a integração nas
configurações do Docker Desktop.
Preparando o nosso ambiente
Preparando o nosso ambiente
Instale o .NET SDK # https://bit.ly/33vJORO
➔ O .NET SDK contém todas as bibliotecas necessárias para o desenvolvimento de uma aplicação /
software utilizando a plataforma .NET.
➔ Já o .NET Runtime será utilizado somente para EXECUTAR uma versão compilada da nossa
aplicação.
➔ Na data de acontecimento deste evento estamos utilizando o .NET 6, você pode utilizar uma
versão superior desde que ela mantenha contabilidade com as funcionalidades que iremos utilizar.
Instale o Visual Studio Code # https://bit.ly/3AhV4gS
➔ Um editor de código poderoso, open source e executado nos mais diversos sistemas operacionais
como, macOS, Linux e Windows.
➔ Ele é um dos editores de códigos mais utilizados no mundo, permite a utilização de diversas
linguagens de programação.
➔ Não é o mesmo que o Visual Studio. O Visual Studio é dedicado para construção de aplicações com
.NET Full Framework, C/C++, C# e F#.
Preparando o nosso ambiente
Preparando o nosso ambiente
Instale as seguintes extensões no Visual Studio Code
➔ Instale as seguintes extensões no Visual Studio Code para padronização do nosso ambiente:
➢ C# - csharp # https://bit.ly/3IkNcOo
➢ Docker # https://bit.ly/3FIIQ1C
➢ Remote WSL # https://bit.ly/3fFMRJH
➢ Remote Containers # https://bit.ly/3GLACai
Preparando o nosso ambiente
Acesse o Visual Studio Code no WSL 2 e reinstale estas extensões (você
terá que desinstalar e reinstalar as extensões)
➔ Instale as seguintes extensões no Visual Studio Code para padronização do nosso ambiente:
➢ C# - csharp # https://bit.ly/3IkNcOo
➢ Docker # https://bit.ly/3FIIQ1C
➢ Remote WSL # https://bit.ly/3fFMRJH
➢ Remote Containers # https://bit.ly/3GLACai
DEMO #1
1. Verificar a integração do Docker com o WSL 2
2. Verificar a instalação do WSL 2 (somente no windows)
3. Verificar a instalação do Docker
4. Verificar a instalação do Docker Compose
5. Verificar a instalação do .NET SDK
6. Confiar no certificado de desenvolvimento da Microsoft
7. Instalar o .NET no WSL 2
8. Confiar no certificado de desenvolvimento do Windows no WSL 2
DEMO #1 - AGENDA
1. Verificar a integração do Docker com o WSL 2
- Abra o Docker Desktop
- Acesse as configurações para verificar a integração com o WSL 2
Preparando o nosso ambiente
DEMO #1
2. Verificar a instalação do WSL 2 (somente no windows)
Abra o seu terminal e digite o(s) seguinte(s) comando(s):
$ wsl –-set-default-version 2 # define do wsl 2 como padrão
$ wsl –-set-default Ubuntu # define a distro do Ubuntu como padrão
$ wslconfig /setdefault Ubuntu # define a distro do Ubuntu como padrão
$ wsl -l -v # verifica a versão do wsl e distro instalada
Preparando o nosso ambiente
DEMO #1
3. Verificar a instalação do Docker
Abra o seu terminal e digite o(s) seguinte(s) comando(s):
$ docker --version
Preparando o nosso ambiente
DEMO #1
4. Verificar a instalação do Docker Compose
Abra o seu terminal e digite o(s) seguinte(s) comando(s):
$ docker-compose --version
Preparando o nosso ambiente
DEMO #1
5. Verificar a instalação do .NET SDK
Abra o seu terminal e digite o(s) seguinte(s) comando(s):
$ dotnet –-version
$ dotnet –-list-sdks
$ dotnet –-list-runtimes
Preparando o nosso ambiente
DEMO #1
6. Confiar no certificado de desenvolvimento da Microsoft
$ dotnet dev-certs https --clean # limpar os certificados
$ dotnet dev-certs https --trust # confiar nos certificados do desenvolvedor
$ WINDOWS:
PS: dotnet dev-certs https -ep $env:USERPROFILE.aspnethttpsaspnetcore.pfx -p password --trust
CMD: dotnet dev-certs https -ep %USERPROFILE%.aspnethttpsaspnetcore.pfx -p password --trust
$ macOS ou Linux:
dotnet dev-certs https -ep ${HOME}/.aspnet/https/aspnetcore.pfx -p password
Preparando o nosso ambiente
DEMO #2
7. Instalar o .NET no WSL 2 # https://bit.ly/3ryujAB
Abra o seu terminal e digite o(s) seguinte(s) comando(s):
$ wsl # entrar no WSL
$ wget https://packages.microsoft.com/config/ubuntu/21.04/packages-microsoft-prod.deb -O
packages-microsoft-prod.deb # pacotes
$ sudo dpkg -i packages-microsoft-prod.deb # instalar os pacotes
$ rm packages-microsoft-prod.deb # excluir o arquivo de pacotes
$ sudo apt update -y && sudo apt install -y apt-transport-https # atualizar o SO e instalar o transporte de https
$ sudo apt update -y && sudo apt upgrade -y && sudo apt autoremove --purge # fazer o upgrade dos modulos
$ sudo apt install -y dotnet-sdk-6.0 # instalar o sdk do dotnet
$ sudo apt install -y aspnetcore-runtime-6.0 # instalar o runtime do aspnet
$ sudo apt install -y dotnet-runtime-6.0 # instalar o runtime do dotnet
Preparando o nosso ambiente
DEMO #1
8. Confiar no certificado de desenvolvimento do Windows no WSL 2
Abra o seu terminal e digite o(s) seguinte(s) comando(s):
$ wsl # entrar no WSL
$ sudo cp /mnt/c/<SEU_USUARIO_AQUI>/.aspnet/https/aspnetcore.pfx ~/.aspnet/https # copiar certificado
$ dotnet dev-certs https --clean # limpar a confiança nos certificados de desenvolvimento
$ dotnet dev-certs https --clean --import ~/.aspnet/https/aspnetcore.pfx -p password # importar o certificado
Preparando o nosso ambiente
DEMO #1
#2
O que é o
.NET?
.NET
➔ É uma plataforma de desenvolvimento de software que possibilita a instalação de versões
diferentes na mesma máquina (side-by-side):
➔ Gratuita
Não há custos para desenvolvimento de software, seja ele para uso pessoal ou para uso comercial.
➔ Multiplataforma
Você pode desenvolver ou executar o seu software nos principais sistemas operacionais disponíveis no mercado
como Windows, Linux e macOS.
➔ Código aberto
É mantido pela Microsoft e aceita contribuição desde que aprovadas pelos mantenedores.
O que é o .NET?
.NET Framework, .NET Core, .NET 5 (ou superior)
Vamos entender as diferenças entre estas versões:
➔ .NET Framework
Disponível apenas para o sistema operacional Windows e sua última versão foi a 4.X.
➔ .NET Core
É multiplataforma, suportado em Windows, Linux e macOS, construído principalmente para competir no
desenvolvimento de Sites e Apis com frameworks como o NodeJs.
➔ .NET 5 (ou superior)
É multiplataforma, responsável pela junção das funcionalidades do .NET 4.X e do .NET Framework e mantém uma
boa compatibilidade (não é 100%) com o .NET Core.
O que é o .NET?
Antes do .NET 5
O que é o .NET?
A partir do .NET 5
O que é o .NET?
DEMO #2
DEMO #2 - AGENDA
1. Criando o arquivo que define a versão do SDK para o nosso projeto
2. Criando a nossa Web Api com .NET
3. Criando o arquivo de Solução para o nosso projeto
4. Adicionando o Projeto de Web Api para a nossa Solução
5. Alterando a rota da nossa Web Api
6. Alterando as portas de execução da Web Api
7. Fazendo o build da nossa Web Api
8. Executando a nossa Web Api no Windows
9. Testando a nossa Web Api com o Postman
10. Executando a nossa Web Api no WSL 2
1. Criando arquivos de configuração do SDK e do Editor
# A versão do .NET deve ser igual ou superior a versão 5.0
$ cd <diretorio_raiz_do_seu_projeto>
$ dotnet new globaljson --sdk-version 6.0.* --force
$ dotnet new editorconfig --force
O que é o .NET?
DEMO #2
2. Criando a nossa Web Api com .NET
# Criando a nossa api na pasta src/
$ cd <diretorio_raiz_do_seu_projeto>
$ dotnet new webapi --force --name DotnetDebugDockerContainerWebApi --output src/
O que é o .NET?
DEMO #2
3. Criando o arquivo de Solução para o nosso projeto
# o arquivo de solução ajuda a agrupar rotinas de build e etc
$ cd <diretorio_raiz_do_seu_projeto>
$ dotnet new sln --force --name DotnetDebugDockerContainerWebApi --output .
O que é o .NET?
DEMO #2
4. Adicionando o Projeto de Web Api para a nossa Solução
$ cd <diretorio_raiz_do_seu_projeto>
$ dotnet sln DotnetDebugDockerContainerWebApi.sln add src/
O que é o .NET?
DEMO #2
5. Alterando a rota da nossa Web Api:
# iremos alterar a rota para ficar mais simples a chamada
- Abra o arquivo WeatherForecastController.cs
- Altere a rota do para o seguinte:
[Route("api/weather")]
O que é o .NET?
DEMO #2
6. Alterando as portas de execução da Web Api
# iremos alterar as portas de execução da aplicação para ficar mais simples a chamada
- Abra o arquivo PropertieslaunchSettings.json
- Altere o campo applicationUrl para o seguinte:
"applicationUrl": "https://localhost:5001;http://localhost:5000"
O que é o .NET?
DEMO #2
7. Fazendo o build da nossa Web Api
$ cd <diretorio_raiz_do_seu_projeto>
$ dotnet build
O que é o .NET?
DEMO #2
8. Executando a nossa Web Api no Windows
$ cd <diretorio_raiz_do_seu_projeto>
$ dotnet run --project src/
O que é o .NET?
DEMO #2
9. Testando a nossa Web Api com o Postman:
- Abra o Postman
- Adicione um Request do tipo GET com a seguinte url: https://localhost:5001/api/weather
O que é o .NET?
DEMO #2
10. Executando a nossa Web Api no WSL 2
- Para a execução da nossa Web Api no Windows e digite os comandos abaixo no Terminal:
$ wsl
$ cd /mnt/c/<SUA_PASTA_DO_PROJETO_AQUI>/dotnet-debug-docker-container-webapi
$ dotnet run –-project src/
- Abra o Postman
- Adicione um Request do tipo GET com a seguinte url: https://localhost:5001/api/weather
O que é o .NET?
DEMO #2
#3
O que é o
C#?
O que é o C#?
C# ou csharp (pronúncia-se "See Sharp")
➔ É uma linguagem de programação fortemente tipada, quer dizer, você precisa declarar o tipo de
todas as coisas antes da sua compilação.
➔ É uma linguagem de programação orientada a objetos, quer dizer, utiliza a aproximação e/ou
representação do mundo real para o mundo virtual.
➔ É uma linguagem case-sensitive, quer dizer, faz diferenciação entre letras maiúsculas e
minúsculas.
➔ É uma linguagem executada no CLR (runtime), quer dizer, pode ser executada em qualquer das
implementações do CLR como Mono, .NET Framework, .NET Core e .NET 5 ou superior.
O que é o C#?
Versões disponíveis da linguagem
https://docs.microsoft.com/pt-br/dotnet/csharp/language-reference/compiler-options/language#langversion
O que é o C#?
Versão da linguagem utilizada com base no framework alvo
https://docs.microsoft.com/pt-br/dotnet/csharp/language-reference/compiler-options/language#langversion
Ranking do C# vs Outras linguagens: (TIOBE Index)
O que é o C#?
https://www.tiobe.com/tiobe-index/
Ranking do C# vs Outras linguagens: (PYPL Index)
O que é o C#?
https://pypl.github.io/PYPL.html
Ranking do C# vs Outras linguagens: (STACKOVERFLOW Survey)
O que é o C#?
https://insights.stackoverflow.com/survey/2021#most-popular-technologies-language-prof
Ranking do C# vs Outras linguagens: (IEEE Spectrum)
O que é o C#?
https://spectrum.ieee.org/top-programming-languages/
DEMO #3
1. Definir a versão da linguagem que iremos trabalhar no projeto
2. Retroceder uma versão da linguagem e executar o build
DEMO #3 - AGENDA
1. Definir a versão da linguagem que iremos trabalhar no projeto
# iremos definir a linguagem de programação para o nosso projeto
- Abra o arquivo srcDotnetDebugDockerContainerWebApi.csproj
- Adicione a definição do grupo com suporte a linguagem neste arquivo:
(.NET5 e inferior utilize C# 9.0 ou inferior | .NET6 ou superior utilize C# 10.0 ou inferior)
DEMO #3
O que é o C#?
2. Retroceder uma versão da linguagem e executar o build
- Abra o arquivo srcDotnetDebugDockerContainerWebApi.csproj
- Retroceda a versão da linguagem neste arquivo
- Execute o build do seu projeto
DEMO #3
O que é o C#?
#4
O que é o
Docker?
O que é o Docker?
➔ A idéia principal do Docker é criar um ambiente isolado (container) dentro de uma máquina para
execução de uma aplicação.
➔ Este isolamento permite que você faça a portabilidade das suas aplicações (container) para outra
máquina que contenha o Docker instalado.
➔ O Docker permite que você execute aplicações diferentes dentro da mesma máquina sem que
haja um conflito entre elas, bem diferente do modelo de virtualização.
➔ No modelo de virtualização precisamos de muitos recursos pois nossas aplicações executam em
sistemas operacionais convidados, no Docker não existe esta necessidade de múltiplos sistemas
operacionais convidados.
➔ Para utilizar o Docker criamos um arquivo Dockerfile para o nosso projeto.
O que é o Docker?
Metal vs VM vs Container vs Container on VM
Dockerfile
O que é o Docker?
DEMO #4
DEMO #4 - AGENDA
1. Ignorar arquivos e pastas
2. Criar o nosso arquivo Dockerfile
3. Construir, destruir e listar a imagem e o container da Web Api
4. Definir a imagem base que será utilizada para execução da Web Api
5. Adicionar os comandos de build para o container da Web Api
6. Adicionar os comandos de publish para o container da Web Api
7. Finalizar as configurações necessárias para a execução da Web Api
1. Ignorar arquivos e pastas
Abra o seu terminal e digite o(s) seguinte(s) comando(s):
$ cd <diretorio_raiz_do_seu_projeto>
$ dotnet new gitignore --force # forçar a criação do .gitignore
$ cp .gitignore .dockerignore # fazendo uma cópia do .gitignore para o .dockerignore
O que é o Docker?
DEMO #4
2. Criar o nosso arquivo Dockerfile
# iremos criar o nosso arquivo Dockerfile na raiz do diretório do projeto
- Abra a pasta raiz do seu projeto
- Crie o arquivo Dockerfile (não tem extensão para este arquivo)
O que é o Docker?
DEMO #4
3. Construir, destruir e listar a imagem e o container da Web Api
# destruir um container
$ docker rm mercurianos_api --force
# destruir uma imagem
$ docker image rm images/mercurianos --force
# criar uma imagem (build)
$ docker build . --no-cache --tag images/mercurianos --force-rm
# criar um container (run)
$ docker run -d -p 8000:5000 -p 8001:5001 --name mercurianos_api images/mercurianos
# listar os containers
$ docker ps –a
O que é o Docker?
DEMO #4
4. Definir a imagem base que será utilizada para execução da Web Api
Abra o seu arquivo Dockerfile e defina os seguintes comandos:
O que é o Docker?
DEMO #4
5. Adicionar os comandos de build para o container da Web Api
Abra o seu arquivo Dockerfile e defina os seguintes comandos:
O que é o Docker?
DEMO #4
6. Adicionar os comandos de publish para o container da Web Api
Abra o seu arquivo Dockerfile e defina os seguintes comandos:
O que é o Docker?
DEMO #4
7. Finalizar as configurações necessárias para a execução da Web Api
Abra o seu arquivo Dockerfile e defina os seguintes comandos:
O que é o Docker?
DEMO #4
#5
O que é o
Docker Compose?
➔ O Docker Compose permite que criemos nossa infraestrutura de containers como código através
do arquivo .yml ou .yaml.
➔ Com o Docker Compose podemos criar e executar múltiplos containers, definir variáveis de
ambiente e fazer o link de dependência entre os containers caso necessário.
➔ No final das contas, com um único comando conseguiremos construir e destruir toda a
infraestrutura de containers definida no nosso arquivo .yaml.
➔ Além de facilitar a construção da infraestrutura, o Docker Compose a contribuição para com o
projeto, visto que, toda a infraestrutura necessária para execução do projeto está neste arquivo e
com apenas uma linha de comando temos um ambiente funcionando.
O que é o Docker Compose?
docker-compose.yml
O que é o Docker Compose?
DEMO #5
1. Criar o nosso arquivo docker-compose.yml
2. Construir e destruir o serviços criados pelo docker-compose.yml
3. Criando o nosso serviço para o container da Web Api
4. Adicionando as variáveis de ambiente para o container da Web Api
5. Adicionando os volumes para o container da Web Api
6. Adicionando as dependências de serviços para a nossa Web Api
7. Adicionando o serviço de banco de dados para a nossa Web Api
DEMO #5 - AGENDA
1. Criar o nosso arquivo docker-compose.yml
# iremos criar o nosso arquivo Dockerfile na raiz do diretório do projeto
- Abra a pasta raiz do seu projeto
- Crie o arquivo docker-compose.yml (ou .yaml)
O que é o Docker Compose?
DEMO #5
2. Construir e destruir o serviços criados pelo docker-compose.yml
# destruir um container
$ docker-compose rm --stop --force
# construir os servicos
$ docker-compose up --build --force-recreate -d
# listar os containers
$ docker ps –a
O que é o Docker Compose?
DEMO #5
3. Criando o nosso serviço para o container da Web API
- Adicione as configurações abaixo no seu arquivo docker-compose.yml (ou .yaml)
O que é o Docker Compose?
DEMO #5
4. Adicionando as variáveis de ambiente para o container da Web Api
- Adicione as configurações abaixo no seu arquivo docker-compose.yml (ou .yaml)
O que é o Docker Compose?
DEMO #5
5. Adicionando os volumes para o container da Web Api
- Adicione as configurações abaixo no seu arquivo docker-compose.yml (ou .yaml)
O que é o Docker Compose?
DEMO #5
6. Adicionando as dependências de serviços para nossa Web Api
- Adicione as configurações abaixo no seu arquivo docker-compose.yml (ou .yaml)
O que é o Docker Compose?
DEMO #5
7. Adicionando o serviço de banco de dados para a nossa Web Api
- Adicione as configurações abaixo no seu arquivo docker-compose.yml (ou .yaml)
O que é o Docker Compose?
DEMO #5
8. Verificando se o nosso container está funcionando
- Adicione as configurações abaixo no seu arquivo docker-compose.yml (ou .yaml)
O que é o Docker Compose?
DEMO #5
#6
Debugando nossa
aplicação .NET
➔ Vamos adicionar os arquivos para Debug da aplicação .NET localmente, conforme imagem
abaixo.
➔ Acesse o menu View > Command Palette e digite na barra de comandos:
◆ .NET: Generate Assets for
◆ Aperte o Enter no seu teclado
Debugando nossa aplicação .NET
Debug Local
➔ Foram gerados 02 arquivos na pasta .vscode na raiz do seu projeto. Neles teremos as informações
necessárias para realizar o debug da nossa aplicação localmente.
➔ O arquivo .vscode/tasks.json possui as tarefas que serão executadas no momento que acionarmos
o Debug.
➔ O arquivo .vscode/launch.json possui o nome da atividade a configuração necessária para o Visual
Studio Code inicialize o debug através das tarefas definidas no tasks.json.
Debugando nossa aplicação .NET
Debug Local
➔ Para executar o Debug da aplicação no Docker localmente foram adicionadas as seguintes tarefas
no arquivo tasks.json (mantenha a estrutura e nomes conforme o arquivo abaixo):
Debugando nossa aplicação .NET
Debug Local
➔ Para executar o Debug da aplicação localmente através do Visual Studio Code, foi adicionada a
seguinte configuração no arquivo launch.json (mantenha a estrutura e nomes conforme o
arquivo abaixo):
Debugando nossa aplicação .NET
Debug Local
➔ Agora coloque o break point na chamada do método public IEnumerable<WeatherForecast> Get() da
nossa controladora WeatherForecastController .
Debugando nossa aplicação .NET
Debug Local
➔ Acesse a Feature de Debug do Visual Studio Code e selecione o nome do debug correspondente,
neste projeto o nome ficou .NET Core Launch (web) .
Debugando nossa aplicação .NET
Debug Local
➔ Agora vamos efetuar o Debug da aplicação .NET no Docker e para isto, precisamos adicionar
tarefas nos arquivos tasks.json e mais uma configuração no arquivo launch.json.
➔ Acesse o menu View > Command Palette e digite na barra de comandos:
◆ Docker: initialize for
◆ Aperte o Enter no seu teclado
Debugando nossa aplicação .NET
Debug no Docker
➔ Para executar o build da imagem (com base no arquivo Dockerfile) para que possamos realizar
o debug da aplicação localmente, foram adicionadas as seguintes tarefas no arquivo tasks.json
(mantenha a estrutura e nomes conforme o arquivo abaixo):
docker-build: debug
Debugando nossa aplicação .NET
Debug no Docker
➔ Para construir e inicializar o container (com base no arquivo Dockerfile) para que possamos
realizar o debug da aplicação localmente, foram adicionadas as seguintes tarefas no arquivo
tasks.json (mantenha a estrutura e nomes conforme o arquivo abaixo):
docker-run:debug
Debugando nossa aplicação .NET
Debug no Docker
➔ Para executar o Debug da aplicação no Docker através do Visual Studio Code, foi adicionada a
seguinte configuração no arquivo launch.json (mantenha a estrutura e nomes conforme o
arquivo abaixo):
Debugando nossa aplicação .NET
Debug no Docker
➔ Agora coloque o break point na chamada do método public IEnumerable<WeatherForecast> Get() da
nossa controladora WeatherForecastController .
Debugando nossa aplicação .NET
Debug no Docker
➔ Acesse a Feature de Debug do Visual Studio Code e selecione o nome do debug correspondente,
neste projeto o nome ficou Docker NET Core Launch (web).
Debugando nossa aplicação .NET
Debug no Docker
➔ Para fazer o Debug da aplicação no container Docker utilizando o WSL primeiramente realize as
seguintes tarefas:
$ wsl
$ chmod 777 -R ~/.vsdbg
$ chown -R $USERNAME ~/.vsdbg
$ chown -R . ~/.vsdbg
$ rm -rf ~/.vsdbg
➔ Agora, coloque o breakpoint no endpoint da chamada da nossa Web Api e faça a chamada para
este endpoint através do navegador ou postman na porta randômica definida pelo Debug.
Debugando nossa aplicação .NET
Debug no Docker com WSL
➔ Agora você deve abrir o repositório da aplicação no Visual Studio Code e depois você deve
reabrir o repositório da aplicação utilizando o Remote WSL.
➔ Acesse o menu View > Command Palette e digite na barra de comandos:
◆ Remote-WSL: Reo
◆ Aperte o Enter no seu teclado
Debugando nossa aplicação .NET
Debug no Docker com WSL
➔ A sua aplicação reaberta com o Remote WSL deve ser parecida com a imagem abaixo:
Debugando nossa aplicação .NET
Debug no Docker com WSL
➔ Agora coloque o break point na chamada do método public IEnumerable<WeatherForecast> Get() da
nossa controladora WeatherForecastController .
Debugando nossa aplicação .NET
Debug no Docker com WSL
➔ Acesse a Feature de Debug do Visual Studio Code e selecione o nome do debug correspondente,
neste projeto o nome ficou Docker NET Core Launch (web).
Debugando nossa aplicação .NET
Debug no Docker com WSL
É importante conhecer o ambiente de execução das nossas aplicações.
Fazer testes em um ambiente parecido com o da execução produtiva da nossa aplicação é muito
importante.
O código fonte está disponível no seguinte repositório:
https://bit.ly/35mkJJE
Esta apresentação está disponível no meu slideshare:
https://bit.ly/3G9Xmja
Agora é com você, tente replicar o que fizemos no decorrer desta palestra.
Resumo
Obrigado!

Mais conteúdo relacionado

Mais procurados

Vagrant & Docker: carregue seus ambientes no bolso
Vagrant & Docker: carregue seus ambientes no bolsoVagrant & Docker: carregue seus ambientes no bolso
Vagrant & Docker: carregue seus ambientes no bolsoDiogo Lucas
 
Docker na vida real
Docker na vida realDocker na vida real
Docker na vida realFernando Ike
 
TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?Rafael Benevides
 
Apresentação Docker
Apresentação DockerApresentação Docker
Apresentação DockerAndré Justi
 
Docker, facilitando a vida do desenvolvimento
Docker, facilitando a vida do desenvolvimentoDocker, facilitando a vida do desenvolvimento
Docker, facilitando a vida do desenvolvimentoSérgio Lima
 
Apresentação maven
Apresentação mavenApresentação maven
Apresentação mavenAndré Justi
 
Primeiros passos com o Docker
Primeiros passos com o DockerPrimeiros passos com o Docker
Primeiros passos com o DockerWebSix
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeRafael Benevides
 
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobile
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobileXamarin + TDD - Reagindo rápido à mudanças no mundo mobile
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobileakamud
 
Xamarin em 7 minutos
Xamarin em 7 minutosXamarin em 7 minutos
Xamarin em 7 minutosakamud
 
Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes	Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes Rhuan Karlus Silva
 
Treinamento Android Embarcado
Treinamento Android EmbarcadoTreinamento Android Embarcado
Treinamento Android EmbarcadoOdair Sousa
 

Mais procurados (20)

Vagrant & Docker: carregue seus ambientes no bolso
Vagrant & Docker: carregue seus ambientes no bolsoVagrant & Docker: carregue seus ambientes no bolso
Vagrant & Docker: carregue seus ambientes no bolso
 
Docker na vida real
Docker na vida realDocker na vida real
Docker na vida real
 
O que é Docker?
O que é Docker?O que é Docker?
O que é Docker?
 
TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?
 
Apresentação Docker
Apresentação DockerApresentação Docker
Apresentação Docker
 
GIT Básico
GIT BásicoGIT Básico
GIT Básico
 
Docker, facilitando a vida do desenvolvimento
Docker, facilitando a vida do desenvolvimentoDocker, facilitando a vida do desenvolvimento
Docker, facilitando a vida do desenvolvimento
 
Apresentacao de Introdução ao Apache Maven
Apresentacao de Introdução ao Apache MavenApresentacao de Introdução ao Apache Maven
Apresentacao de Introdução ao Apache Maven
 
Apresentação maven
Apresentação mavenApresentação maven
Apresentação maven
 
Primeiros passos com o Docker
Primeiros passos com o DockerPrimeiros passos com o Docker
Primeiros passos com o Docker
 
Linguagem c
Linguagem cLinguagem c
Linguagem c
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
 
Docker volumes
Docker volumesDocker volumes
Docker volumes
 
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobile
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobileXamarin + TDD - Reagindo rápido à mudanças no mundo mobile
Xamarin + TDD - Reagindo rápido à mudanças no mundo mobile
 
Docker: uma visão geral
Docker: uma visão geralDocker: uma visão geral
Docker: uma visão geral
 
5. rodando containers docker na aws
5. rodando containers docker na aws5. rodando containers docker na aws
5. rodando containers docker na aws
 
Xamarin em 7 minutos
Xamarin em 7 minutosXamarin em 7 minutos
Xamarin em 7 minutos
 
Ambiente de desenvolvimento com docker e ruby on rails
Ambiente de desenvolvimento com  docker e ruby on railsAmbiente de desenvolvimento com  docker e ruby on rails
Ambiente de desenvolvimento com docker e ruby on rails
 
Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes	Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes
 
Treinamento Android Embarcado
Treinamento Android EmbarcadoTreinamento Android Embarcado
Treinamento Android Embarcado
 

Semelhante a Debugando .NET com Docker

ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014Giovanni Bassi
 
ASP.NET Core + Docker Compose: deployment descomplicado com containers - .NET...
ASP.NET Core + Docker Compose: deployment descomplicado com containers - .NET...ASP.NET Core + Docker Compose: deployment descomplicado com containers - .NET...
ASP.NET Core + Docker Compose: deployment descomplicado com containers - .NET...Renato Groffe
 
Construção e provisionamento de ambientes de desenvolvimento virtualizados
Construção e provisionamento de ambientes  de desenvolvimento virtualizadosConstrução e provisionamento de ambientes  de desenvolvimento virtualizados
Construção e provisionamento de ambientes de desenvolvimento virtualizadosThiago Rodrigues
 
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...Renato Groff
 
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...Renato Groff
 
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...Renato Groff
 
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu DevelopersDesenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu DevelopersDextra Sistemas / Etec Itu
 
Novidades do C# 7.0 - Julho-2017
Novidades do C# 7.0 - Julho-2017Novidades do C# 7.0 - Julho-2017
Novidades do C# 7.0 - Julho-2017Renato Groff
 
Orchestrando na linha
Orchestrando na linhaOrchestrando na linha
Orchestrando na linhamatheuscmpm
 
Docker para Desenvolvedores - Developers-BR - Julho-2018
Docker para Desenvolvedores - Developers-BR - Julho-2018Docker para Desenvolvedores - Developers-BR - Julho-2018
Docker para Desenvolvedores - Developers-BR - Julho-2018Renato Groff
 
Docker para Desenvolvedores - Developers-BR - Agosto-2018
Docker para Desenvolvedores - Developers-BR - Agosto-2018Docker para Desenvolvedores - Developers-BR - Agosto-2018
Docker para Desenvolvedores - Developers-BR - Agosto-2018Renato Groff
 
Containers com docker #CPRecife4
Containers com docker #CPRecife4Containers com docker #CPRecife4
Containers com docker #CPRecife4David Ruiz
 
Desenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando DockerDesenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando DockerBruno Ricardo Siqueira
 
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...iMasters
 
TDC2018SP | Trilha Testes II - Descomplicando a montagem de ambientes de Test...
TDC2018SP | Trilha Testes II - Descomplicando a montagem de ambientes de Test...TDC2018SP | Trilha Testes II - Descomplicando a montagem de ambientes de Test...
TDC2018SP | Trilha Testes II - Descomplicando a montagem de ambientes de Test...tdc-globalcode
 
Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...
Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...
Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...Renato Groff
 
Microsoft e Open Source: expandindo as fronteiras no Desenvolvimento de Softw...
Microsoft e Open Source: expandindo as fronteiras no Desenvolvimento de Softw...Microsoft e Open Source: expandindo as fronteiras no Desenvolvimento de Softw...
Microsoft e Open Source: expandindo as fronteiras no Desenvolvimento de Softw...Renato Groff
 

Semelhante a Debugando .NET com Docker (20)

Iniciando com django
Iniciando com djangoIniciando com django
Iniciando com django
 
ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014
 
ASP.NET Core + Docker Compose: deployment descomplicado com containers - .NET...
ASP.NET Core + Docker Compose: deployment descomplicado com containers - .NET...ASP.NET Core + Docker Compose: deployment descomplicado com containers - .NET...
ASP.NET Core + Docker Compose: deployment descomplicado com containers - .NET...
 
Construção e provisionamento de ambientes de desenvolvimento virtualizados
Construção e provisionamento de ambientes  de desenvolvimento virtualizadosConstrução e provisionamento de ambientes  de desenvolvimento virtualizados
Construção e provisionamento de ambientes de desenvolvimento virtualizados
 
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
 
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
 
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
Banco de Dados - Docker Compose + Bancos NoSQL: descomplicando a montagem de ...
 
Hello World usando c#.net
Hello World usando c#.netHello World usando c#.net
Hello World usando c#.net
 
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu DevelopersDesenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
 
Novidades do C# 7.0 - Julho-2017
Novidades do C# 7.0 - Julho-2017Novidades do C# 7.0 - Julho-2017
Novidades do C# 7.0 - Julho-2017
 
Orchestrando na linha
Orchestrando na linhaOrchestrando na linha
Orchestrando na linha
 
Docker para Desenvolvedores - Developers-BR - Julho-2018
Docker para Desenvolvedores - Developers-BR - Julho-2018Docker para Desenvolvedores - Developers-BR - Julho-2018
Docker para Desenvolvedores - Developers-BR - Julho-2018
 
Usando Docker no desenvolvimento .NET
Usando Docker no desenvolvimento .NETUsando Docker no desenvolvimento .NET
Usando Docker no desenvolvimento .NET
 
Docker para Desenvolvedores - Developers-BR - Agosto-2018
Docker para Desenvolvedores - Developers-BR - Agosto-2018Docker para Desenvolvedores - Developers-BR - Agosto-2018
Docker para Desenvolvedores - Developers-BR - Agosto-2018
 
Containers com docker #CPRecife4
Containers com docker #CPRecife4Containers com docker #CPRecife4
Containers com docker #CPRecife4
 
Desenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando DockerDesenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando Docker
 
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
 
TDC2018SP | Trilha Testes II - Descomplicando a montagem de ambientes de Test...
TDC2018SP | Trilha Testes II - Descomplicando a montagem de ambientes de Test...TDC2018SP | Trilha Testes II - Descomplicando a montagem de ambientes de Test...
TDC2018SP | Trilha Testes II - Descomplicando a montagem de ambientes de Test...
 
Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...
Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...
Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...
 
Microsoft e Open Source: expandindo as fronteiras no Desenvolvimento de Softw...
Microsoft e Open Source: expandindo as fronteiras no Desenvolvimento de Softw...Microsoft e Open Source: expandindo as fronteiras no Desenvolvimento de Softw...
Microsoft e Open Source: expandindo as fronteiras no Desenvolvimento de Softw...
 

Debugando .NET com Docker

  • 1. .NET NA PRÁTICA MERCURIANOS mercurianos Da instalação até o debug da nossa API em um container JANEIRO / 2022 - ELIEL SIMONCELO
  • 2. Nossa agenda #1 Preparando o nosso ambiente #2 O que é o .Net? #3 O que é o C#? #4 O que é o Docker? #5 O que é o Docker compose? #6 Debugando nossa aplicação .NET
  • 3. Eliel Simoncelo ➔ Cristão ➔ Pai ➔ Marido ➔ Dev ➔ Sofredor (Cruzeirense)
  • 5. Instale o WSL 2 no Windows # https://bit.ly/3rugV0l ➔ O WSL 2 (subsistema do Windows para o Linux) irá permitir que possamos utilizar um Kernel completo do Linux dentro do Windows. ➔ O WSL 2 é compatível com versão não profissionais do Windows, como o Windows Home, e isto nos permite instalar e configurar o Docker Desktop nesta versão do Windows. ➔ Além de todas estas vantagens o WSL 2 é a melhor alternativa para entender o comportamento das suas aplicações no Linux. Preparando o nosso ambiente
  • 6. Instale o Docker Desktop # https://dockr.ly/3nF2Mw6 ➔ O Docker Desktop irá nos auxiliar na execução de containers Linux em sistemas operacionais Windows, macOS e Linux. ➔ Utilizando o Docker Desktop no Windows e macOS você terá uma experiência semelhante a execução de container no Linux. ➔ Para executar o Docker Desktop em plataformas Windows e macOS provavelmente você deverá habilitar um Hypervisor (Vmware, Virtualbox ou Hyper-v). ➔ Se você estiver no Windows um dica é utilizar o WSL 2, não esquece de ativar a integração nas configurações do Docker Desktop. Preparando o nosso ambiente
  • 7. Preparando o nosso ambiente Instale o .NET SDK # https://bit.ly/33vJORO ➔ O .NET SDK contém todas as bibliotecas necessárias para o desenvolvimento de uma aplicação / software utilizando a plataforma .NET. ➔ Já o .NET Runtime será utilizado somente para EXECUTAR uma versão compilada da nossa aplicação. ➔ Na data de acontecimento deste evento estamos utilizando o .NET 6, você pode utilizar uma versão superior desde que ela mantenha contabilidade com as funcionalidades que iremos utilizar.
  • 8. Instale o Visual Studio Code # https://bit.ly/3AhV4gS ➔ Um editor de código poderoso, open source e executado nos mais diversos sistemas operacionais como, macOS, Linux e Windows. ➔ Ele é um dos editores de códigos mais utilizados no mundo, permite a utilização de diversas linguagens de programação. ➔ Não é o mesmo que o Visual Studio. O Visual Studio é dedicado para construção de aplicações com .NET Full Framework, C/C++, C# e F#. Preparando o nosso ambiente
  • 9. Preparando o nosso ambiente Instale as seguintes extensões no Visual Studio Code ➔ Instale as seguintes extensões no Visual Studio Code para padronização do nosso ambiente: ➢ C# - csharp # https://bit.ly/3IkNcOo ➢ Docker # https://bit.ly/3FIIQ1C ➢ Remote WSL # https://bit.ly/3fFMRJH ➢ Remote Containers # https://bit.ly/3GLACai
  • 10. Preparando o nosso ambiente Acesse o Visual Studio Code no WSL 2 e reinstale estas extensões (você terá que desinstalar e reinstalar as extensões) ➔ Instale as seguintes extensões no Visual Studio Code para padronização do nosso ambiente: ➢ C# - csharp # https://bit.ly/3IkNcOo ➢ Docker # https://bit.ly/3FIIQ1C ➢ Remote WSL # https://bit.ly/3fFMRJH ➢ Remote Containers # https://bit.ly/3GLACai
  • 12. 1. Verificar a integração do Docker com o WSL 2 2. Verificar a instalação do WSL 2 (somente no windows) 3. Verificar a instalação do Docker 4. Verificar a instalação do Docker Compose 5. Verificar a instalação do .NET SDK 6. Confiar no certificado de desenvolvimento da Microsoft 7. Instalar o .NET no WSL 2 8. Confiar no certificado de desenvolvimento do Windows no WSL 2 DEMO #1 - AGENDA
  • 13. 1. Verificar a integração do Docker com o WSL 2 - Abra o Docker Desktop - Acesse as configurações para verificar a integração com o WSL 2 Preparando o nosso ambiente DEMO #1
  • 14. 2. Verificar a instalação do WSL 2 (somente no windows) Abra o seu terminal e digite o(s) seguinte(s) comando(s): $ wsl –-set-default-version 2 # define do wsl 2 como padrão $ wsl –-set-default Ubuntu # define a distro do Ubuntu como padrão $ wslconfig /setdefault Ubuntu # define a distro do Ubuntu como padrão $ wsl -l -v # verifica a versão do wsl e distro instalada Preparando o nosso ambiente DEMO #1
  • 15. 3. Verificar a instalação do Docker Abra o seu terminal e digite o(s) seguinte(s) comando(s): $ docker --version Preparando o nosso ambiente DEMO #1
  • 16. 4. Verificar a instalação do Docker Compose Abra o seu terminal e digite o(s) seguinte(s) comando(s): $ docker-compose --version Preparando o nosso ambiente DEMO #1
  • 17. 5. Verificar a instalação do .NET SDK Abra o seu terminal e digite o(s) seguinte(s) comando(s): $ dotnet –-version $ dotnet –-list-sdks $ dotnet –-list-runtimes Preparando o nosso ambiente DEMO #1
  • 18. 6. Confiar no certificado de desenvolvimento da Microsoft $ dotnet dev-certs https --clean # limpar os certificados $ dotnet dev-certs https --trust # confiar nos certificados do desenvolvedor $ WINDOWS: PS: dotnet dev-certs https -ep $env:USERPROFILE.aspnethttpsaspnetcore.pfx -p password --trust CMD: dotnet dev-certs https -ep %USERPROFILE%.aspnethttpsaspnetcore.pfx -p password --trust $ macOS ou Linux: dotnet dev-certs https -ep ${HOME}/.aspnet/https/aspnetcore.pfx -p password Preparando o nosso ambiente DEMO #2
  • 19. 7. Instalar o .NET no WSL 2 # https://bit.ly/3ryujAB Abra o seu terminal e digite o(s) seguinte(s) comando(s): $ wsl # entrar no WSL $ wget https://packages.microsoft.com/config/ubuntu/21.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb # pacotes $ sudo dpkg -i packages-microsoft-prod.deb # instalar os pacotes $ rm packages-microsoft-prod.deb # excluir o arquivo de pacotes $ sudo apt update -y && sudo apt install -y apt-transport-https # atualizar o SO e instalar o transporte de https $ sudo apt update -y && sudo apt upgrade -y && sudo apt autoremove --purge # fazer o upgrade dos modulos $ sudo apt install -y dotnet-sdk-6.0 # instalar o sdk do dotnet $ sudo apt install -y aspnetcore-runtime-6.0 # instalar o runtime do aspnet $ sudo apt install -y dotnet-runtime-6.0 # instalar o runtime do dotnet Preparando o nosso ambiente DEMO #1
  • 20. 8. Confiar no certificado de desenvolvimento do Windows no WSL 2 Abra o seu terminal e digite o(s) seguinte(s) comando(s): $ wsl # entrar no WSL $ sudo cp /mnt/c/<SEU_USUARIO_AQUI>/.aspnet/https/aspnetcore.pfx ~/.aspnet/https # copiar certificado $ dotnet dev-certs https --clean # limpar a confiança nos certificados de desenvolvimento $ dotnet dev-certs https --clean --import ~/.aspnet/https/aspnetcore.pfx -p password # importar o certificado Preparando o nosso ambiente DEMO #1
  • 21. #2 O que é o .NET?
  • 22. .NET ➔ É uma plataforma de desenvolvimento de software que possibilita a instalação de versões diferentes na mesma máquina (side-by-side): ➔ Gratuita Não há custos para desenvolvimento de software, seja ele para uso pessoal ou para uso comercial. ➔ Multiplataforma Você pode desenvolver ou executar o seu software nos principais sistemas operacionais disponíveis no mercado como Windows, Linux e macOS. ➔ Código aberto É mantido pela Microsoft e aceita contribuição desde que aprovadas pelos mantenedores. O que é o .NET?
  • 23. .NET Framework, .NET Core, .NET 5 (ou superior) Vamos entender as diferenças entre estas versões: ➔ .NET Framework Disponível apenas para o sistema operacional Windows e sua última versão foi a 4.X. ➔ .NET Core É multiplataforma, suportado em Windows, Linux e macOS, construído principalmente para competir no desenvolvimento de Sites e Apis com frameworks como o NodeJs. ➔ .NET 5 (ou superior) É multiplataforma, responsável pela junção das funcionalidades do .NET 4.X e do .NET Framework e mantém uma boa compatibilidade (não é 100%) com o .NET Core. O que é o .NET?
  • 24. Antes do .NET 5 O que é o .NET?
  • 25. A partir do .NET 5 O que é o .NET?
  • 27. DEMO #2 - AGENDA 1. Criando o arquivo que define a versão do SDK para o nosso projeto 2. Criando a nossa Web Api com .NET 3. Criando o arquivo de Solução para o nosso projeto 4. Adicionando o Projeto de Web Api para a nossa Solução 5. Alterando a rota da nossa Web Api 6. Alterando as portas de execução da Web Api 7. Fazendo o build da nossa Web Api 8. Executando a nossa Web Api no Windows 9. Testando a nossa Web Api com o Postman 10. Executando a nossa Web Api no WSL 2
  • 28. 1. Criando arquivos de configuração do SDK e do Editor # A versão do .NET deve ser igual ou superior a versão 5.0 $ cd <diretorio_raiz_do_seu_projeto> $ dotnet new globaljson --sdk-version 6.0.* --force $ dotnet new editorconfig --force O que é o .NET? DEMO #2
  • 29. 2. Criando a nossa Web Api com .NET # Criando a nossa api na pasta src/ $ cd <diretorio_raiz_do_seu_projeto> $ dotnet new webapi --force --name DotnetDebugDockerContainerWebApi --output src/ O que é o .NET? DEMO #2
  • 30. 3. Criando o arquivo de Solução para o nosso projeto # o arquivo de solução ajuda a agrupar rotinas de build e etc $ cd <diretorio_raiz_do_seu_projeto> $ dotnet new sln --force --name DotnetDebugDockerContainerWebApi --output . O que é o .NET? DEMO #2
  • 31. 4. Adicionando o Projeto de Web Api para a nossa Solução $ cd <diretorio_raiz_do_seu_projeto> $ dotnet sln DotnetDebugDockerContainerWebApi.sln add src/ O que é o .NET? DEMO #2
  • 32. 5. Alterando a rota da nossa Web Api: # iremos alterar a rota para ficar mais simples a chamada - Abra o arquivo WeatherForecastController.cs - Altere a rota do para o seguinte: [Route("api/weather")] O que é o .NET? DEMO #2
  • 33. 6. Alterando as portas de execução da Web Api # iremos alterar as portas de execução da aplicação para ficar mais simples a chamada - Abra o arquivo PropertieslaunchSettings.json - Altere o campo applicationUrl para o seguinte: "applicationUrl": "https://localhost:5001;http://localhost:5000" O que é o .NET? DEMO #2
  • 34. 7. Fazendo o build da nossa Web Api $ cd <diretorio_raiz_do_seu_projeto> $ dotnet build O que é o .NET? DEMO #2
  • 35. 8. Executando a nossa Web Api no Windows $ cd <diretorio_raiz_do_seu_projeto> $ dotnet run --project src/ O que é o .NET? DEMO #2
  • 36. 9. Testando a nossa Web Api com o Postman: - Abra o Postman - Adicione um Request do tipo GET com a seguinte url: https://localhost:5001/api/weather O que é o .NET? DEMO #2
  • 37. 10. Executando a nossa Web Api no WSL 2 - Para a execução da nossa Web Api no Windows e digite os comandos abaixo no Terminal: $ wsl $ cd /mnt/c/<SUA_PASTA_DO_PROJETO_AQUI>/dotnet-debug-docker-container-webapi $ dotnet run –-project src/ - Abra o Postman - Adicione um Request do tipo GET com a seguinte url: https://localhost:5001/api/weather O que é o .NET? DEMO #2
  • 38. #3 O que é o C#?
  • 39. O que é o C#? C# ou csharp (pronúncia-se "See Sharp") ➔ É uma linguagem de programação fortemente tipada, quer dizer, você precisa declarar o tipo de todas as coisas antes da sua compilação. ➔ É uma linguagem de programação orientada a objetos, quer dizer, utiliza a aproximação e/ou representação do mundo real para o mundo virtual. ➔ É uma linguagem case-sensitive, quer dizer, faz diferenciação entre letras maiúsculas e minúsculas. ➔ É uma linguagem executada no CLR (runtime), quer dizer, pode ser executada em qualquer das implementações do CLR como Mono, .NET Framework, .NET Core e .NET 5 ou superior.
  • 40. O que é o C#? Versões disponíveis da linguagem https://docs.microsoft.com/pt-br/dotnet/csharp/language-reference/compiler-options/language#langversion
  • 41. O que é o C#? Versão da linguagem utilizada com base no framework alvo https://docs.microsoft.com/pt-br/dotnet/csharp/language-reference/compiler-options/language#langversion
  • 42. Ranking do C# vs Outras linguagens: (TIOBE Index) O que é o C#? https://www.tiobe.com/tiobe-index/
  • 43. Ranking do C# vs Outras linguagens: (PYPL Index) O que é o C#? https://pypl.github.io/PYPL.html
  • 44. Ranking do C# vs Outras linguagens: (STACKOVERFLOW Survey) O que é o C#? https://insights.stackoverflow.com/survey/2021#most-popular-technologies-language-prof
  • 45. Ranking do C# vs Outras linguagens: (IEEE Spectrum) O que é o C#? https://spectrum.ieee.org/top-programming-languages/
  • 47. 1. Definir a versão da linguagem que iremos trabalhar no projeto 2. Retroceder uma versão da linguagem e executar o build DEMO #3 - AGENDA
  • 48. 1. Definir a versão da linguagem que iremos trabalhar no projeto # iremos definir a linguagem de programação para o nosso projeto - Abra o arquivo srcDotnetDebugDockerContainerWebApi.csproj - Adicione a definição do grupo com suporte a linguagem neste arquivo: (.NET5 e inferior utilize C# 9.0 ou inferior | .NET6 ou superior utilize C# 10.0 ou inferior) DEMO #3 O que é o C#?
  • 49. 2. Retroceder uma versão da linguagem e executar o build - Abra o arquivo srcDotnetDebugDockerContainerWebApi.csproj - Retroceda a versão da linguagem neste arquivo - Execute o build do seu projeto DEMO #3 O que é o C#?
  • 50. #4 O que é o Docker?
  • 51. O que é o Docker? ➔ A idéia principal do Docker é criar um ambiente isolado (container) dentro de uma máquina para execução de uma aplicação. ➔ Este isolamento permite que você faça a portabilidade das suas aplicações (container) para outra máquina que contenha o Docker instalado. ➔ O Docker permite que você execute aplicações diferentes dentro da mesma máquina sem que haja um conflito entre elas, bem diferente do modelo de virtualização. ➔ No modelo de virtualização precisamos de muitos recursos pois nossas aplicações executam em sistemas operacionais convidados, no Docker não existe esta necessidade de múltiplos sistemas operacionais convidados. ➔ Para utilizar o Docker criamos um arquivo Dockerfile para o nosso projeto.
  • 52. O que é o Docker? Metal vs VM vs Container vs Container on VM
  • 53. Dockerfile O que é o Docker?
  • 55. DEMO #4 - AGENDA 1. Ignorar arquivos e pastas 2. Criar o nosso arquivo Dockerfile 3. Construir, destruir e listar a imagem e o container da Web Api 4. Definir a imagem base que será utilizada para execução da Web Api 5. Adicionar os comandos de build para o container da Web Api 6. Adicionar os comandos de publish para o container da Web Api 7. Finalizar as configurações necessárias para a execução da Web Api
  • 56. 1. Ignorar arquivos e pastas Abra o seu terminal e digite o(s) seguinte(s) comando(s): $ cd <diretorio_raiz_do_seu_projeto> $ dotnet new gitignore --force # forçar a criação do .gitignore $ cp .gitignore .dockerignore # fazendo uma cópia do .gitignore para o .dockerignore O que é o Docker? DEMO #4
  • 57. 2. Criar o nosso arquivo Dockerfile # iremos criar o nosso arquivo Dockerfile na raiz do diretório do projeto - Abra a pasta raiz do seu projeto - Crie o arquivo Dockerfile (não tem extensão para este arquivo) O que é o Docker? DEMO #4
  • 58. 3. Construir, destruir e listar a imagem e o container da Web Api # destruir um container $ docker rm mercurianos_api --force # destruir uma imagem $ docker image rm images/mercurianos --force # criar uma imagem (build) $ docker build . --no-cache --tag images/mercurianos --force-rm # criar um container (run) $ docker run -d -p 8000:5000 -p 8001:5001 --name mercurianos_api images/mercurianos # listar os containers $ docker ps –a O que é o Docker? DEMO #4
  • 59. 4. Definir a imagem base que será utilizada para execução da Web Api Abra o seu arquivo Dockerfile e defina os seguintes comandos: O que é o Docker? DEMO #4
  • 60. 5. Adicionar os comandos de build para o container da Web Api Abra o seu arquivo Dockerfile e defina os seguintes comandos: O que é o Docker? DEMO #4
  • 61. 6. Adicionar os comandos de publish para o container da Web Api Abra o seu arquivo Dockerfile e defina os seguintes comandos: O que é o Docker? DEMO #4
  • 62. 7. Finalizar as configurações necessárias para a execução da Web Api Abra o seu arquivo Dockerfile e defina os seguintes comandos: O que é o Docker? DEMO #4
  • 63. #5 O que é o Docker Compose?
  • 64. ➔ O Docker Compose permite que criemos nossa infraestrutura de containers como código através do arquivo .yml ou .yaml. ➔ Com o Docker Compose podemos criar e executar múltiplos containers, definir variáveis de ambiente e fazer o link de dependência entre os containers caso necessário. ➔ No final das contas, com um único comando conseguiremos construir e destruir toda a infraestrutura de containers definida no nosso arquivo .yaml. ➔ Além de facilitar a construção da infraestrutura, o Docker Compose a contribuição para com o projeto, visto que, toda a infraestrutura necessária para execução do projeto está neste arquivo e com apenas uma linha de comando temos um ambiente funcionando. O que é o Docker Compose?
  • 65. docker-compose.yml O que é o Docker Compose?
  • 67. 1. Criar o nosso arquivo docker-compose.yml 2. Construir e destruir o serviços criados pelo docker-compose.yml 3. Criando o nosso serviço para o container da Web Api 4. Adicionando as variáveis de ambiente para o container da Web Api 5. Adicionando os volumes para o container da Web Api 6. Adicionando as dependências de serviços para a nossa Web Api 7. Adicionando o serviço de banco de dados para a nossa Web Api DEMO #5 - AGENDA
  • 68. 1. Criar o nosso arquivo docker-compose.yml # iremos criar o nosso arquivo Dockerfile na raiz do diretório do projeto - Abra a pasta raiz do seu projeto - Crie o arquivo docker-compose.yml (ou .yaml) O que é o Docker Compose? DEMO #5
  • 69. 2. Construir e destruir o serviços criados pelo docker-compose.yml # destruir um container $ docker-compose rm --stop --force # construir os servicos $ docker-compose up --build --force-recreate -d # listar os containers $ docker ps –a O que é o Docker Compose? DEMO #5
  • 70. 3. Criando o nosso serviço para o container da Web API - Adicione as configurações abaixo no seu arquivo docker-compose.yml (ou .yaml) O que é o Docker Compose? DEMO #5
  • 71. 4. Adicionando as variáveis de ambiente para o container da Web Api - Adicione as configurações abaixo no seu arquivo docker-compose.yml (ou .yaml) O que é o Docker Compose? DEMO #5
  • 72. 5. Adicionando os volumes para o container da Web Api - Adicione as configurações abaixo no seu arquivo docker-compose.yml (ou .yaml) O que é o Docker Compose? DEMO #5
  • 73. 6. Adicionando as dependências de serviços para nossa Web Api - Adicione as configurações abaixo no seu arquivo docker-compose.yml (ou .yaml) O que é o Docker Compose? DEMO #5
  • 74. 7. Adicionando o serviço de banco de dados para a nossa Web Api - Adicione as configurações abaixo no seu arquivo docker-compose.yml (ou .yaml) O que é o Docker Compose? DEMO #5
  • 75. 8. Verificando se o nosso container está funcionando - Adicione as configurações abaixo no seu arquivo docker-compose.yml (ou .yaml) O que é o Docker Compose? DEMO #5
  • 77. ➔ Vamos adicionar os arquivos para Debug da aplicação .NET localmente, conforme imagem abaixo. ➔ Acesse o menu View > Command Palette e digite na barra de comandos: ◆ .NET: Generate Assets for ◆ Aperte o Enter no seu teclado Debugando nossa aplicação .NET Debug Local
  • 78. ➔ Foram gerados 02 arquivos na pasta .vscode na raiz do seu projeto. Neles teremos as informações necessárias para realizar o debug da nossa aplicação localmente. ➔ O arquivo .vscode/tasks.json possui as tarefas que serão executadas no momento que acionarmos o Debug. ➔ O arquivo .vscode/launch.json possui o nome da atividade a configuração necessária para o Visual Studio Code inicialize o debug através das tarefas definidas no tasks.json. Debugando nossa aplicação .NET Debug Local
  • 79. ➔ Para executar o Debug da aplicação no Docker localmente foram adicionadas as seguintes tarefas no arquivo tasks.json (mantenha a estrutura e nomes conforme o arquivo abaixo): Debugando nossa aplicação .NET Debug Local
  • 80. ➔ Para executar o Debug da aplicação localmente através do Visual Studio Code, foi adicionada a seguinte configuração no arquivo launch.json (mantenha a estrutura e nomes conforme o arquivo abaixo): Debugando nossa aplicação .NET Debug Local
  • 81. ➔ Agora coloque o break point na chamada do método public IEnumerable<WeatherForecast> Get() da nossa controladora WeatherForecastController . Debugando nossa aplicação .NET Debug Local
  • 82. ➔ Acesse a Feature de Debug do Visual Studio Code e selecione o nome do debug correspondente, neste projeto o nome ficou .NET Core Launch (web) . Debugando nossa aplicação .NET Debug Local
  • 83. ➔ Agora vamos efetuar o Debug da aplicação .NET no Docker e para isto, precisamos adicionar tarefas nos arquivos tasks.json e mais uma configuração no arquivo launch.json. ➔ Acesse o menu View > Command Palette e digite na barra de comandos: ◆ Docker: initialize for ◆ Aperte o Enter no seu teclado Debugando nossa aplicação .NET Debug no Docker
  • 84. ➔ Para executar o build da imagem (com base no arquivo Dockerfile) para que possamos realizar o debug da aplicação localmente, foram adicionadas as seguintes tarefas no arquivo tasks.json (mantenha a estrutura e nomes conforme o arquivo abaixo): docker-build: debug Debugando nossa aplicação .NET Debug no Docker
  • 85. ➔ Para construir e inicializar o container (com base no arquivo Dockerfile) para que possamos realizar o debug da aplicação localmente, foram adicionadas as seguintes tarefas no arquivo tasks.json (mantenha a estrutura e nomes conforme o arquivo abaixo): docker-run:debug Debugando nossa aplicação .NET Debug no Docker
  • 86. ➔ Para executar o Debug da aplicação no Docker através do Visual Studio Code, foi adicionada a seguinte configuração no arquivo launch.json (mantenha a estrutura e nomes conforme o arquivo abaixo): Debugando nossa aplicação .NET Debug no Docker
  • 87. ➔ Agora coloque o break point na chamada do método public IEnumerable<WeatherForecast> Get() da nossa controladora WeatherForecastController . Debugando nossa aplicação .NET Debug no Docker
  • 88. ➔ Acesse a Feature de Debug do Visual Studio Code e selecione o nome do debug correspondente, neste projeto o nome ficou Docker NET Core Launch (web). Debugando nossa aplicação .NET Debug no Docker
  • 89. ➔ Para fazer o Debug da aplicação no container Docker utilizando o WSL primeiramente realize as seguintes tarefas: $ wsl $ chmod 777 -R ~/.vsdbg $ chown -R $USERNAME ~/.vsdbg $ chown -R . ~/.vsdbg $ rm -rf ~/.vsdbg ➔ Agora, coloque o breakpoint no endpoint da chamada da nossa Web Api e faça a chamada para este endpoint através do navegador ou postman na porta randômica definida pelo Debug. Debugando nossa aplicação .NET Debug no Docker com WSL
  • 90. ➔ Agora você deve abrir o repositório da aplicação no Visual Studio Code e depois você deve reabrir o repositório da aplicação utilizando o Remote WSL. ➔ Acesse o menu View > Command Palette e digite na barra de comandos: ◆ Remote-WSL: Reo ◆ Aperte o Enter no seu teclado Debugando nossa aplicação .NET Debug no Docker com WSL
  • 91. ➔ A sua aplicação reaberta com o Remote WSL deve ser parecida com a imagem abaixo: Debugando nossa aplicação .NET Debug no Docker com WSL
  • 92. ➔ Agora coloque o break point na chamada do método public IEnumerable<WeatherForecast> Get() da nossa controladora WeatherForecastController . Debugando nossa aplicação .NET Debug no Docker com WSL
  • 93. ➔ Acesse a Feature de Debug do Visual Studio Code e selecione o nome do debug correspondente, neste projeto o nome ficou Docker NET Core Launch (web). Debugando nossa aplicação .NET Debug no Docker com WSL
  • 94. É importante conhecer o ambiente de execução das nossas aplicações. Fazer testes em um ambiente parecido com o da execução produtiva da nossa aplicação é muito importante. O código fonte está disponível no seguinte repositório: https://bit.ly/35mkJJE Esta apresentação está disponível no meu slideshare: https://bit.ly/3G9Xmja Agora é com você, tente replicar o que fizemos no decorrer desta palestra. Resumo