Aproveite os recipientes vazios.

Os containers Dev possibilitam aos programadores criar e compartilhar ambientes de desenvolvimento em containers, o que permite começar a programar de forma mais ágil, consistente e segura.

Os containers são essenciais na estrutura das aplicações atuais, pois isolam as aplicações e tornam o ambiente de execução independente. Eles permitem empacotar e executar o código juntamente com suas dependências, além de gerenciar recursos e escalonar aplicações e serviços conforme necessário.
Fora das ferramentas como os Codespaces do GitHub, houve pouca atenção dada ao uso de recipientes como uma ferramenta de desenvolvimento. É curioso, pois os recipientes são uma forma ideal de encapsular um ambiente de desenvolvimento completo, com todos os serviços necessários para compilar e testar seu código. Normalmente, as ferramentas utilizadas para controlar contêineres como os Codespaces estão disponíveis para qualquer pessoa, permitindo que você crie e gerencie seus próprios recipientes de desenvolvimento dentro do seu próprio ambiente, localmente ou na nuvem pública.
Compartilhar espaços de desenvolvimento como contêineres.
A proposta por trás dos recipientes dev é simples: Consolidar todos os serviços essenciais para apoiar o desenvolvimento de um aplicativo em um único recipiente Docker. Posteriormente, é possível executá-lo em uma máquina virtual, utilizando ferramentas de desenvolvimento remoto e depuração para gerenciar o código. O recipiente é capaz de abrigar diversos elementos, como bancos de dados, simulações de pontos de extremidade API, além de tempos de execução e bibliotecas necessárias para o projeto. O isolamento proporcionado pelo recipiente minimiza o risco de interferência com outras aplicações.
Ao utilizar contêineres dev, os desenvolvedores não precisam mais gastar tempo configurando suas máquinas. Basta baixar e montar um contêiner de projeto e iniciar a codificação. Isso resulta em uma economia significativa de tempo e garante que todos os colaboradores em um projeto comecem no mesmo ponto. Em caso de problemas, é possível descartar o ambiente atual, baixar um novo contêiner dev, clonar o repositório git e retomar a partir do ponto anterior.
Os contêineres Dev estão ganhando popularidade na Microsoft, com a equipe SQL do Azure lançando modelos pré-configurados para serem usados em contêineres de desenvolvimento. Estes modelos incluem suporte para ferramentas de desenvolvimento comuns e um banco de dados pronto para utilização. Embora adicionar dados a um contêiner seja geralmente desencorajado, neste caso estão sendo utilizados como um ambiente de desenvolvimento, e não como um ambiente de produção sem estado.
Se estiver utilizando o Windows para desenvolver aplicativos, os contêineres dev podem tirar proveito do editor de códigos do Visual Studio Code e da máquina virtual incorporada do Windows Subsystem para Linux (WSL), oferecendo tudo o necessário para criar e executar contêineres dev de forma gratuita.
Construindo um recipiente desenvolvendo.
O projeto de código aberto patrocinado pela Microsoft, chamado de especificações do recipiente dev, possui diversos repositórios no GitHub e oferece ferramentas para transformar uma descrição em um recipiente em funcionamento. O objetivo é fornecer tudo o que é necessário para definir não apenas as aplicações desejadas no recipiente, mas também as configurações necessárias. Isso possibilitará o uso de um recipiente dev para estabelecer diretrizes, limites e padrões de codificação.
No início, tudo se inicia com uma descrição detalhada do formato JSON chamado devcontainer.json, que contém a configuração básica de um container de desenvolvimento. Detalhes extras são guardados em etiquetas da imagem e em scripts especiais denominados Dev Container Features. O objetivo é descrever todas as ferramentas necessárias para apoiar a maioria das etapas do processo de desenvolvimento de aplicativos, permitindo que seu código seja levado ao ambiente de CI/CD.
A estrutura do recipiente Dev deve ser consistente, garantindo que sempre que você utilizar uma descrição para criar um recipiente, o resultado será o mesmo. Todos os códigos presentes no recipiente podem produzir a mesma saída ao testar um mesmo ramo, facilitando a fusão e a solicitação de pull.
É viável criar uma definição de recipiente do início, porém é mais prático utilizar a extensão Visual Studio Code Dev Containers (que faz parte do Pacote de Extensão de Desenvolvimento Remoto) para construir e controlar os recipientes. A tarefa se torna ainda mais simples se você optar por começar com uma imagem de ambiente de desenvolvimento pré-existente do repositório de recipientes dev da Microsoft e, posteriormente, fazer suas próprias modificações.
Você tem a opção de instalar extensões no Visual Studio Code, o que significa que um aplicativo Python pode ter uma variedade de extensões específicas para Python do VS Code. Além disso, é possível redirecionar portas para testar a saída de aplicativos no seu computador principal e utilizar ferramentas de depuração, como as ferramentas de desenvolvedor F12 do Edge.
Paráfrase: Recursos de Contêineres de Desenvolvimento são uma forma conveniente de incluir aplicações e ferramentas pré-definidas em um contêiner. Esses trechos de código reutilizáveis podem ser incorporados a um contêiner de desenvolvimento existente para adicionar a ferramenta descrita pelo código ao seu contêiner. São disponibilizados como uma pasta contendo um arquivo de definição json do recurso do contêiner de desenvolvimento, juntamente com um script de instalação e quaisquer arquivos necessários.
Utilizando recipientes vazios.
Ao utilizar recipientes dev como parte de sua rotina habitual, é possível desenvolver uma coleção de recursos que podem ser facilmente incorporados às suas configurações de recipiente. É viável personalizar recipientes prontos ou criar rapidamente uma nova configuração para um projeto específico, considerando os recursos como peças modulares que se encaixam em um recipiente base padrão estabelecido para uma determinada pilha de tecnologia.
A construção de um recipiente dev segue um processo lógico, começando com uma abordagem top-down em que arquitetos e líderes de desenvolvimento concordam com uma pilha de projeto. Após selecionar uma imagem de plataforma base, como .Net, na galeria de contêineres VS Code, é possível personalizá-la para o projeto, adicionando novas ferramentas e recursos ao editar o arquivo devcontainer.json no código VS. Uma vez que o recipiente esteja configurado de acordo com as necessidades, ele pode ser implementado juntamente com as ferramentas do VS necessárias para a equipe de desenvolvimento.
O seu hospedeiro de contêineres local deve estar executando Docker ou ter um CLI compatível com Docker instalado em seu motor. O uso do CLI é essencial, pois o recipiente dev opera por meio dele, sem a necessidade de acesso direto ao hospedeiro de contêineres. Isso apresenta tanto vantagens quanto desvantagens: não há necessidade de depender de APIs ou do Docker em si. Desde que um ambiente de contêiner suporte o Docker CLI, você pode utilizá-lo com seus recipientes dev. No entanto, se não for suportado, isso pode ser um problema, como no caso de motores de contêineres alternativos, como o Podman, que somente suporta parte do Docker CLI. Como o projeto de recipientes dev é de código aberto, há esforços contínuos para oferecer suporte a outros motores de contêineres, e os usuários podem contribuir por meio do GitHub.
Uma vez que tenha um contêiner em execução em uma instância local do Docker (Hyper-V ou WSL), é possível utilizar as ferramentas remotas do VS Code para se conectar ao contêiner e instalar um ambiente de desenvolvimento local. Isso permite usar o código do VS Code local como interface de usuário, instalando as extensões mencionadas no arquivo devcontainer.json no contêiner remoto. Dessa forma, as extensões escolhidas em seu ambiente de desenvolvimento local ficam separadas das do contêiner dev, embora você ainda possa adicionar extensões adicionais conforme desejado.
Essas são as mesmas ferramentas de desenvolvimento remoto que são utilizadas para trabalhar do Windows para WSL ou para um computador remoto. É uma tecnologia testada que opera de forma eficiente, com compatibilidade para as principais distribuições Linux, tanto em processadores Intel quanto Arm.
Ao utilizar recursos para incluir ferramentas em um recipiente que contenha a pilha de tempo de execução, você adquire uma nova abordagem para testar o código como parte do seu processo de integração contínua/entrega contínua. É possível realizar a configuração do recipiente de desenvolvimento a partir de uma ação no GitHub ou de um pipeline de DevOps do Azure, permitindo a injeção de código e testes em um ambiente conhecido. Da mesma forma, é viável utilizar um recipiente de tempo de execução como um ambiente para hospedar o código em um ambiente Kubernetes de produção.
Iniciar o processo de desenvolvimento em um recipiente mantém o código no mesmo ambiente durante todo o seu ciclo de vida, auxiliando os desenvolvedores a compreender as limitações e benefícios associados às aplicações nativas da nuvem. Os recipientes de desenvolvimento podem auxiliar as equipes a focar em uma base uniforme para um projeto, possibilitando que todos construam suas ferramentas em um ambiente padronizado que pode ser facilmente reiniciado e atualizado.