fbpx
.NET Core – de 2.0.0-preview2 para 2.0.0 – Atualizando projetos e Dockerfiles
Publicado em: sexta-feira, 18 de ago de 2017

Vamos direto ao ponto: A intenção desse post é apresentar como migrar seus projetos do .NET Core 2.0-preview2 pra o .NET Core 2.0 RTM. Sim, esse é um tutorial, e visa apresentar o que é necessário para fazê-lo.

O .NET Core 2 foi anunciado no dia 14 de agosto e para quem estava usando o 2.0-preview2 algumas coisas simplesmente pararam de funcionar do dia para a noite.

Essa quebra que fez as coisas pararem está relacionada às imagens do Docker com as tags 2.0 que antes estavam com o preview2, passaram a ser compiladas com a versão RTM. Naquele momento para que as coisas continuassem funcionando era necessário utilizar as imagens com o sufixo “-preview2”, o que não era necessário até então.

Update do Visual Studio

Como eu já estava usando o Visual Studio Enterprise 2017 Preview, comecei pelo update para a versão 15.3.1 Preview 1.0, disponível para download a partir do Visual Studio Installer.

Aproveitei para fazer um reset factory reset no meu docker for windows, já que havia muito lixo, tanto em configurações, afinal de testes e aprendizado vivemos! Em seguida fiz o download das imagens-base para otimizar o tempo de build. Tenho alguns scripts rodando nos servidores de build e um deles faz download das imagens-base que uso nos meus projetos diariamente, assim garanto que a cada novo build, dificilmente vou ter de esperar esse download, compartilho abaixo meu docker-pull diário:

docker images
docker pull microsoft/aspnetcore-build:2.0
docker pull microsoft/aspnetcore:2.0
docker pull microsoft/aspnetcore-build:2.0.0-preview2
docker pull microsoft/aspnetcore:2.0.0-preview2
docker pull microsoft/dotnet:2.0-sdk
docker pull microsoft/dotnet:2.0-runtime
docker pull node:8
docker pull node:8-alpine
docker pull openjdk:8-alpine
docker pull php:7-apache
docker pull ubuntu:17.10
docker pull ubuntu:17.04
docker pull ubuntu:16.04
docker pull ubuntu:14.04
docker pull debian:jessie
docker pull debian:jessie-backports
docker pull debian:jessie-slim
docker pull debian:stretch
docker pull debian:stretch-backports
docker pull debian:stretch-slim        
docker images

Basicamente tudo o que eu uso no dia-a-dia se baseia em alguma dessas imagens, ou precisa delas para ser gerado. Você não precisa fazer isso, mas ajuda já ter as imagens aspnetcore-build:2.0, aspnetcore:2.0, dotnet:2.0-sdk e dotnet:2.0-runtime. Escolha o par que melhor se encaixa no que você está desenvolvendo. São pares compostos por build/sdk e runtime.

Instalação do .NET Core 2

Você vai precisar fazer download do novo sdk, disponível no site do .Net Core a versão atual do instalador é dotnet-sdk-2.0.0-win-gs-x64.exe.

Rodei dotnet –version antes e depois da instalação para garantir que meu ambiente estava ok, e segue o resultado:

$ dotnet --version
2.0.0-preview2-006497

$ dotnet --version
2.0.0

Ao final da instalação você recebe um aviso com alguns links interessantes, resolvi copiar para que possam ir às documentações listadas antes de instalar.

This product collects usage data
    • More information and opt-out https://aka.ms/dotnet-cli-telemetry

Resources
    • Core Documentation https://aka.ms/dotnet-docs
    • SDK Documentation https://aka.ms/dotnet-cli-docs
    • Release Notes https://aka.ms/20-p2-rel-notes
    • Tutorials https://aka.ms/dotnet-tutorials

A instalação realiza o setup do SDK, Runtime e Runtime Package Store.

Atualizando o projeto

Ao abrir o sua solution você precisará realizar o update das dependências de 2.0.0-preview2-final para 2.0.0. Isso é o suficiente!

Bom, o último passo foi atualizar as imagens-base utilizadas para o deploy com docker.

- FROM microsoft/aspnetcore-build: AS aspnet-build
+ FROM microsoft/aspnetcore-build:2.0 AS aspnet-build
  WORKDIR /app
  COPY ./ci.sln /app/
  COPY ./enginex.copilot.api/ /app/enginex.copilot.api/
  RUN dotnet restore ./ci.sln && dotnet publish ./ci.sln -o /publish-output

  FROM node:8-alpine AS angular-build
  WORKDIR /home
  RUN npm install -g @angular/cli typescript webpack typings tslint
  COPY ./enginex.copilot.ui/package.json ./
  COPY ./enginex.copilot.ui/package-lock.json ./
  RUN npm install
  COPY ./enginex.copilot.ui/ ./
  RUN ng build --target production --aot --output-path /publish-output

- FROM microsoft/aspnetcore:2.0.0-preview2
+ FROM microsoft/aspnetcore:2.0
  WORKDIR /app
  COPY --from=aspnet-build /publish-output ./
  COPY --from=angular-build /publish-output ./wwwroot
  EXPOSE 7777
  ENTRYPOINT ["dotnet", "Enginex.Copilot.Api.dll"]

A propósito esse dockerfile é motivo de um post inteiro. Esse é um build de produção de um produto que estou desenvolvendo, dedicado à gestão de Docker e Load Balancer. Como o front é Angular 4, aproveitei para embarcá-lo junto com a app MVC, mas isso só acontece fora do ambiente de desenvolvimento, assim evito ter a necessidade de entregar 2 containers para a aplicação. O resultado é fantástico, pois simplifica o deploy, já que ASP.NET Core suporta arquivos estáticos, o necessário para hospedar minha app angular junto com a API. Vale lembrar que esse é um produto de gestão, então quanto menor a quantidade de containers para que ele rode, melhor, pois facilita o deploy. Isso não é verdade quando precisamos escalar API’s e então nesse caso seria mais prudente isolar front e api para que seja possível escalar individualmente cada elemento da arquitetura.

 

[dt_quote type=”blockquote” font_size=”big” animation=”none” background=”plain”]

Atenção

As imagens docker com tag 2.0 e 2.0.0 mudaram. Antes do lançamento do .NET Core 2 RTM, as imagens com essas tags eram destinadas ao 2.0.0-Preview 2, assim que lançaram a versão final, essas tags deram lugar à versão final. Isso significa que há grande probabilidade de que seu host docker esteja com imagens antigas. Remova-as (para que seja baixadas novamente na medida que for necessário) ou faça pull destas imagens. A título de curiosidade essas imagens têm sido atualizadas quase todos os dias.

Desde o dia 14, quando passei a automatizar e monitorar essas imagens as atualizações têm sido diárias de segunda a sexta.

[/dt_quote]

 

 

Quer saber mais sobre .NET Core 2.0? Tem evento online hoje!

 

Hoje eu, Renato Groff e  André Secco vamos falar sobre o lançamento do .NET Core 2 no Coding Night no Mesa Redonda #5 – .NET Core/Standard 2.0.

Como sempre, transmitido ao vivo, pelo Youtube 22 horas!

https://www.facebook.com/events/465771167138709/

Então está combinado, nos vemos hoje no Coding Night, se quiser, pode deixar um comentário, para tirar dúvidas ou expressar sua opinião mesmo.

 

0 comentários

Enviar um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

[docker de a a z]

Lives

Fique de olho nas lives

Fique de olho nas lives no meu canal do Youtube, no Canal .NET e nos Grupos do Facebook e Instagram.

Aceleradores

Existem diversas formas de viabilizar o suporte ao teu projeto. Seja com os treinamentos, consultoria, mentorias em grupo.