Apr 16, 2023

Usando docker para experimentar novas funcionalidades do C#

Read this post in English.

Lire cet post en français.

Neste post eu apresentei o sharplab.io, uma ferramenta fantástica que nos permite compilar/executar/avaliar código C#, incluindo versões da linguagem que ainda se encontram em desenvolvimento mas, como nenhuma ferramenta é perfeita, mesmo sendo um ótimo recurso o mesmo apresenta algumas limitações:

  1. No modo execução (run), o mesmo possui algumas restrições com relação ao código que pode ser executado ou não (que se devem a questões de segurança e de uso de recursos, ou seja, totalmente compreensível)
  2. Sendo um site web o mesmo exige uma conexão com a internet para ser usado(Ok, estou sendo um pouco chato neste ponto :)).
  3. Pouco ou quase inexistente controle sobre parâmetros usado para compilar o código (por exemplo, versão da linguagem C#, etc).
  4. Não é possível depurar o código

Assim sendo hoje eu quero apresentar uma nova maneira de atingir um resultado similar, sem as referidas restrições (mas certamente com outras :(): usar o Docker para experimentar novas funcionalidades  do C# sem ter que instalar versões preview do .NET localmente ou recorrer a compiladores online.

Este post assume uma experiência básica usando o Docker (mas o mesmo não requer conhecimento de nenhuma funcionalidade esotérica). Basicamente  tudo que precisamos fazer é:

  1. Instalar o Docker
  2. Baixar a imagem mais atualizada (nightly) do repositório Microsoft:
    docker pull mcr.microsoft.com/dotnet/nightly/sdk:latest
  3. Executar o container:
    docker run -it mcr.microsoft.com/dotnet/nightly/sdk /bin/bash

e pronto!  Uma vez que o comando 3 tenha sido executado você  estará em um  terminal (Linux) em um container  Doker com a versão de build noturno do  .NET (no momento em que escrevi este post,  .NET 8 Preview 4). Com isso você pode experimentar novas APIs, novas funcionalidades e muito mais.

Claro que sempre é possível tornar nossas vidas mais fáceis. Por exemplo, a versão atual da imagem que eu escolhi não possui um editor de texto razoável instalado (desculpe fans do vi, eu não sou tão geek assim) e um erro é reportado quanto tentamos instalar o nano. Corrigir este problema não é muito difícil requerendo apenas que executemos os comandos apt update e apt install nano; como eu sou preguiçoso o próximo passo foi automatizar este processo criando um arquivo Dockerfile baseado na imagem nightly da MS e adicionando os comandos citados acima para instalar o nano:

And now you can build a custom image:

docker build . -t dotnet-latest 

docker run -it dotnet-latest

Um ponto importante que você deve atentar caso não possua experiência usando o Docker é que o conteúdo de qualquer arquivo modificado durante a execução de um container é descartado assim que encerramos a execução do mesmo (infelizmente apresentar como persistir o conteúdo de tais arquivos esta além do objetivo deste post mas de acordo com o chatgpt, isso não é muito complicado - apenas entre a pergunta "como persistir arquivos entre sessões no docker?" e o mesmo responderá :)).

Have fun!

No comments: