Eu desenvolvo principalmente usando o Visual Studio no Windows. O problema é que, depois de um tempo, o Windows fica atolado e eu tenho que reinstalar o Windows. Da mesma forma, mudar para novas máquinas é um problema.
Reinstalar o Windows é doloroso porque meu ambiente de desenvolvimento possui muitas dependências (como arquivos de configuração extras do MSBuild, extensões VS, npm, Java etc.). Não imagino que esteja sozinho em ter um sistema complexo, e configurá-lo novamente provavelmente levaria um dia no mínimo.
Eu realmente não usei o Docker, mas em teoria parece que eu poderia configurar meu ambiente de desenvolvimento em um contêiner do Windows e depois enviá-lo (por exemplo, copiar para o meu laptop, instalar uma nova instalação do Windows) e deve ser indolor .
O que estou descrevendo é possível? Existem desvantagens, como desempenho, confiabilidade? Outras dicas?
Respostas:
Este não é um problema incomum, mas o Docker não é realmente a ferramenta certa para resolvê-lo. Os contêineres em geral (incluindo o Docker) destinam-se a fornecer um tempo de execução do aplicativo para um único processo , como um servidor Web, não para um cenário de vários processos, como um ambiente de desenvolvimento. Em pode ser feito, mas não é uma solução muito elegante.
Uma abordagem melhor (e mais comum) é criar VMs por meio de um hipervisor tradicional como o VirtualBox ou o Hyper-V (já que você está no Windows). Um fluxo de trabalho típico é:
O Vagrant também é uma ferramenta fantástica para executar grande parte do exposto de maneira mais estruturada.
Um benefício colateral de tudo isso é que agora você tem ambientes padronizados que podem ser compartilhados com toda a equipe, economizando o esforço de todos. Isso é especialmente excelente para a rápida entrada de pessoas novas.
De volta à sua pergunta original, o Docker não se destina realmente a isso, mas se você tivesse um ambiente de desenvolvimento pequeno o suficiente (por exemplo, PHP no Linux), poderia fazê-lo em um contêiner, e o benefício seria uma imagem muito menor (potencialmente menos de 100 MB vs muitos GB para uma VM do Windows com disco virtual).
fonte
não em um contêiner de docker, mas sim em n contêineres de docker.
Embora você possa, teoricamente, montar todo o seu ambiente de desenvolvimento em um único contêiner, o docker não foi feito para isso.
Em vez disso, você deve implantar cada serviço em contêineres separados, usando a janela de encaixe , gerenciando toda a infraestrutura em um único arquivo, onde cada serviço terá seu próprio arquivo de log, espaço de usuário, rede, etc.
Deixe-me dar um exemplo, este é um rascunho do meu
docker-compose.yml
Há um proxy nginx (myproxy), dois bancos de dados postgres semelhantes (mydb1 e 2), um antigo servidor de aplicativos web java (www), um contêiner java jetty que fornece um serviço da web restante e, finalmente, um contêiner postfix SMTP muito simples.
Tudo começa - geralmente :) - com
docker-compose up
, na minha máquina de desenvolvimento ou na produção; os arquivos de log são agregados em um arquivo fácil de ler e é possível replicar localmente quase todas as funcionalidades com a garantia de que, se funcionar no meu laptop, funcionará.fonte
Eu uso VMs do VirtualBox para esse tipo de coisa.
A portabilidade de ter seu ambiente de desenvolvimento em um contêiner é útil, mas o mais legal é que eu posso capturar uma imagem antes de qualquer tentativa de atualização e, se eu estragar tudo, não há problema em voltar atrás e começar de novo.
Também acho útil fazer isso porque frequentemente trabalho com várias versões de coisas como Qt, e não sinto vontade de descobrir como coexistir as duas versões - em vez disso, apenas as coloco em VMs diferentes e Não preciso me preocupar com interações porque instalei algo incorretamente.
fonte